drm/xe: Prevent return with locked vm
authorPallavi Mishra <pallavi.mishra@intel.com>
Wed, 30 Aug 2023 23:25:58 +0000 (04:55 +0530)
committerRodrigo Vivi <rodrigo.vivi@intel.com>
Thu, 21 Dec 2023 16:40:28 +0000 (11:40 -0500)
Reorder vm_id check after the one for VISIBLE_VRAM. This should
prevent returning with locked vm in error scenario.

Signed-off-by: Pallavi Mishra <pallavi.mishra@intel.com>
Cc: Matthew Auld <matthew.auld@intel.com>
Reviewed-by: Matthew Brost <matthew.brost@intel.com>
Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
drivers/gpu/drm/xe/xe_bo.c

index 80c5d1a7d41a261028b49ef0de4ae13764a67922..3cfd3f37c81e384ee79bca603c08859f535e0a13 100644 (file)
@@ -1795,17 +1795,6 @@ int xe_gem_create_ioctl(struct drm_device *dev, void *data,
        if (XE_IOCTL_DBG(xe, args->size & ~PAGE_MASK))
                return -EINVAL;
 
-       if (args->vm_id) {
-               vm = xe_vm_lookup(xef, args->vm_id);
-               if (XE_IOCTL_DBG(xe, !vm))
-                       return -ENOENT;
-               err = xe_vm_lock(vm, &ww, 0, true);
-               if (err) {
-                       xe_vm_put(vm);
-                       return err;
-               }
-       }
-
        if (args->flags & XE_GEM_CREATE_FLAG_DEFER_BACKING)
                bo_flags |= XE_BO_DEFER_BACKING;
 
@@ -1821,6 +1810,17 @@ int xe_gem_create_ioctl(struct drm_device *dev, void *data,
                bo_flags |= XE_BO_NEEDS_CPU_ACCESS;
        }
 
+       if (args->vm_id) {
+               vm = xe_vm_lookup(xef, args->vm_id);
+               if (XE_IOCTL_DBG(xe, !vm))
+                       return -ENOENT;
+               err = xe_vm_lock(vm, &ww, 0, true);
+               if (err) {
+                       xe_vm_put(vm);
+                       return err;
+               }
+       }
+
        bo = xe_bo_create(xe, NULL, vm, args->size, ttm_bo_type_device,
                          bo_flags);
        if (IS_ERR(bo)) {