Re: graphics/drm-61-kmod build failure for main-n276560-83dcc133c876
- Reply: Rainer Hurling : "Re: graphics/drm-61-kmod build failure for main-n276560-83dcc133c876"
- Reply: Seyed Pouria Mousavizadeh Tehrani : "Re: graphics/drm-61-kmod build failure for main-n276560-83dcc133c876"
- In reply to: David Wolfskill : "graphics/drm-61-kmod build failure for main-n276560-83dcc133c876"
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Sat, 19 Apr 2025 14:02:31 UTC
On Sat, Apr 19, 2025 at 06:06:59AM -0700, David Wolfskill wrote:
> Running:
> FreeBSD g1-118.catwhisker.org 15.0-CURRENT FreeBSD 15.0-CURRENT #445 main-n276537-7121e9414f29: Fri Apr 18 12:36:30 UTC 2025 root@g1-120.catwhisker.org:/common/S4/obj/usr/src/amd64.amd64/sys/CANARY amd64
>
> after updating sources to main-n276560-83dcc133c876, with a ports tree
> at main-n703265-33b43edfb65d, I find:
>
> ...
> --- i915_gem_mman.o ---
> /common/S4/obj/usr/src/amd64.amd64/sys/CANARY/common/ports/graphics/drm-61-kmod/work/drm-kmod-drm_v6.1.128_1/drivers/gpu/drm/i915/gem/i915_gem_mman.c:171:77: error: call to undeclared function 'vm_page_next'; ISO C99 and later do not support implicit function declarations [-Werror,-Wimplicit-function-declaration]
> 171 | for (vm_page_t page = vm_page_find_least(vmobj, 0); page != NULL; page = vm_page_next(page)) {
> | ^
> /common/S4/obj/usr/src/amd64.amd64/sys/CANARY/common/ports/graphics/drm-61-kmod/work/drm-kmod-drm_v6.1.128_1/drivers/gpu/drm/i915/gem/i915_gem_mman.c:171:75: error: incompatible integer to pointer conversion assigning to 'vm_page_t' (aka 'struct vm_page *') from 'int' [-Wint-conversion]
> 171 | for (vm_page_t page = vm_page_find_least(vmobj, 0); page != NULL; page = vm_page_next(page)) {
> | ^ ~~~~~~~~~~~~~~~~~~
> 2 errors generated.
> *** [i915_gem_mman.o] Error code 1
>
> make[1]: stopped making "all" in /common/S4/obj/usr/src/amd64.amd64/sys/CANARY/common/ports/graphics/drm-61-kmod/work/drm-kmod-drm_v6.1.128_1/i915
> make[1]: 1 error
> [end of excerpt from typescript -- dhw]
>
> This is using METAMODE (as I've done for ages, now); unfortunately:
>
> .ERROR_TARGET='all'
> .ERROR_META_FILE=''
> .MAKE.LEVEL='2'
> MAKEFILE=''
>
> so not much to be gained there (that I can see).
Something like the following diff is needed. It needs to be built
against the latest main, where __FreeBSD_version is bumped.
diff --git a/drivers/gpu/drm/i915/gem/i915_gem_mman.c b/drivers/gpu/drm/i915/gem/i915_gem_mman.c
index 2a9946c7d0..f61eeefe7a 100644
--- a/drivers/gpu/drm/i915/gem/i915_gem_mman.c
+++ b/drivers/gpu/drm/i915/gem/i915_gem_mman.c
@@ -34,6 +34,7 @@
#include <vm/vm_object.h>
#include <vm/vm_pager.h>
#include <vm/vm_param.h>
+#include <vm/vm_radix.h>
#endif
#ifdef __linux__ /* Mute unused function warning. */
@@ -168,9 +169,16 @@ i915_gem_mmap_ioctl(struct drm_device *dev, void *data,
if ((rv == KERN_SUCCESS) && (args->flags & I915_MMAP_WC)) {
VM_OBJECT_WLOCK(vmobj);
if (vm_object_set_memattr(vmobj, VM_MEMATTR_WRITE_COMBINING) != KERN_SUCCESS) {
- for (vm_page_t page = vm_page_find_least(vmobj, 0); page != NULL; page = vm_page_next(page)) {
+#if __FreeBSD_version >= 1500038
+ struct pctrie_iter pages;
+ vm_page_t page;
+
+ vm_page_iter_init(&pages, vmobj);
+ VM_RADIX_FORALL(page, &pages)
+#else
+ for (vm_page_t page = vm_page_find_least(vmobj, 0); page != NULL; page = vm_page_next(page))
+#endif
pmap_page_set_memattr(page, VM_MEMATTR_WRITE_COMBINING);
- }
}
VM_OBJECT_WUNLOCK(vmobj);
}