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 <chris@xxxxxxxxxxxxxxxxxx> Cc: Janusz Krzysztofik <janusz.krzysztofik@xxxxxxxxxxxxxxx> --- 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 Intel-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/intel-gfx