diff options
author | Rob Clark <robdclark@gmail.com> | 2016-05-17 19:43:35 (GMT) |
---|---|---|
committer | Rob Clark <robdclark@gmail.com> | 2016-07-16 14:09:04 (GMT) |
commit | b5b4c264df4d270819676b290cef9a11d04c35f0 (patch) | |
tree | 1a5f538c17b7b0029d8bf072c9f87fa7ffbf1a2e | |
parent | b137bb4bec515c243eb42127ccf5ba2765fbed7c (diff) | |
download | linux-b5b4c264df4d270819676b290cef9a11d04c35f0.tar.xz |
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>
-rw-r--r-- | drivers/gpu/drm/msm/msm_gem_submit.c | 13 |
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 eb4bb8b..ea5f709 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, if (args->nr_cmds > MAX_CMDS) return -EINVAL; - submit = submit_create(dev, gpu, args->nr_bos); - if (!submit) - return -ENOMEM; + ret = mutex_lock_interruptible(&dev->struct_mutex); + if (ret) + return ret; - mutex_lock(&dev->struct_mutex); + submit = submit_create(dev, gpu, args->nr_bos); + if (!submit) { + ret = -ENOMEM; + goto out_unlock; + } ret = submit_lookup_objects(submit, args, file); if (ret) @@ -462,6 +466,7 @@ out: submit_cleanup(submit); if (ret) msm_gem_submit_free(submit); +out_unlock: mutex_unlock(&dev->struct_mutex); return ret; } |