summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Andersson <g02maran@gmail.com>2013-03-01 22:34:28 +0100
committerAlex Deucher <alexander.deucher@amd.com>2013-03-01 17:53:59 -0500
commitcd77c77bb958e53ea873a887a40179da1c2ce3fd (patch)
treeaa724c456d38b9e88f6d639d19d9e7e05452dd54
parentb199a6414d02e271847cb556cc5f789b4b057105 (diff)
winsys/radeon: Only add bo to hash table when creating flink
The problem is that we mix bo handles and flinked names in the hash table. Because kms type handles are not flinked they should not be added to the hash table. If we do that we will sooner or later get a situation where we will overwrite a correct entry because the bo handle was the same as a flinked name. Note: this is a candidate for the stable branches. Reviewed-by: Jerome Glisse <jglisse@redhat.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com> (cherry picked from commit d96d8ed910dcecf4511fbc8c24de292cf04ee1d4)
-rw-r--r--src/gallium/winsys/radeon/drm/radeon_drm_bo.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/src/gallium/winsys/radeon/drm/radeon_drm_bo.c b/src/gallium/winsys/radeon/drm/radeon_drm_bo.c
index 2d41c267ff7..f4ac526ed88 100644
--- a/src/gallium/winsys/radeon/drm/radeon_drm_bo.c
+++ b/src/gallium/winsys/radeon/drm/radeon_drm_bo.c
@@ -957,16 +957,16 @@ static boolean radeon_winsys_bo_get_handle(struct pb_buffer *buffer,
bo->flinked = TRUE;
bo->flink = flink.name;
+
+ pipe_mutex_lock(bo->mgr->bo_handles_mutex);
+ util_hash_table_set(bo->mgr->bo_handles, (void*)(uintptr_t)bo->flink, bo);
+ pipe_mutex_unlock(bo->mgr->bo_handles_mutex);
}
whandle->handle = bo->flink;
} else if (whandle->type == DRM_API_HANDLE_TYPE_KMS) {
whandle->handle = bo->handle;
}
- pipe_mutex_lock(bo->mgr->bo_handles_mutex);
- util_hash_table_set(bo->mgr->bo_handles, (void*)(uintptr_t)whandle->handle, bo);
- pipe_mutex_unlock(bo->mgr->bo_handles_mutex);
-
whandle->stride = stride;
return TRUE;
}