summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/ttm/ttm_bo.c
diff options
context:
space:
mode:
authorThomas Hellstrom2009-08-03 12:39:06 +0200
committerDave Airlie2009-08-04 05:41:05 +0200
commitfee280d3fd9bc5247bef9f4ab35a4693bfffdcfd (patch)
tree8105956fc8da63d8e5bba0453841ea84e00e5d5b /drivers/gpu/drm/ttm/ttm_bo.c
parentdrm/radeon/kms: fix memory leak in radeon_driver_load_kms (diff)
downloadkernel-qcow2-linux-fee280d3fd9bc5247bef9f4ab35a4693bfffdcfd.tar.gz
kernel-qcow2-linux-fee280d3fd9bc5247bef9f4ab35a4693bfffdcfd.tar.xz
kernel-qcow2-linux-fee280d3fd9bc5247bef9f4ab35a4693bfffdcfd.zip
drm/ttm: Fix a sync object leak.
If there are multiple simultaneous waiters for the same buffer object, a temporary reference to its sync object may be leaked. Signed-off-by: Thomas Hellstrom <thellstrom@vmware.com> Signed-off-by: Dave Airlie <airlied@redhat.com>
Diffstat (limited to 'drivers/gpu/drm/ttm/ttm_bo.c')
-rw-r--r--drivers/gpu/drm/ttm/ttm_bo.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/drivers/gpu/drm/ttm/ttm_bo.c b/drivers/gpu/drm/ttm/ttm_bo.c
index 6538d4236989..aa82d5370c38 100644
--- a/drivers/gpu/drm/ttm/ttm_bo.c
+++ b/drivers/gpu/drm/ttm/ttm_bo.c
@@ -1575,6 +1575,10 @@ int ttm_bo_wait(struct ttm_buffer_object *bo,
driver->sync_obj_unref(&sync_obj);
driver->sync_obj_unref(&tmp_obj);
spin_lock(&bo->lock);
+ } else {
+ spin_unlock(&bo->lock);
+ driver->sync_obj_unref(&sync_obj);
+ spin_lock(&bo->lock);
}
}
return 0;