Module: Mesa
Branch: staging/21.0
Commit: c96669c5bfec8c568dd082b2d53d8b99c7610a83
URL:    
http://cgit.freedesktop.org/mesa/mesa/commit/?id=c96669c5bfec8c568dd082b2d53d8b99c7610a83

Author: Maksim Sisov <[email protected]>
Date:   Tue May 18 08:23:56 2021 +0300

iris: export GEM handle with RDWR access rights

There is a regression that made it impossible to export gem
handles with write access.

That is, a client may export gem handles of each buffer plane, then
export dmabuf fds using these handles, and mmap these dmabuf in
a different process (this is what Chromium does).

After https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4861,
it became impossible as mmap resulted in EACCESS error as slightly
different approach was taken for exporting these gem handles.

This CL fixes exporting gem handles (which are exported from dmabuf
fds) by adding the DRM_RDWR flag.

Cc: mesa-stable

Fixes #3119

Reviewed-by: Lionel Landwerlin <[email protected]>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/10851>
(cherry picked from commit b74898ef699486d0513fcd3af2587a831df99dff)

---

 .pick_status.json                      | 2 +-
 src/gallium/drivers/iris/iris_bufmgr.c | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/.pick_status.json b/.pick_status.json
index 428fbab9c5d..d8816c20d08 100644
--- a/.pick_status.json
+++ b/.pick_status.json
@@ -1228,7 +1228,7 @@
         "description": "iris: export GEM handle with RDWR access rights",
         "nominated": true,
         "nomination_type": 0,
-        "resolution": 0,
+        "resolution": 1,
         "master_sha": null,
         "because_sha": null
     },
diff --git a/src/gallium/drivers/iris/iris_bufmgr.c 
b/src/gallium/drivers/iris/iris_bufmgr.c
index a29cef0dd4d..2c126e06f4c 100644
--- a/src/gallium/drivers/iris/iris_bufmgr.c
+++ b/src/gallium/drivers/iris/iris_bufmgr.c
@@ -1505,7 +1505,7 @@ iris_bo_export_dmabuf(struct iris_bo *bo, int *prime_fd)
    iris_bo_make_external(bo);
 
    if (drmPrimeHandleToFD(bufmgr->fd, bo->gem_handle,
-                          DRM_CLOEXEC, prime_fd) != 0)
+                          DRM_CLOEXEC | DRM_RDWR, prime_fd) != 0)
       return -errno;
 
    return 0;

_______________________________________________
mesa-commit mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/mesa-commit

Reply via email to