Mesa (main): glx: Keep display fd open for prime
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Thu Jun 3 09:33:49 UTC 2021
Module: Mesa
Branch: main
Commit: dac2c210d6457d8497e25d71c5a9c76282094dd6
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=dac2c210d6457d8497e25d71c5a9c76282094dd6
Author: Yogesh Mohanmarimuthu <yogesh.mohanmarimuthu at amd.com>
Date: Mon May 3 23:15:07 2021 +0530
glx: Keep display fd open for prime
Keep the display fd open for creating DRI screen on display gpu in
case of prime.
v2: initialize psc->fd_display_gpu early (Michel Dänzer)
fix display gpu fd leakage (Michel Dänzer)
v3: fix more display gpu fd leakage (Michel Dänzer)
Signed-off-by: Yogesh Mohanmarimuthu <yogesh.mohanmarimuthu at amd.com>
Acked-by: Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer at amd.com>
Reviewed-by: Michel Dänzer <mdaenzer at redhat.com>
Reviewed-by: Marek Olšák <marek.olsak at amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/10595>
---
src/glx/dri3_glx.c | 10 ++++++++++
src/glx/dri3_priv.h | 3 +++
2 files changed, 13 insertions(+)
diff --git a/src/glx/dri3_glx.c b/src/glx/dri3_glx.c
index cd00ff6b88c..980bd222d16 100644
--- a/src/glx/dri3_glx.c
+++ b/src/glx/dri3_glx.c
@@ -607,6 +607,8 @@ dri3_destroy_screen(struct glx_screen *base)
struct dri3_screen *psc = (struct dri3_screen *) base;
/* Free the direct rendering per screen data */
+ if (psc->is_different_gpu)
+ close(psc->fd_display_gpu);
loader_dri3_close_screen(psc->driScreen);
(*psc->core->destroyScreen) (psc->driScreen);
driDestroyConfigs(psc->driver_configs);
@@ -842,6 +844,7 @@ dri3_create_screen(int screen, struct glx_display * priv)
return NULL;
psc->fd = -1;
+ psc->fd_display_gpu = -1;
if (!glx_screen_init(&psc->base, screen, priv)) {
free(psc);
@@ -862,7 +865,12 @@ dri3_create_screen(int screen, struct glx_display * priv)
return NULL;
}
+ psc->fd_display_gpu = fcntl(psc->fd, F_DUPFD_CLOEXEC, 3);
psc->fd = loader_get_user_preferred_fd(psc->fd, &psc->is_different_gpu);
+ if (!psc->is_different_gpu) {
+ close(psc->fd_display_gpu);
+ psc->fd_display_gpu = -1;
+ }
driverName = loader_get_driver_for_fd(psc->fd);
if (!driverName) {
@@ -1013,6 +1021,8 @@ handle_error:
psc->driScreen = NULL;
if (psc->fd >= 0)
close(psc->fd);
+ if (psc->fd_display_gpu >= 0)
+ close(psc->fd_display_gpu);
if (psc->driver)
dlclose(psc->driver);
diff --git a/src/glx/dri3_priv.h b/src/glx/dri3_priv.h
index dbd04c00bb4..4ccc832f281 100644
--- a/src/glx/dri3_priv.h
+++ b/src/glx/dri3_priv.h
@@ -103,6 +103,9 @@ struct dri3_screen {
int fd;
bool is_different_gpu;
+ /* fd for display GPU in case of prime */
+ int fd_display_gpu;
+
int show_fps_interval;
struct loader_dri3_extensions loader_dri3_ext;
More information about the mesa-commit
mailing list