Mesa (main): gbm: Give gbm_device a reference to its backend

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Tue Jul 6 17:27:20 UTC 2021


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

Author: James Jones <jajones at nvidia.com>
Date:   Fri Dec 13 16:32:57 2019 -0800

gbm: Give gbm_device a reference to its backend

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 <jajones at nvidia.com>
Reviewed-by: Michel Dänzer <mdaenzer at redhat.com>
Reviewed-by: Emil Velikov <emil.l.velikov at gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/9902>

---

 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;
 



More information about the mesa-commit mailing list