[PATCH v2 5/5] Revert "drm/i915: Release GT resources on driver remove"

Janusz Krzysztofik janusz.krzysztofik at linux.intel.com
Sun Jun 7 16:57:28 UTC 2020


This reverts commit f681e880dd022336407a7d277c152df85d369ad2.
---
 drivers/gpu/drm/i915/gt/intel_gt.c | 38 ++++++++++++++----------------
 drivers/gpu/drm/i915/gt/intel_gt.h |  1 +
 drivers/gpu/drm/i915/i915_gem.c    |  2 ++
 3 files changed, 21 insertions(+), 20 deletions(-)

diff --git a/drivers/gpu/drm/i915/gt/intel_gt.c b/drivers/gpu/drm/i915/gt/intel_gt.c
index 5829a5b61318..ebc29b6ee86c 100644
--- a/drivers/gpu/drm/i915/gt/intel_gt.c
+++ b/drivers/gpu/drm/i915/gt/intel_gt.c
@@ -592,24 +592,6 @@ int intel_gt_init(struct intel_gt *gt)
 	return err;
 }
 
-static void intel_gt_driver_release(struct intel_gt *gt)
-{
-	struct i915_address_space *vm;
-	intel_wakeref_t wakeref;
-
-	/* Scrub all HW state upon release */
-	with_intel_runtime_pm(gt->uncore->rpm, wakeref)
-		__intel_gt_reset(gt, ALL_ENGINES);
-
-	vm = fetch_and_zero(&gt->vm);
-	if (!GEM_WARN_ON(!vm))
-		i915_vm_put(vm);
-
-	intel_gt_pm_fini(gt);
-	intel_gt_fini_scratch(gt);
-	intel_gt_fini_buffer_pool(gt);
-}
-
 void intel_gt_driver_remove(struct intel_gt *gt)
 {
 	__intel_gt_disable(gt);
@@ -617,8 +599,6 @@ void intel_gt_driver_remove(struct intel_gt *gt)
 	intel_uc_driver_remove(&gt->uc);
 
 	intel_engines_release(gt);
-
-	intel_gt_driver_release(gt);
 }
 
 void intel_gt_driver_unregister(struct intel_gt *gt)
@@ -633,6 +613,24 @@ void intel_gt_driver_unregister(struct intel_gt *gt)
 	intel_gt_set_wedged(gt);
 }
 
+void intel_gt_driver_release(struct intel_gt *gt)
+{
+	struct i915_address_space *vm;
+	intel_wakeref_t wakeref;
+
+	/* Scrub all HW state upon release */
+	with_intel_runtime_pm(gt->uncore->rpm, wakeref)
+		__intel_gt_reset(gt, ALL_ENGINES);
+
+	vm = fetch_and_zero(&gt->vm);
+	if (vm) /* FIXME being called twice on error paths :( */
+		i915_vm_put(vm);
+
+	intel_gt_pm_fini(gt);
+	intel_gt_fini_scratch(gt);
+	intel_gt_fini_buffer_pool(gt);
+}
+
 void intel_gt_driver_late_release(struct intel_gt *gt)
 {
 	/* We need to wait for inflight RCU frees to release their grip */
diff --git a/drivers/gpu/drm/i915/gt/intel_gt.h b/drivers/gpu/drm/i915/gt/intel_gt.h
index 9d6a88fffcba..4fac043750aa 100644
--- a/drivers/gpu/drm/i915/gt/intel_gt.h
+++ b/drivers/gpu/drm/i915/gt/intel_gt.h
@@ -41,6 +41,7 @@ void intel_gt_driver_register(struct intel_gt *gt);
 
 void intel_gt_driver_unregister(struct intel_gt *gt);
 void intel_gt_driver_remove(struct intel_gt *gt);
+void intel_gt_driver_release(struct intel_gt *gt);
 
 void intel_gt_driver_late_release(struct intel_gt *gt);
 
diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
index 26de1d824d0c..f578b823e2cc 100644
--- a/drivers/gpu/drm/i915/i915_gem.c
+++ b/drivers/gpu/drm/i915/i915_gem.c
@@ -1247,6 +1247,8 @@ void i915_gem_driver_release(struct drm_i915_private *dev_priv)
 {
 	i915_gem_driver_release__contexts(dev_priv);
 
+	intel_gt_driver_release(&dev_priv->gt);
+
 	intel_wa_list_free(&dev_priv->gt_wa_list);
 
 	i915_gem_cleanup_userptr(dev_priv);
-- 
2.21.1



More information about the Intel-gfx-trybot mailing list