Skip to contentSkip to conversation

package/virglrenderer: fix i915 backend build on 32-bit platforms

PATCH New Yegor Yefremov 1 participant 1 message Nov 10

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 package/virglrenderer: fix i915 backend build on 32-bit platforms

When the Intel (i915) DRM backend is enabled, the build fails on 32-bit platforms:

../src/drm/i915/i915_ccmd.c:267:63: error: cast to pointer from integer of different size [-Werror=int-to-pointer-cast]

    267 |          struct drm_i915_gem_memory_class_instance *classes = (void*)mem_regions->regions;
        |                                                               ^

drm_i915_gem_create_ext_memory_regions::regions is a __u64, which cannot be cast directly to a 32-bit pointer. Backport the upstream fix, which casts through uintptr_t first.

This issue has been present since commit 76d4a9b297eb ("package/virglrenderer: new package"), which added the package with the i915 backend. It therefore affects 2026.08 and later.

Fixes:
https://autobuild.buildroot.org/results/72c81920e6d1fbc36de8930f4ad2f70f88c4cf29

Fixes 76d4a9b297ebd4ed15000bce62873049b9e75f5a ("package/virglrenderer: new package")
Assisted-by Claude:claude-opus-5-5
---
 ...m-i915-fix-build-on-32-bit-platforms.patch | 43 +++++++++++++++++++
 1 file changed, 43 insertions(+)
 create mode 100644 package/virglrenderer/0002-drm-i915-fix-build-on-32-bit-platforms.patch
package/virglrenderer/0002-drm-i915-fix-build-on-32-bit-platforms.patch new file +43 -0
new file mode 100644
index 0000000000..69039d329b
@@ -0,0 +1,43 @@
+From 8d6123bb9e3b1959077bc3792a9163f85c78d0d4 Mon Sep 17 00:00:00 2001
+From: Yegor Yefremov <[email protected]>
+Date: Sat, 7 Nov 2026 09:33:13 +0100
+Subject: [PATCH] drm/i915: fix build on 32-bit platforms
+
+drm_i915_gem_create_ext_memory_regions::regions is a __u64. Casting it
+directly to a pointer fails on 32-bit platforms, where pointers are
+only 32 bits wide:
+
+  ../src/drm/i915/i915_ccmd.c:267:63: error: cast to pointer from integer of different size [-Werror=int-to-pointer-cast]
+    267 |          struct drm_i915_gem_memory_class_instance *classes = (void*)mem_regions->regions;
+        |                                                               ^
+
+Cast through uintptr_t first. The value was assigned from a uintptr_t
+just above, so no information is lost.
+
+Seen in Buildroot's autobuilder:
+
+https://autobuild.buildroot.org/results/72c81920e6d1fbc36de8930f4ad2f70f88c4cf29
+
+Upstream: https://gitlab.freedesktop.org/virgl/virglrenderer/-/commit/8d6123bb9e3b1959077bc3792a9163f85c78d0d4
+Signed-off-by: Yegor Yefremov <[email protected]>
+Part-of: <https://gitlab.freedesktop.org/virgl/virglrenderer/-/merge_requests/1712>
+---
+ src/drm/i915/i915_ccmd.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/drm/i915/i915_ccmd.c b/src/drm/i915/i915_ccmd.c
+index 2db97ed15..cc07e2802 100644
+--- a/src/drm/i915/i915_ccmd.c
++++ b/src/drm/i915/i915_ccmd.c
+@@ -276,7 +276,7 @@ i915_ccmd_gem_create_ext(struct drm_context *dctx, struct vdrm_ccmd_req *hdr)
+          if (ext_size < 0)
+             break;
+ 
+-         struct drm_i915_gem_memory_class_instance *classes = (void*)mem_regions->regions;
++         struct drm_i915_gem_memory_class_instance *classes = (void *)(uintptr_t)mem_regions->regions;
+ 
+          for (unsigned i = 0; i < mem_regions->num_regions; i++) {
+             struct drm_i915_gem_memory_class_instance *class = classes + i;
+-- 
+GitLab
+
Signature · 6 lines
2.34.1

_______________________________________________
buildroot mailing list
[email protected]
https://lists.buildroot.org/mailman/listinfo/buildroot