drm/xe: Move part of xe_file cleanup to a helper
authorUmesh Nerlige Ramappa <umesh.nerlige.ramappa@intel.com>
Thu, 18 Jul 2024 21:05:45 +0000 (14:05 -0700)
committerLucas De Marchi <lucas.demarchi@intel.com>
Fri, 19 Jul 2024 07:31:07 +0000 (00:31 -0700)
In order to make xe_file ref counted, move destruction of xe_file
members to a helper.

v2: Move xe_vm_close_and_put back into xe_file_close (Matt)

Signed-off-by: Umesh Nerlige Ramappa <umesh.nerlige.ramappa@intel.com>
Reviewed-by: Matthew Brost <matthew.brost@intel.com>
Reviewed-by: Lucas De Marchi <lucas.demarchi@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20240718210548.3580382-2-umesh.nerlige.ramappa@intel.com
Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
drivers/gpu/drm/xe/xe_device.c

index f51d456..0a7478d 100644 (file)
@@ -93,9 +93,25 @@ static int xe_file_open(struct drm_device *dev, struct drm_file *file)
        return 0;
 }
 
+static void xe_file_destroy(struct xe_file *xef)
+{
+       struct xe_device *xe = xef->xe;
+
+       xa_destroy(&xef->exec_queue.xa);
+       mutex_destroy(&xef->exec_queue.lock);
+       xa_destroy(&xef->vm.xa);
+       mutex_destroy(&xef->vm.lock);
+
+       spin_lock(&xe->clients.lock);
+       xe->clients.count--;
+       spin_unlock(&xe->clients.lock);
+
+       xe_drm_client_put(xef->client);
+       kfree(xef);
+}
+
 static void xe_file_close(struct drm_device *dev, struct drm_file *file)
 {
-       struct xe_device *xe = to_xe_device(dev);
        struct xe_file *xef = file->driver_priv;
        struct xe_vm *vm;
        struct xe_exec_queue *q;
@@ -111,21 +127,12 @@ static void xe_file_close(struct drm_device *dev, struct drm_file *file)
                xe_exec_queue_kill(q);
                xe_exec_queue_put(q);
        }
-       xa_destroy(&xef->exec_queue.xa);
-       mutex_destroy(&xef->exec_queue.lock);
        mutex_lock(&xef->vm.lock);
        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);
 
-       spin_lock(&xe->clients.lock);
-       xe->clients.count--;
-       spin_unlock(&xe->clients.lock);
-
-       xe_drm_client_put(xef->client);
-       kfree(xef);
+       xe_file_destroy(xef);
 }
 
 static const struct drm_ioctl_desc xe_ioctls[] = {