summaryrefslogtreecommitdiff
path: root/drivers/gpu/drm/xe/xe_engine.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/drm/xe/xe_engine.c')
-rw-r--r--drivers/gpu/drm/xe/xe_engine.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/drivers/gpu/drm/xe/xe_engine.c b/drivers/gpu/drm/xe/xe_engine.c
index f1b8b22e0216..af75c9a0ea7b 100644
--- a/drivers/gpu/drm/xe/xe_engine.c
+++ b/drivers/gpu/drm/xe/xe_engine.c
@@ -597,10 +597,23 @@ int xe_engine_create_ioctl(struct drm_device *dev, void *data,
if (XE_IOCTL_ERR(xe, !vm))
return -ENOENT;
+ err = down_read_interruptible(&vm->lock);
+ if (err) {
+ xe_vm_put(vm);
+ return err;
+ }
+
+ if (XE_IOCTL_ERR(xe, xe_vm_is_closed_or_banned(vm))) {
+ up_read(&vm->lock);
+ xe_vm_put(vm);
+ return -ENOENT;
+ }
+
e = xe_engine_create(xe, vm, logical_mask,
args->width, hwe,
xe_vm_no_dma_fences(vm) ? 0 :
ENGINE_FLAG_PERSISTENT);
+ up_read(&vm->lock);
xe_vm_put(vm);
if (IS_ERR(e))
return PTR_ERR(e);