diff options
author | Daniel Vetter <daniel.vetter@ffwll.ch> | 2013-08-14 18:02:42 -0400 |
---|---|---|
committer | Dave Airlie <airlied@redhat.com> | 2013-08-20 22:53:46 -0400 |
commit | bdf655de47b0d17ee2efc3bea5f617445ff77adc (patch) | |
tree | 90a2ad1bff0cb718967a151ef735d1d15565210a | |
parent | 4332bf438bbbc31319abed61d2ac6d9932ff980c (diff) |
drm/prime: shrink critical section protected by prime lock
When exporting a gem object as a dma-buf the critical section for the
per-fd prime lock is just the adding (and in case of errors, removing)
of the handle to the per-fd lookup cache.
So restrict the critical section to just that part of the function.
This simplifies later reordering.
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Signed-off-by: Dave Airlie <airlied@redhat.com>
-rw-r--r-- | drivers/gpu/drm/drm_prime.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/drivers/gpu/drm/drm_prime.c b/drivers/gpu/drm/drm_prime.c index c2d6d54e10e0..cb0451679e81 100644 --- a/drivers/gpu/drm/drm_prime.c +++ b/drivers/gpu/drm/drm_prime.c | |||
@@ -310,7 +310,6 @@ int drm_gem_prime_handle_to_fd(struct drm_device *dev, | |||
310 | if (!obj) | 310 | if (!obj) |
311 | return -ENOENT; | 311 | return -ENOENT; |
312 | 312 | ||
313 | mutex_lock(&file_priv->prime.lock); | ||
314 | /* re-export the original imported object */ | 313 | /* re-export the original imported object */ |
315 | if (obj->import_attach) { | 314 | if (obj->import_attach) { |
316 | dmabuf = obj->import_attach->dmabuf; | 315 | dmabuf = obj->import_attach->dmabuf; |
@@ -332,6 +331,7 @@ int drm_gem_prime_handle_to_fd(struct drm_device *dev, | |||
332 | } | 331 | } |
333 | obj->export_dma_buf = dmabuf; | 332 | obj->export_dma_buf = dmabuf; |
334 | 333 | ||
334 | mutex_lock(&file_priv->prime.lock); | ||
335 | /* if we've exported this buffer the cheat and add it to the import list | 335 | /* if we've exported this buffer the cheat and add it to the import list |
336 | * so we get the correct handle back | 336 | * so we get the correct handle back |
337 | */ | 337 | */ |
@@ -363,13 +363,13 @@ out_have_obj: | |||
363 | fail_rm_handle: | 363 | fail_rm_handle: |
364 | drm_prime_remove_buf_handle_locked(&file_priv->prime, | 364 | drm_prime_remove_buf_handle_locked(&file_priv->prime, |
365 | dmabuf); | 365 | dmabuf); |
366 | mutex_unlock(&file_priv->prime.lock); | ||
366 | fail_put_dmabuf: | 367 | fail_put_dmabuf: |
367 | /* clear NOT to be checked when releasing dma_buf */ | 368 | /* clear NOT to be checked when releasing dma_buf */ |
368 | obj->export_dma_buf = NULL; | 369 | obj->export_dma_buf = NULL; |
369 | dma_buf_put(dmabuf); | 370 | dma_buf_put(dmabuf); |
370 | out: | 371 | out: |
371 | drm_gem_object_unreference_unlocked(obj); | 372 | drm_gem_object_unreference_unlocked(obj); |
372 | mutex_unlock(&file_priv->prime.lock); | ||
373 | return ret; | 373 | return ret; |
374 | } | 374 | } |
375 | EXPORT_SYMBOL(drm_gem_prime_handle_to_fd); | 375 | EXPORT_SYMBOL(drm_gem_prime_handle_to_fd); |