Files
RedBear-OS/local/patches/libdrm/P3-drm-get-version-driver-name.patch
T
vasilito 2b11b20a2f libdrm: fix drmGetDeviceFromDevId for Redox (P4)
Add #ifdef __redox__ path to drmGetDeviceFromDevId() that mirrors the
working drmGetDevice2() Redox implementation. On Redox there is no
/dev/dri/ directory — DRM devices are accessed via /scheme/drm/card0.
The patch constructs a drmDevice with both PRIMARY and RENDER nodes
pointing to /scheme/drm/card0, since the redox-drm scheme serves both
roles through a single endpoint.

Also fixes drmParseSubsystemType() to return DRM_BUS_PCI on Redox.

Fix P3 patch paths (strip local/recipes/libs/libdrm/source/ prefix
from diff headers so patches apply correctly during repo fetch).
2026-05-28 16:35:16 +03:00

35 lines
1.1 KiB
Diff

diff --git a/xf86drm.c b/xf86drm.c
index 1b206ccd4..c3904caa3 100644
--- a/xf86drm.c
+++ b/xf86drm.c
@@ -1774,0 +1775,23 @@ drm_public drmVersionPtr drmGetVersion(int fd)
+
+ /* The scheme returns a NUL-terminated driver name in version.name.
+ * KWin drm_gpu.cpp dereferences version->name unconditionally
+ * (strstr checks for "i915", "amdgpu", "virtio" etc.) so it must
+ * never be NULL.
+ */
+ version.name[sizeof(version.name) - 1] = '\0';
+ if (version.name[0] != '\0') {
+ size_t len = strlen(version.name);
+ retval->name = drmMalloc(len + 1);
+ if (retval->name) {
+ memcpy(retval->name, version.name, len + 1);
+ retval->name_len = len;
+ }
+ } else {
+ const char fallback[] = "redox-drm";
+ retval->name = drmMalloc(sizeof(fallback));
+ if (retval->name) {
+ memcpy(retval->name, fallback, sizeof(fallback));
+ retval->name_len = sizeof(fallback) - 1;
+ }
+ }
+
diff --git a/xf86drm_redox.h b/xf86drm_redox.h
index c1abe8256..7f9d252fa 100644
--- a/xf86drm_redox.h
+++ b/xf86drm_redox.h
@@ -140,0 +141 @@ struct redox_drm_version_wire {
+ char name[64];