diff options
author | Frediano Ziglio <fziglio@redhat.com> | 2015-09-24 14:18:22 +0100 |
---|---|---|
committer | Dave Airlie <airlied@redhat.com> | 2015-10-07 15:33:45 +1000 |
commit | 266424b5377ed1c3033d97ed5bc4fca7d89921a1 (patch) | |
tree | 19c0707944021d1ef05edf5e727eee66769fe2c2 | |
parent | 7eb9974f3685f36f419bf9e66cfaee92849856fe (diff) | |
download | op-kernel-dev-266424b5377ed1c3033d97ed5bc4fca7d89921a1.zip op-kernel-dev-266424b5377ed1c3033d97ed5bc4fca7d89921a1.tar.gz |
drm/qxl: avoid dependency lock
qxl_bo_unref calls drm_gem_object_unreference_unlocked which
locks dev->struct_mutex. However this lock could be already
locked if the call came from qxl_gem_object_free.
As we don't need to call qxl_bo_ref/qxl_bo_unref cause
qxl_release_list_add will hold a reference by itself avoid
to call them and the possible deadlock.
Signed-off-by: Frediano Ziglio <fziglio@redhat.com>
Signed-off-by: Dave Airlie <airlied@redhat.com>
-rw-r--r-- | drivers/gpu/drm/qxl/qxl_release.c | 4 |
1 files changed, 1 insertions, 3 deletions
diff --git a/drivers/gpu/drm/qxl/qxl_release.c b/drivers/gpu/drm/qxl/qxl_release.c index b66ec33..4efa8e2 100644 --- a/drivers/gpu/drm/qxl/qxl_release.c +++ b/drivers/gpu/drm/qxl/qxl_release.c @@ -307,7 +307,7 @@ int qxl_alloc_surface_release_reserved(struct qxl_device *qdev, idr_ret = qxl_release_alloc(qdev, QXL_RELEASE_SURFACE_CMD, release); if (idr_ret < 0) return idr_ret; - bo = qxl_bo_ref(to_qxl_bo(entry->tv.bo)); + bo = to_qxl_bo(entry->tv.bo); (*release)->release_offset = create_rel->release_offset + 64; @@ -316,8 +316,6 @@ int qxl_alloc_surface_release_reserved(struct qxl_device *qdev, info = qxl_release_map(qdev, *release); info->id = idr_ret; qxl_release_unmap(qdev, *release, info); - - qxl_bo_unref(&bo); return 0; } |