Introduce an generic API to reset vGPU virtual submission interface.
Signed-off-by: Zhi Wang <zhi.a.wang@intel.com>
        }
 }
 
-int init_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,
+void reset_execlist(struct intel_vgpu *vgpu,
                unsigned long engine_mask)
 {
        struct drm_i915_private *dev_priv = vgpu->gvt->dev_priv;
                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 = {
        .name = "execlist",
        .init = init_execlist,
+       .reset = reset_execlist,
        .clean = clean_execlist,
 };
 
        const char *name;
        int (*init)(struct intel_vgpu *vgpu);
        void (*clean)(struct intel_vgpu *vgpu);
+       void (*reset)(struct intel_vgpu *vgpu, unsigned long engine_mask);
 };
 
 struct intel_vgpu_submission {
 
        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
  * @vgpu: a 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);
 
 int intel_vgpu_select_submission_ops(struct intel_vgpu *vgpu,
 
                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 */
        if (engine_mask == ALL_ENGINES || dmlr) {
+               intel_vgpu_select_submission_ops(vgpu, 0);
 
                /*fence will not be reset during virtual reset */
                if (dmlr) {