[Freedreno] [PATCH libdrm 2/2] freedreno: serialize drmPrimeFDToHandle under table_lock

Varad Gautam varadgautam at gmail.com
Sun Aug 30 03:00:58 PDT 2015


fixes the prime sharing race condition described by
"intel: Serialize drmPrimeFDToHandle with struct_mutex".

we inline fd_bo_from_handle() into fd_bo_from_dmabuf() and allow locking.

Signed-off-by: Varad Gautam <varadgautam at gmail.com>
---
 freedreno/freedreno_bo.c | 10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)

diff --git a/freedreno/freedreno_bo.c b/freedreno/freedreno_bo.c
index 4518745..80ecd3a 100644
--- a/freedreno/freedreno_bo.c
+++ b/freedreno/freedreno_bo.c
@@ -230,18 +230,26 @@ fd_bo_from_dmabuf(struct fd_device *dev, int fd)
 	uint32_t handle;
 	struct fd_bo *bo;
 
+	pthread_mutex_lock(&table_lock);
 	ret = drmPrimeFDToHandle(dev->fd, fd, &handle);
 	if (ret) {
 		return NULL;
 	}
 
+	bo = lookup_bo(dev->handle_table, handle);
+	if (bo)
+		goto out_unlock;
+
 	/* lseek() to get bo size */
 	size = lseek(fd, 0, SEEK_END);
 	lseek(fd, 0, SEEK_CUR);
 
-	bo = fd_bo_from_handle(dev, handle, size);
+	bo = bo_from_handle(dev, size, handle);
 	bo->fd = fd;
 
+out_unlock:
+	pthread_mutex_unlock(&table_lock);
+
 	return bo;
 }
 
-- 
2.4.6



More information about the Freedreno mailing list