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 > r...@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); }