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

Author: Jordan Justen <[email protected]>
Date:   Thu Aug 11 01:47:09 2022 -0700

iris: Drop extra file-descriptor dup in iris_drm_screen_create()

In a99e85db9eb, we added a dup into iris_screen_create(). Apparently
some android code paths must be hitting iris_screen_create() without
calling iris_drm_screen_create(). After a99e85db9eb, the code paths
that do hit iris_drm_screen_create() will now dup the fd twice, but
iris_screen_destroy() will only close 1 of these fds.

Fixes: a99e85db9eb ("iris:Duplicate DRM fd internally instead of reuse.")
Signed-off-by: Jordan Justen <[email protected]>
Reviewed-by: Kenneth Graunke <[email protected]>
Tested-by: Tapani Pälli <[email protected]>
Reviewed-by: José Roberto de Souza <[email protected]>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/18020>
(cherry picked from commit e9f40e42de6b47e036d603296ecb5facb384eb0c)

---

 .pick_status.json                             | 2 +-
 src/gallium/winsys/iris/drm/iris_drm_winsys.c | 5 +----
 2 files changed, 2 insertions(+), 5 deletions(-)

diff --git a/.pick_status.json b/.pick_status.json
index 7798661be79..eeeba20eca4 100644
--- a/.pick_status.json
+++ b/.pick_status.json
@@ -11443,7 +11443,7 @@
         "description": "iris: Drop extra file-descriptor dup in 
iris_drm_screen_create()",
         "nominated": true,
         "nomination_type": 1,
-        "resolution": 0,
+        "resolution": 1,
         "main_sha": null,
         "because_sha": "a99e85db9ebd83c41d3606568db8e8d81ca0205c"
     },
diff --git a/src/gallium/winsys/iris/drm/iris_drm_winsys.c 
b/src/gallium/winsys/iris/drm/iris_drm_winsys.c
index a7a70283ef9..15095e2d3fa 100644
--- a/src/gallium/winsys/iris/drm/iris_drm_winsys.c
+++ b/src/gallium/winsys/iris/drm/iris_drm_winsys.c
@@ -32,8 +32,5 @@ extern struct pipe_screen *iris_screen_create(int fd, const 
struct pipe_screen_c
 struct pipe_screen *
 iris_drm_screen_create(int fd, const struct pipe_screen_config *config)
 {
-   int newfd = os_dupfd_cloexec(fd);
-   if (newfd < 0)
-      return NULL;
-   return iris_screen_create(newfd, config);
+   return iris_screen_create(fd, config);
 }

Reply via email to