We do not want to add any more VMA into the GGTT [accidentally] after we
start removing the device, so mark it as closed. Similarly make sure
that all remaining user mmaps are revoked.

Signed-off-by: Chris Wilson <[email protected]>
Cc: Janusz Krzysztofik <[email protected]>
---
 drivers/gpu/drm/i915/gt/intel_ggtt.c | 12 ++++++++++--
 drivers/gpu/drm/i915/gt/intel_gtt.h  |  1 +
 drivers/gpu/drm/i915/i915_drv.c      |  1 +
 3 files changed, 12 insertions(+), 2 deletions(-)

diff --git a/drivers/gpu/drm/i915/gt/intel_ggtt.c 
b/drivers/gpu/drm/i915/gt/intel_ggtt.c
index dfc979a24450..53cf7a93f363 100644
--- a/drivers/gpu/drm/i915/gt/intel_ggtt.c
+++ b/drivers/gpu/drm/i915/gt/intel_ggtt.c
@@ -682,8 +682,6 @@ static void ggtt_cleanup_hw(struct i915_ggtt *ggtt)
 {
        struct i915_vma *vma, *vn;
 
-       atomic_set(&ggtt->vm.open, 0);
-
        rcu_barrier(); /* flush the RCU'ed__i915_vm_release */
        flush_workqueue(ggtt->vm.i915->wq);
 
@@ -710,6 +708,16 @@ static void ggtt_cleanup_hw(struct i915_ggtt *ggtt)
                io_mapping_fini(&ggtt->iomap);
 }
 
+void i915_ggtt_driver_remove(struct drm_i915_private *i915)
+{
+       struct i915_ggtt *ggtt = &i915->ggtt;
+
+       atomic_set(&ggtt->vm.open, 0);
+
+       /* And revoke *all* residual GGTT mmaps */
+       unmap_mapping_range(i915->drm.anon_inode->i_mapping, 0, -1, 1);
+}
+
 /**
  * i915_ggtt_driver_release - Clean up GGTT hardware initialization
  * @i915: i915 device
diff --git a/drivers/gpu/drm/i915/gt/intel_gtt.h 
b/drivers/gpu/drm/i915/gt/intel_gtt.h
index 773fc76dfa1b..0e0b38e3a3f4 100644
--- a/drivers/gpu/drm/i915/gt/intel_gtt.h
+++ b/drivers/gpu/drm/i915/gt/intel_gtt.h
@@ -503,6 +503,7 @@ int i915_ggtt_enable_hw(struct drm_i915_private *i915);
 void i915_ggtt_enable_guc(struct i915_ggtt *ggtt);
 void i915_ggtt_disable_guc(struct i915_ggtt *ggtt);
 int i915_init_ggtt(struct drm_i915_private *i915);
+void i915_ggtt_driver_remove(struct drm_i915_private *i915);
 void i915_ggtt_driver_release(struct drm_i915_private *i915);
 
 static inline bool i915_ggtt_has_aperture(const struct i915_ggtt *ggtt)
diff --git a/drivers/gpu/drm/i915/i915_drv.c b/drivers/gpu/drm/i915/i915_drv.c
index 34ee12f3f02d..d7026be4b10d 100644
--- a/drivers/gpu/drm/i915/i915_drv.c
+++ b/drivers/gpu/drm/i915/i915_drv.c
@@ -768,6 +768,7 @@ static void i915_driver_hw_remove(struct drm_i915_private 
*dev_priv)
 
        i915_perf_fini(dev_priv);
 
+       i915_ggtt_driver_remove(dev_priv);
        if (pdev->msi_enabled)
                pci_disable_msi(pdev);
 
-- 
2.20.1

_______________________________________________
Intel-gfx mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to