summaryrefslogtreecommitdiff
path: root/drivers/gpu/drm/msm/msm_gem.c
diff options
context:
space:
mode:
authorRob Clark <robdclark@chromium.org>2020-10-23 09:51:10 -0700
committerRob Clark <robdclark@chromium.org>2020-11-04 16:00:56 -0800
commit6c0e3ea25047694f97d01fb88c23ed5c4ed44da3 (patch)
tree64dc00d616e4ccd0ae54b5cafedabb43c3710337 /drivers/gpu/drm/msm/msm_gem.c
parent9184b6831bbe8ffd8843eff66721981bc2cc6eff (diff)
drm/msm/gem: Switch over to obj->resv for locking
This also converts the special msm_gem_get_vaddr_active() to expect the lock to already be held. There are two call-sites for this, one already has the lock held, so it is more straightforward to just open-code the locking for the other caller. Signed-off-by: Rob Clark <robdclark@chromium.org> Reviewed-by: Kristian H. Kristensen <hoegsberg@google.com> Signed-off-by: Rob Clark <robdclark@chromium.org>
Diffstat (limited to 'drivers/gpu/drm/msm/msm_gem.c')
-rw-r--r--drivers/gpu/drm/msm/msm_gem.c17
1 files changed, 7 insertions, 10 deletions
diff --git a/drivers/gpu/drm/msm/msm_gem.c b/drivers/gpu/drm/msm/msm_gem.c
index 59d7c1a7d502..6935c4437ef9 100644
--- a/drivers/gpu/drm/msm/msm_gem.c
+++ b/drivers/gpu/drm/msm/msm_gem.c
@@ -643,13 +643,7 @@ void *msm_gem_get_vaddr(struct drm_gem_object *obj)
*/
void *msm_gem_get_vaddr_active(struct drm_gem_object *obj)
{
- void *ret;
-
- msm_gem_lock(obj);
- ret = get_vaddr(obj, __MSM_MADV_PURGED);
- msm_gem_unlock(obj);
-
- return ret;
+ return get_vaddr(obj, __MSM_MADV_PURGED);
}
void msm_gem_put_vaddr_locked(struct drm_gem_object *obj)
@@ -969,15 +963,20 @@ static void free_object(struct msm_gem_object *msm_obj)
if (msm_obj->pages)
kvfree(msm_obj->pages);
+ /* dma_buf_detach() grabs resv lock, so we need to unlock
+ * prior to drm_prime_gem_destroy
+ */
+ msm_gem_unlock(obj);
+
drm_prime_gem_destroy(obj, msm_obj->sgt);
} else {
msm_gem_vunmap(obj);
put_pages(obj);
+ msm_gem_unlock(obj);
}
drm_gem_object_release(obj);
- msm_gem_unlock(obj);
kfree(msm_obj);
}
@@ -1049,8 +1048,6 @@ static int msm_gem_new_impl(struct drm_device *dev,
if (!msm_obj)
return -ENOMEM;
- mutex_init(&msm_obj->lock);
-
msm_obj->flags = flags;
msm_obj->madv = MSM_MADV_WILLNEED;