summaryrefslogtreecommitdiff
path: root/drivers/gpu/drm/xe/xe_vm_madvise.c
diff options
context:
space:
mode:
authorBrian Welty <brian.welty@intel.com>2023-07-12 18:25:42 -0700
committerRodrigo Vivi <rodrigo.vivi@intel.com>2023-12-21 11:37:13 -0500
commit04194a4f780895799cf83c86d5bb8bc11560a536 (patch)
tree34559491d19d8ea4f10747f90d76d8baa9b4feb8 /drivers/gpu/drm/xe/xe_vm_madvise.c
parentb1f8f4b5eec62173955c04d98723a75f2cfd8f42 (diff)
drm/xe: Fix lockdep warning from xe_vm_madvise
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>
Diffstat (limited to 'drivers/gpu/drm/xe/xe_vm_madvise.c')
-rw-r--r--drivers/gpu/drm/xe/xe_vm_madvise.c10
1 files changed, 5 insertions, 5 deletions
diff --git a/drivers/gpu/drm/xe/xe_vm_madvise.c b/drivers/gpu/drm/xe/xe_vm_madvise.c
index 32f92743d851..5b775f742233 100644
--- a/drivers/gpu/drm/xe/xe_vm_madvise.c
+++ b/drivers/gpu/drm/xe/xe_vm_madvise.c
@@ -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;