Takashi Iwai ff9dd4
From 4d3e67bb6fa26e50eb087799d98ec232acfb630d Mon Sep 17 00:00:00 2001
Takashi Iwai ff9dd4
From: Chuanxiao Dong <chuanxiao.dong@intel.com>
Takashi Iwai ff9dd4
Date: Fri, 4 Aug 2017 13:08:59 +0800
Takashi Iwai ff9dd4
Subject: [PATCH] drm/i915/gvt: Refine the intel_vgpu_reset_gtt reset function
Takashi Iwai ff9dd4
Git-commit: 4d3e67bb6fa26e50eb087799d98ec232acfb630d
Takashi Iwai ff9dd4
Patch-mainline: v4.14-rc1
Takashi Iwai ff9dd4
References: FATE#322643 bsc#1055900
Takashi Iwai ff9dd4
Takashi Iwai ff9dd4
When doing the VGPU reset, we don't need to do the gtt/ppgtt reset.
Takashi Iwai ff9dd4
This will make the GVT to do the ppgtt shadow every time for
Takashi Iwai ff9dd4
a workload and caused really bad performance after a VGPU reset.
Takashi Iwai ff9dd4
This patch will make sure ppgtt clean only happen at device module
Takashi Iwai ff9dd4
level reset to fix this.
Takashi Iwai ff9dd4
Takashi Iwai ff9dd4
Signed-off-by: Chuanxiao Dong <chuanxiao.dong@intel.com>
Takashi Iwai ff9dd4
Signed-off-by: Zhenyu Wang <zhenyuw@linux.intel.com>
Takashi Iwai ff9dd4
Acked-by: Takashi Iwai <tiwai@suse.de>
Takashi Iwai ff9dd4
Takashi Iwai ff9dd4
---
Takashi Iwai ff9dd4
 drivers/gpu/drm/i915/gvt/gtt.c  |    6 +-----
Takashi Iwai ff9dd4
 drivers/gpu/drm/i915/gvt/gtt.h  |    2 +-
Takashi Iwai ff9dd4
 drivers/gpu/drm/i915/gvt/vgpu.c |    6 +++---
Takashi Iwai ff9dd4
 3 files changed, 5 insertions(+), 9 deletions(-)
Takashi Iwai ff9dd4
Takashi Iwai ff9dd4
--- a/drivers/gpu/drm/i915/gvt/gtt.c
Takashi Iwai ff9dd4
+++ b/drivers/gpu/drm/i915/gvt/gtt.c
Takashi Iwai ff9dd4
@@ -2352,13 +2352,12 @@ void intel_vgpu_reset_ggtt(struct intel_
Takashi Iwai ff9dd4
 /**
Takashi Iwai ff9dd4
  * intel_vgpu_reset_gtt - reset the all GTT related status
Takashi Iwai ff9dd4
  * @vgpu: a vGPU
Takashi Iwai ff9dd4
- * @dmlr: true for vGPU Device Model Level Reset, false for GT Reset
Takashi Iwai ff9dd4
  *
Takashi Iwai ff9dd4
  * This function is called from vfio core to reset reset all
Takashi Iwai ff9dd4
  * GTT related status, including GGTT, PPGTT, scratch page.
Takashi Iwai ff9dd4
  *
Takashi Iwai ff9dd4
  */
Takashi Iwai ff9dd4
-void intel_vgpu_reset_gtt(struct intel_vgpu *vgpu, bool dmlr)
Takashi Iwai ff9dd4
+void intel_vgpu_reset_gtt(struct intel_vgpu *vgpu)
Takashi Iwai ff9dd4
 {
Takashi Iwai ff9dd4
 	int i;
Takashi Iwai ff9dd4
 
Takashi Iwai ff9dd4
@@ -2370,9 +2369,6 @@ void intel_vgpu_reset_gtt(struct intel_v
Takashi Iwai ff9dd4
 	 */
Takashi Iwai ff9dd4
 	intel_vgpu_free_mm(vgpu, INTEL_GVT_MM_PPGTT);
Takashi Iwai ff9dd4
 
Takashi Iwai ff9dd4
-	if (!dmlr)
Takashi Iwai ff9dd4
-		return;
Takashi Iwai ff9dd4
-
Takashi Iwai ff9dd4
 	intel_vgpu_reset_ggtt(vgpu);
Takashi Iwai ff9dd4
 
Takashi Iwai ff9dd4
 	/* clear scratch page for security */
Takashi Iwai ff9dd4
--- a/drivers/gpu/drm/i915/gvt/gtt.h
Takashi Iwai ff9dd4
+++ b/drivers/gpu/drm/i915/gvt/gtt.h
Takashi Iwai ff9dd4
@@ -212,7 +212,7 @@ extern void intel_vgpu_clean_gtt(struct
Takashi Iwai ff9dd4
 void intel_vgpu_reset_ggtt(struct intel_vgpu *vgpu);
Takashi Iwai ff9dd4
 
Takashi Iwai ff9dd4
 extern int intel_gvt_init_gtt(struct intel_gvt *gvt);
Takashi Iwai ff9dd4
-extern void intel_vgpu_reset_gtt(struct intel_vgpu *vgpu, bool dmlr);
Takashi Iwai ff9dd4
+void intel_vgpu_reset_gtt(struct intel_vgpu *vgpu);
Takashi Iwai ff9dd4
 extern void intel_gvt_clean_gtt(struct intel_gvt *gvt);
Takashi Iwai ff9dd4
 
Takashi Iwai ff9dd4
 extern struct intel_vgpu_mm *intel_gvt_find_ppgtt_mm(struct intel_vgpu *vgpu,
Takashi Iwai ff9dd4
--- a/drivers/gpu/drm/i915/gvt/vgpu.c
Takashi Iwai ff9dd4
+++ b/drivers/gpu/drm/i915/gvt/vgpu.c
Takashi Iwai ff9dd4
@@ -504,11 +504,11 @@ void intel_gvt_reset_vgpu_locked(struct
Takashi Iwai ff9dd4
 	/* full GPU reset or device model level reset */
Takashi Iwai ff9dd4
 	if (engine_mask == ALL_ENGINES || dmlr) {
Takashi Iwai ff9dd4
 
Takashi Iwai ff9dd4
-		intel_vgpu_reset_gtt(vgpu, dmlr);
Takashi Iwai ff9dd4
-
Takashi Iwai ff9dd4
 		/*fence will not be reset during virtual reset */
Takashi Iwai ff9dd4
-		if (dmlr)
Takashi Iwai ff9dd4
+		if (dmlr) {
Takashi Iwai ff9dd4
+			intel_vgpu_reset_gtt(vgpu);
Takashi Iwai ff9dd4
 			intel_vgpu_reset_resource(vgpu);
Takashi Iwai ff9dd4
+		}
Takashi Iwai ff9dd4
 
Takashi Iwai ff9dd4
 		intel_vgpu_reset_mmio(vgpu, dmlr);
Takashi Iwai ff9dd4
 		populate_pvinfo_page(vgpu);