drm/xe: Fix lockdep warning from xe_vm_madvise
authorBrian Welty <brian.welty@intel.com>
Thu, 13 Jul 2023 01:25:42 +0000 (18:25 -0700)
committerRodrigo Vivi <rodrigo.vivi@intel.com>
Thu, 21 Dec 2023 16:37:13 +0000 (11:37 -0500)
We need to hold vm->lock before the xe_vm_is_closed_or_banned().

Else we get this splat:
[  802.555227] ------------[ cut here ]------------
[  802.555234] WARNING: CPU: 33 PID: 3122 at drivers/gpu/drm/xe/xe_vm.h:60
[  802.555515] CPU: 33 PID: 3122 Comm: xe_exec_fault_m Tainted:
...
[  802.555709] Call Trace:
[  802.555714]  <TASK>
[  802.555720]  ? __warn+0x81/0x170
[  802.555737]  ? xe_vm_madvise_ioctl+0x2de/0x440 [xe]

Fixes: 9d858b69b0cf ("drm/xe: Ban a VM if rebind worker hits an error")
Reviewed-by: Matthew Brost <matthew.brost@intel.com>
Signed-off-by: Brian Welty <brian.welty@intel.com>
Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
drivers/gpu/drm/xe/xe_vm_madvise.c

index 32f92743d851a9395edb8ebe721d8dc27a7adca7..5b775f742233733163b98b3c8a6743d168992cf4 100644 (file)
@@ -267,11 +267,6 @@ int xe_vm_madvise_ioctl(struct drm_device *dev, void *data,
        if (XE_IOCTL_ERR(xe, !vm))
                return -EINVAL;
 
-       if (XE_IOCTL_ERR(xe, xe_vm_is_closed_or_banned(vm))) {
-               err = -ENOENT;
-               goto put_vm;
-       }
-
        if (XE_IOCTL_ERR(xe, !xe_vm_in_fault_mode(vm))) {
                err = -EINVAL;
                goto put_vm;
@@ -279,6 +274,11 @@ int xe_vm_madvise_ioctl(struct drm_device *dev, void *data,
 
        down_read(&vm->lock);
 
+       if (XE_IOCTL_ERR(xe, xe_vm_is_closed_or_banned(vm))) {
+               err = -ENOENT;
+               goto unlock_vm;
+       }
+
        vmas = get_vmas(vm, &num_vmas, args->addr, args->range);
        if (XE_IOCTL_ERR(xe, err))
                goto unlock_vm;