mock_gem_device() takes a reference on the GGTT vm for gt->vm, but
neither mock_device_release() nor the setup error paths drop it, unlike
the real teardown where intel_gt_driver_release() releases gt->vm.
Drop the reference before mock_fini_ggtt() and on the error paths.

Fixes: cdeea858d8df ("drm/i915: Remove unused i915->ggtt")
Cc: [email protected]
Signed-off-by: Wentao Liang <[email protected]>
---
 drivers/gpu/drm/i915/selftests/mock_gem_device.c | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/drivers/gpu/drm/i915/selftests/mock_gem_device.c 
b/drivers/gpu/drm/i915/selftests/mock_gem_device.c
index 27dc0e40a8d7..12cd252d9250 100644
--- a/drivers/gpu/drm/i915/selftests/mock_gem_device.c
+++ b/drivers/gpu/drm/i915/selftests/mock_gem_device.c
@@ -71,6 +71,7 @@ static void mock_device_release(struct drm_device *dev)
 
        i915_gem_drain_workqueue(i915);
 
+       i915_vm_put(fetch_and_zero(&to_gt(i915)->vm));
        mock_fini_ggtt(to_gt(i915)->ggtt);
        destroy_workqueue(i915->unordered_wq);
        destroy_workqueue(i915->wq);
@@ -145,6 +146,7 @@ struct drm_i915_private *mock_gem_device(void)
 #endif
        struct drm_i915_private *i915;
        struct intel_display *display;
+       struct i915_address_space *vm;
        struct pci_dev *pdev;
        int ret;
 
@@ -263,6 +265,9 @@ struct drm_i915_private *mock_gem_device(void)
 err_drv:
        intel_region_ttm_device_fini(i915);
 err_ttm:
+       vm = fetch_and_zero(&to_gt(i915)->vm);
+       if (vm)
+               i915_vm_put(vm);
        intel_gt_driver_late_release_all(i915);
        intel_memory_regions_driver_release(i915);
        drm_mode_config_cleanup(&i915->drm);
-- 
2.34.1

Reply via email to