drm/xe: destroy clients engine and vm xarrays on close
authorMika Kuoppala <mika.kuoppala@linux.intel.com>
Wed, 12 Apr 2023 11:09:23 +0000 (14:09 +0300)
committerRodrigo Vivi <rodrigo.vivi@intel.com>
Tue, 19 Dec 2023 23:33:49 +0000 (18:33 -0500)
xe_file_close cleanups the xarrays but forgets
to destroy them causing a memleak in xarray internals.
Found with kmemleak.

Signed-off-by: Mika Kuoppala <mika.kuoppala@linux.intel.com>
Reviewed-by: Christoph Manszewski <christoph.manszewski@intel.com>
Reviewed-by: Lucas De Marchi <lucas.demarchi@intel.com>
Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
drivers/gpu/drm/xe/xe_device.c

index 2f8777f365a4295fdad30228face35545666d073..e686c25a0ad1d5ee719eb590d4d30981dd04a217 100644 (file)
@@ -69,6 +69,7 @@ static void xe_file_close(struct drm_device *dev, struct drm_file *file)
                xe_engine_put(e);
        }
        mutex_unlock(&xef->engine.lock);
+       xa_destroy(&xef->engine.xa);
        mutex_destroy(&xef->engine.lock);
        device_kill_persistent_engines(xe, xef);
 
@@ -76,6 +77,7 @@ static void xe_file_close(struct drm_device *dev, struct drm_file *file)
        xa_for_each(&xef->vm.xa, idx, vm)
                xe_vm_close_and_put(vm);
        mutex_unlock(&xef->vm.lock);
+       xa_destroy(&xef->vm.xa);
        mutex_destroy(&xef->vm.lock);
 
        kfree(xef);