aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/msm
diff options
context:
space:
mode:
authorRob Clark <robdclark@gmail.com>2016-05-17 15:43:35 -0400
committerRob Clark <robdclark@gmail.com>2016-07-16 10:09:04 -0400
commitb5b4c264df4d270819676b290cef9a11d04c35f0 (patch)
tree1a5f538c17b7b0029d8bf072c9f87fa7ffbf1a2e /drivers/gpu/drm/msm
parentb137bb4bec515c243eb42127ccf5ba2765fbed7c (diff)
drm/msm: use mutex_lock_interruptible for submit ioctl
Be kinder to things that do lots of signal handling (ie. Xorg) Signed-off-by: Rob Clark <robdclark@gmail.com>
Diffstat (limited to 'drivers/gpu/drm/msm')
-rw-r--r--drivers/gpu/drm/msm/msm_gem_submit.c13
1 files changed, 9 insertions, 4 deletions
diff --git a/drivers/gpu/drm/msm/msm_gem_submit.c b/drivers/gpu/drm/msm/msm_gem_submit.c
index eb4bb8b2f3a5..ea5f709e2e27 100644
--- a/drivers/gpu/drm/msm/msm_gem_submit.c
+++ b/drivers/gpu/drm/msm/msm_gem_submit.c
@@ -372,11 +372,15 @@ int msm_ioctl_gem_submit(struct drm_device *dev, void *data,
372 if (args->nr_cmds > MAX_CMDS) 372 if (args->nr_cmds > MAX_CMDS)
373 return -EINVAL; 373 return -EINVAL;
374 374
375 submit = submit_create(dev, gpu, args->nr_bos); 375 ret = mutex_lock_interruptible(&dev->struct_mutex);
376 if (!submit) 376 if (ret)
377 return -ENOMEM; 377 return ret;
378 378
379 mutex_lock(&dev->struct_mutex); 379 submit = submit_create(dev, gpu, args->nr_bos);
380 if (!submit) {
381 ret = -ENOMEM;
382 goto out_unlock;
383 }
380 384
381 ret = submit_lookup_objects(submit, args, file); 385 ret = submit_lookup_objects(submit, args, file);
382 if (ret) 386 if (ret)
@@ -462,6 +466,7 @@ out:
462 submit_cleanup(submit); 466 submit_cleanup(submit);
463 if (ret) 467 if (ret)
464 msm_gem_submit_free(submit); 468 msm_gem_submit_free(submit);
469out_unlock:
465 mutex_unlock(&dev->struct_mutex); 470 mutex_unlock(&dev->struct_mutex);
466 return ret; 471 return ret;
467} 472}