Commit 06bb372f authored by Zhi Wang's avatar Zhi Wang Committed by Zhenyu Wang

drm/i915/gvt: Introduce intel_vgpu_reset_submission

Introduce an generic API to reset vGPU virtual submission interface.
Signed-off-by: default avatarZhi Wang <zhi.a.wang@intel.com>
parent ad1d3636
...@@ -564,18 +564,7 @@ void clean_execlist(struct intel_vgpu *vgpu) ...@@ -564,18 +564,7 @@ void clean_execlist(struct intel_vgpu *vgpu)
} }
} }
int init_execlist(struct intel_vgpu *vgpu) void reset_execlist(struct intel_vgpu *vgpu,
{
enum intel_engine_id i;
struct intel_engine_cs *engine;
for_each_engine(engine, vgpu->gvt->dev_priv, i)
init_vgpu_execlist(vgpu, i);
return 0;
}
void intel_vgpu_reset_execlist(struct intel_vgpu *vgpu,
unsigned long engine_mask) unsigned long engine_mask)
{ {
struct drm_i915_private *dev_priv = vgpu->gvt->dev_priv; struct drm_i915_private *dev_priv = vgpu->gvt->dev_priv;
...@@ -587,8 +576,15 @@ void intel_vgpu_reset_execlist(struct intel_vgpu *vgpu, ...@@ -587,8 +576,15 @@ void intel_vgpu_reset_execlist(struct intel_vgpu *vgpu,
init_vgpu_execlist(vgpu, engine->id); init_vgpu_execlist(vgpu, engine->id);
} }
int init_execlist(struct intel_vgpu *vgpu)
{
reset_execlist(vgpu, ALL_ENGINES);
return 0;
}
const struct intel_vgpu_submission_ops intel_vgpu_execlist_submission_ops = { const struct intel_vgpu_submission_ops intel_vgpu_execlist_submission_ops = {
.name = "execlist", .name = "execlist",
.init = init_execlist, .init = init_execlist,
.reset = reset_execlist,
.clean = clean_execlist, .clean = clean_execlist,
}; };
...@@ -151,6 +151,7 @@ struct intel_vgpu_submission_ops { ...@@ -151,6 +151,7 @@ struct intel_vgpu_submission_ops {
const char *name; const char *name;
int (*init)(struct intel_vgpu *vgpu); int (*init)(struct intel_vgpu *vgpu);
void (*clean)(struct intel_vgpu *vgpu); void (*clean)(struct intel_vgpu *vgpu);
void (*reset)(struct intel_vgpu *vgpu, unsigned long engine_mask);
}; };
struct intel_vgpu_submission { struct intel_vgpu_submission {
......
...@@ -889,6 +889,26 @@ void intel_vgpu_clean_submission(struct intel_vgpu *vgpu) ...@@ -889,6 +889,26 @@ void intel_vgpu_clean_submission(struct intel_vgpu *vgpu)
kmem_cache_destroy(s->workloads); kmem_cache_destroy(s->workloads);
} }
/**
* intel_vgpu_reset_submission - reset submission-related resource for vGPU
* @vgpu: a vGPU
* @engine_mask: engines expected to be reset
*
* This function is called when a vGPU is being destroyed.
*
*/
void intel_vgpu_reset_submission(struct intel_vgpu *vgpu,
unsigned long engine_mask)
{
struct intel_vgpu_submission *s = &vgpu->submission;
if (!s->active)
return;
s->ops->reset(vgpu, engine_mask);
}
/** /**
* intel_vgpu_setup_submission - setup submission-related resource for vGPU * intel_vgpu_setup_submission - setup submission-related resource for vGPU
* @vgpu: a vGPU * @vgpu: a vGPU
......
...@@ -139,6 +139,9 @@ void intel_gvt_wait_vgpu_idle(struct intel_vgpu *vgpu); ...@@ -139,6 +139,9 @@ void intel_gvt_wait_vgpu_idle(struct intel_vgpu *vgpu);
int intel_vgpu_setup_submission(struct intel_vgpu *vgpu); int intel_vgpu_setup_submission(struct intel_vgpu *vgpu);
void intel_vgpu_reset_submission(struct intel_vgpu *vgpu,
unsigned long engine_mask);
void intel_vgpu_clean_submission(struct intel_vgpu *vgpu); void intel_vgpu_clean_submission(struct intel_vgpu *vgpu);
int intel_vgpu_select_submission_ops(struct intel_vgpu *vgpu, int intel_vgpu_select_submission_ops(struct intel_vgpu *vgpu,
......
...@@ -492,10 +492,10 @@ void intel_gvt_reset_vgpu_locked(struct intel_vgpu *vgpu, bool dmlr, ...@@ -492,10 +492,10 @@ void intel_gvt_reset_vgpu_locked(struct intel_vgpu *vgpu, bool dmlr,
mutex_lock(&gvt->lock); mutex_lock(&gvt->lock);
} }
intel_vgpu_reset_execlist(vgpu, resetting_eng); intel_vgpu_reset_submission(vgpu, resetting_eng);
/* full GPU reset or device model level reset */ /* full GPU reset or device model level reset */
if (engine_mask == ALL_ENGINES || dmlr) { if (engine_mask == ALL_ENGINES || dmlr) {
intel_vgpu_select_submission_ops(vgpu, 0);
/*fence will not be reset during virtual reset */ /*fence will not be reset during virtual reset */
if (dmlr) { if (dmlr) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment