Index: sys/arm/arm/machdep.c =================================================================== --- sys/arm/arm/machdep.c +++ sys/arm/arm/machdep.c @@ -618,7 +618,7 @@ */ physmem_exclude_region(abp->abp_physaddr, pmap_preboot_get_pages(0) - abp->abp_physaddr, EXFLAG_NOALLOC); - physmem_init_kernel_globals(); + physmem_init_kernel_globals(NULL, NULL); init_param2(physmem); /* Init message buffer. */ Index: sys/arm64/arm64/machdep.c =================================================================== --- sys/arm64/arm64/machdep.c +++ sys/arm64/arm64/machdep.c @@ -796,7 +796,7 @@ /* Exclude entries neexed in teh DMAP region, but not phys_avail */ if (efihdr != NULL) exclude_efi_map_entries(efihdr); - physmem_init_kernel_globals(); + physmem_init_kernel_globals(NULL, NULL); devmap_bootstrap(0, NULL); Index: sys/kern/subr_physmem.c =================================================================== --- sys/kern/subr_physmem.c +++ sys/kern/subr_physmem.c @@ -478,7 +478,7 @@ * last page of physical memory in the system. */ void -physmem_init_kernel_globals(void) +physmem_init_kernel_globals(size_t *pa_idx, size_t *da_idx) { size_t nextidx; u_long hwphyssz; @@ -486,12 +486,16 @@ hwphyssz = 0; TUNABLE_ULONG_FETCH("hw.physmem", &hwphyssz); - regions_to_avail(dump_avail, EXFLAG_NODUMP, PHYS_AVAIL_ENTRIES, - hwphyssz, NULL, NULL); + nextidx = regions_to_avail(dump_avail, EXFLAG_NODUMP, + PHYS_AVAIL_ENTRIES, hwphyssz, NULL, NULL); + if (da_idx != NULL) + *da_idx = nextidx; nextidx = regions_to_avail(phys_avail, EXFLAG_NOALLOC, PHYS_AVAIL_ENTRIES, hwphyssz, &physmem, &realmem); if (nextidx == 0) panic("No memory entries in phys_avail"); + if (pa_idx != NULL) + *pa_idx = nextidx; Maxmem = atop(phys_avail[nextidx - 1]); } Index: sys/riscv/riscv/machdep.c =================================================================== --- sys/riscv/riscv/machdep.c +++ sys/riscv/riscv/machdep.c @@ -566,7 +566,7 @@ EXFLAG_NODUMP | EXFLAG_NOALLOC); } #endif - physmem_init_kernel_globals(); + physmem_init_kernel_globals(NULL, NULL); /* Establish static device mappings */ devmap_bootstrap(0, NULL); Index: sys/sys/physmem.h =================================================================== --- sys/sys/physmem.h +++ sys/sys/physmem.h @@ -52,7 +52,7 @@ void physmem_hardware_region(uint64_t pa, uint64_t sz); void physmem_exclude_region(vm_paddr_t pa, vm_size_t sz, uint32_t flags); size_t physmem_avail(vm_paddr_t *avail, size_t maxavail); -void physmem_init_kernel_globals(void); +void physmem_init_kernel_globals(size_t *pa_idx, size_t *da_idx); void physmem_print_tables(void); /*