drm/i915/gvt: Refine the intel_vgpu_reset_gtt reset function
authorChuanxiao Dong <chuanxiao.dong@intel.com>
Fri, 4 Aug 2017 05:08:59 +0000 (13:08 +0800)
committerZhenyu Wang <zhenyuw@linux.intel.com>
Thu, 10 Aug 2017 02:26:10 +0000 (10:26 +0800)
When doing the VGPU reset, we don't need to do the gtt/ppgtt reset.
This will make the GVT to do the ppgtt shadow every time for
a workload and caused really bad performance after a VGPU reset.
This patch will make sure ppgtt clean only happen at device module
level reset to fix this.

Signed-off-by: Chuanxiao Dong <chuanxiao.dong@intel.com>
Signed-off-by: Zhenyu Wang <zhenyuw@linux.intel.com>
drivers/gpu/drm/i915/gvt/gtt.c
drivers/gpu/drm/i915/gvt/gtt.h
drivers/gpu/drm/i915/gvt/vgpu.c

index e397f5e0722f5fb2292c2894be7b3c66c626abf8..f862681c70d1b523d3019cb23aa3e38ca3c87ae7 100644 (file)
@@ -2352,13 +2352,12 @@ void intel_vgpu_reset_ggtt(struct intel_vgpu *vgpu)
 /**
  * intel_vgpu_reset_gtt - reset the all GTT related status
  * @vgpu: a vGPU
- * @dmlr: true for vGPU Device Model Level Reset, false for GT Reset
  *
  * This function is called from vfio core to reset reset all
  * GTT related status, including GGTT, PPGTT, scratch page.
  *
  */
-void intel_vgpu_reset_gtt(struct intel_vgpu *vgpu, bool dmlr)
+void intel_vgpu_reset_gtt(struct intel_vgpu *vgpu)
 {
        int i;
 
@@ -2370,9 +2369,6 @@ void intel_vgpu_reset_gtt(struct intel_vgpu *vgpu, bool dmlr)
         */
        intel_vgpu_free_mm(vgpu, INTEL_GVT_MM_PPGTT);
 
-       if (!dmlr)
-               return;
-
        intel_vgpu_reset_ggtt(vgpu);
 
        /* clear scratch page for security */
index abb41ee1409bd503d00a6d0094818d85b32de157..30a4c8d160266d7af70b1cf2c9f6b53000d3c411 100644 (file)
@@ -212,7 +212,7 @@ extern void intel_vgpu_clean_gtt(struct intel_vgpu *vgpu);
 void intel_vgpu_reset_ggtt(struct intel_vgpu *vgpu);
 
 extern int intel_gvt_init_gtt(struct intel_gvt *gvt);
-extern void intel_vgpu_reset_gtt(struct intel_vgpu *vgpu, bool dmlr);
+void intel_vgpu_reset_gtt(struct intel_vgpu *vgpu);
 extern void intel_gvt_clean_gtt(struct intel_gvt *gvt);
 
 extern struct intel_vgpu_mm *intel_gvt_find_ppgtt_mm(struct intel_vgpu *vgpu,
index 90c14e6e3ea06b8de36d90284132659eb80f72c6..5b44d123bf2451e4107de27b42a600d1091b4396 100644 (file)
@@ -502,11 +502,11 @@ void intel_gvt_reset_vgpu_locked(struct intel_vgpu *vgpu, bool dmlr,
        /* full GPU reset or device model level reset */
        if (engine_mask == ALL_ENGINES || dmlr) {
 
-               intel_vgpu_reset_gtt(vgpu, dmlr);
-
                /*fence will not be reset during virtual reset */
-               if (dmlr)
+               if (dmlr) {
+                       intel_vgpu_reset_gtt(vgpu);
                        intel_vgpu_reset_resource(vgpu);
+               }
 
                intel_vgpu_reset_mmio(vgpu, dmlr);
                populate_pvinfo_page(vgpu);