Mesa (main): freedreno/drm, turnip: set DRM_RDWR for exported dma-bufs

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Tue Jan 25 06:00:05 UTC 2022


Module: Mesa
Branch: main
Commit: ef325d46503d66aa1bc3f860fa3b0b0486ee45a5
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=ef325d46503d66aa1bc3f860fa3b0b0486ee45a5

Author: Chia-I Wu <olvaffe at gmail.com>
Date:   Mon Jan 24 17:30:23 2022 -0800

freedreno/drm, turnip: set DRM_RDWR for exported dma-bufs

This allows the exported fds to be mapped for writing.  My use case is
for virtio-gpu blob resources where the fds are mapped rw and mappings
are added to the guests using KVM_SET_USER_MEMORY_REGION.

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/14699>

---

 src/freedreno/drm/freedreno_bo.c | 3 ++-
 src/freedreno/vulkan/tu_drm.c    | 2 +-
 2 files changed, 3 insertions(+), 2 deletions(-)

diff --git a/src/freedreno/drm/freedreno_bo.c b/src/freedreno/drm/freedreno_bo.c
index 15491b965dd..2e518f9f4d0 100644
--- a/src/freedreno/drm/freedreno_bo.c
+++ b/src/freedreno/drm/freedreno_bo.c
@@ -416,7 +416,8 @@ fd_bo_dmabuf(struct fd_bo *bo)
 {
    int ret, prime_fd;
 
-   ret = drmPrimeHandleToFD(bo->dev->fd, bo->handle, DRM_CLOEXEC, &prime_fd);
+   ret = drmPrimeHandleToFD(bo->dev->fd, bo->handle, DRM_CLOEXEC | DRM_RDWR,
+                            &prime_fd);
    if (ret) {
       ERROR_MSG("failed to get dmabuf fd: %d", ret);
       return ret;
diff --git a/src/freedreno/vulkan/tu_drm.c b/src/freedreno/vulkan/tu_drm.c
index 7a3f4106d6c..c33c9f6fb4b 100644
--- a/src/freedreno/vulkan/tu_drm.c
+++ b/src/freedreno/vulkan/tu_drm.c
@@ -288,7 +288,7 @@ tu_bo_export_dmabuf(struct tu_device *dev, struct tu_bo *bo)
 {
    int prime_fd;
    int ret = drmPrimeHandleToFD(dev->fd, bo->gem_handle,
-                                DRM_CLOEXEC, &prime_fd);
+                                DRM_CLOEXEC | DRM_RDWR, &prime_fd);
 
    return ret == 0 ? prime_fd : -1;
 }



More information about the mesa-commit mailing list