From 45bd17610ce10c1b99a966f56a517789cd36ae29 Mon Sep 17 00:00:00 2001 From: James Jones Date: Fri, 13 Dec 2019 16:32:57 -0800 Subject: [PATCH] gbm: Give gbm_device a reference to its backend MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This will be used for looking up the backend again at destruction time to perform any backend- agnostic cleanup. To facilitate that, also dispatch device destruction to the backend manager code. Signed-off-by: James Jones Reviewed-by: Michel Dänzer Reviewed-by: Emil Velikov Part-of: --- src/gbm/main/backend.c | 17 ++++++++++++++--- src/gbm/main/backend.h | 3 +++ src/gbm/main/gbm.c | 2 +- src/gbm/main/gbmint.h | 4 ++++ 4 files changed, 22 insertions(+), 4 deletions(-) diff --git a/src/gbm/main/backend.c b/src/gbm/main/backend.c index ddcec0a3133..f22600b9d8b 100644 --- a/src/gbm/main/backend.c +++ b/src/gbm/main/backend.c @@ -37,12 +37,12 @@ extern const struct gbm_backend gbm_dri_backend; -struct backend_desc { +struct gbm_backend_desc { const char *name; const struct gbm_backend *backend; }; -static const struct backend_desc backends[] = { +static const struct gbm_backend_desc backends[] = { { "gbm_dri.so", &gbm_dri_backend }, }; @@ -52,11 +52,16 @@ find_backend(const char *name, int fd) struct gbm_device *dev = NULL; unsigned i; - for (i = 0; i < ARRAY_SIZE(backends) && dev == NULL; ++i) { + for (i = 0; i < ARRAY_SIZE(backends); ++i) { if (name && strcmp(backends[i].name, name)) continue; dev = backends[i].backend->create_device(fd); + + if (dev) { + dev->backend_desc = &backends[i]; + break; + } } return dev; @@ -87,3 +92,9 @@ _gbm_create_device(int fd) return dev; } + +void +_gbm_device_destroy(struct gbm_device *gbm) +{ + gbm->destroy(gbm); +} diff --git a/src/gbm/main/backend.h b/src/gbm/main/backend.h index 4a643750333..325c4123f90 100644 --- a/src/gbm/main/backend.h +++ b/src/gbm/main/backend.h @@ -33,4 +33,7 @@ struct gbm_device * _gbm_create_device(int fd); +void +_gbm_device_destroy(struct gbm_device *gbm); + #endif diff --git a/src/gbm/main/gbm.c b/src/gbm/main/gbm.c index ce74738b1c9..d53620a8943 100644 --- a/src/gbm/main/gbm.c +++ b/src/gbm/main/gbm.c @@ -106,7 +106,7 @@ gbm_device_get_format_modifier_plane_count(struct gbm_device *gbm, GBM_EXPORT void gbm_device_destroy(struct gbm_device *gbm) { - gbm->destroy(gbm); + _gbm_device_destroy(gbm); } /** Create a gbm device for allocating buffers diff --git a/src/gbm/main/gbmint.h b/src/gbm/main/gbmint.h index 7514e03ffd7..82c989960e5 100644 --- a/src/gbm/main/gbmint.h +++ b/src/gbm/main/gbmint.h @@ -42,6 +42,8 @@ * \brief Internal implementation details of gbm */ +struct gbm_backend_desc; + /** * The device used for the memory allocation. * @@ -51,6 +53,8 @@ struct gbm_device { /* Hack to make a gbm_device detectable by its first element. */ struct gbm_device *(*dummy)(int); + const struct gbm_backend_desc *backend_desc; + int fd; const char *name;