Mesa (main): loader: add function to get render node from dev_t

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Fri Nov 26 20:00:50 UTC 2021


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

Author: Leandro Ribeiro <leandro.ribeiro at collabora.com>
Date:   Mon Nov 15 13:50:50 2021 -0300

loader: add function to get render node from dev_t

Add function loader_get_render_node() to help us to get a render node
from dev_t. If the device does not expose a render node, this new
function returns NULL.

As this function uses drmGetDeviceFromDevId(), we bump libdrm minimal
version to 2.4.109.

Signed-off-by: Leandro Ribeiro <leandro.ribeiro at collabora.com>
Reviewed-by: Daniel Stone <daniels at collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/11248>

---

 meson.build         | 13 +------------
 src/loader/loader.c | 26 ++++++++++++++++++++++++++
 src/loader/loader.h |  4 ++++
 3 files changed, 31 insertions(+), 12 deletions(-)

diff --git a/meson.build b/meson.build
index 9b4e5e28864..d249418ea60 100644
--- a/meson.build
+++ b/meson.build
@@ -1584,7 +1584,7 @@ _drm_amdgpu_ver = '2.4.107'
 _drm_radeon_ver = '2.4.71'
 _drm_nouveau_ver = '2.4.102'
 _drm_intel_ver = '2.4.75'
-_drm_ver = '2.4.81'
+_drm_ver = '2.4.109'
 
 _libdrm_checks = [
   ['intel', with_dri_i915 or with_gallium_i915],
@@ -1594,17 +1594,6 @@ _libdrm_checks = [
   ['nouveau', (with_gallium_nouveau or with_dri_nouveau)],
 ]
 
-# VC4 only needs core libdrm support of this version, not a libdrm_vc4
-# library.
-if with_gallium_vc4
-  _drm_ver = '2.4.89'
-endif
-
-# etnaviv only needs core libdrm
-if with_gallium_etnaviv
-  _drm_ver = '2.4.89'
-endif
-
 # Loop over the enables versions and get the highest libdrm requirement for all
 # active drivers.
 _drm_blame = ''
diff --git a/src/loader/loader.c b/src/loader/loader.c
index 945c99fb4bf..c9a499c6fc2 100644
--- a/src/loader/loader.c
+++ b/src/loader/loader.c
@@ -178,6 +178,26 @@ loader_open_render_node(const char *name)
    return fd;
 }
 
+char *
+loader_get_render_node(dev_t device)
+{
+   char *render_node = NULL;
+   drmDevicePtr dev_ptr;
+
+   if (drmGetDeviceFromDevId(device, 0, &dev_ptr) < 0)
+      return NULL;
+
+   if (dev_ptr->available_nodes & (1 << DRM_NODE_RENDER)) {
+      render_node = strdup(dev_ptr->nodes[DRM_NODE_RENDER]);
+      if (!render_node)
+         log_(_LOADER_DEBUG, "MESA-LOADER: failed to allocate memory for render node\n");
+   }
+
+   drmFreeDevice(&dev_ptr);
+
+   return render_node;
+}
+
 #ifdef USE_DRICONF
 static const driOptionDescription __driConfigOptionsLoader[] = {
     DRI_CONF_SECTION_INITIALIZATION
@@ -376,6 +396,12 @@ loader_open_render_node(const char *name)
    return -1;
 }
 
+char *
+loader_get_render_node(dev_t device)
+{
+   return NULL;
+}
+
 int loader_get_user_preferred_fd(int default_fd, bool *different_device)
 {
    *different_device = false;
diff --git a/src/loader/loader.h b/src/loader/loader.h
index 8ce001cb7e6..0305e27dffa 100644
--- a/src/loader/loader.h
+++ b/src/loader/loader.h
@@ -28,6 +28,7 @@
 #define LOADER_H
 
 #include <stdbool.h>
+#include <sys/stat.h>
 
 #ifdef __cplusplus
 extern "C" {
@@ -43,6 +44,9 @@ loader_open_device(const char *);
 int
 loader_open_render_node(const char *name);
 
+char *
+loader_get_render_node(dev_t device);
+
 bool
 loader_get_pci_id_for_fd(int fd, int *vendor_id, int *chip_id);
 



More information about the mesa-commit mailing list