Index: sys/amd64/amd64/machdep.c =================================================================== --- sys/amd64/amd64/machdep.c +++ sys/amd64/amd64/machdep.c @@ -95,14 +95,15 @@ #include #include +#include #include #include #include #include #include #include -#include #include +#include #ifdef DDB #ifndef KDB Index: sys/amd64/amd64/minidump_machdep.c =================================================================== --- sys/amd64/amd64/minidump_machdep.c +++ sys/amd64/amd64/minidump_machdep.c @@ -46,6 +46,7 @@ #include #include #include +#include #include #include #include Index: sys/amd64/amd64/pmap.c =================================================================== --- sys/amd64/amd64/pmap.c +++ sys/amd64/amd64/pmap.c @@ -149,6 +149,7 @@ #include #include #include +#include #include #include Index: sys/amd64/amd64/uma_machdep.c =================================================================== --- sys/amd64/amd64/uma_machdep.c +++ sys/amd64/amd64/uma_machdep.c @@ -36,12 +36,13 @@ #include #include #include +#include #include #include +#include #include #include #include -#include void * uma_small_alloc(uma_zone_t zone, vm_size_t bytes, int domain, u_int8_t *flags, Index: sys/arm/arm/mem.c =================================================================== --- sys/arm/arm/mem.c +++ sys/arm/arm/mem.c @@ -65,6 +65,7 @@ #include #include #include +#include #include #include Index: sys/arm/arm/minidump_machdep.c =================================================================== --- sys/arm/arm/minidump_machdep.c +++ sys/arm/arm/minidump_machdep.c @@ -48,6 +48,7 @@ #include #include #include +#include #include #include #include Index: sys/arm64/arm64/minidump_machdep.c =================================================================== --- sys/arm64/arm64/minidump_machdep.c +++ sys/arm64/arm64/minidump_machdep.c @@ -48,6 +48,7 @@ #include #include #include +#include #include #include Index: sys/arm64/arm64/pmap.c =================================================================== --- sys/arm64/arm64/pmap.c +++ sys/arm64/arm64/pmap.c @@ -143,6 +143,7 @@ #include #include #include +#include #include #include Index: sys/arm64/arm64/uma_machdep.c =================================================================== --- sys/arm64/arm64/uma_machdep.c +++ sys/arm64/arm64/uma_machdep.c @@ -34,8 +34,10 @@ #include #include #include +#include #include #include +#include #include #include #include Index: sys/i386/i386/machdep.c =================================================================== --- sys/i386/i386/machdep.c +++ sys/i386/i386/machdep.c @@ -94,14 +94,15 @@ #include #include +#include #include #include #include #include #include #include -#include #include +#include #ifdef DDB #ifndef KDB Index: sys/i386/i386/minidump_machdep_base.c =================================================================== --- sys/i386/i386/minidump_machdep_base.c +++ sys/i386/i386/minidump_machdep_base.c @@ -43,6 +43,7 @@ #include #include #include +#include #include #include #include Index: sys/kern/kern_dump.c =================================================================== --- sys/kern/kern_dump.c +++ sys/kern/kern_dump.c @@ -39,6 +39,7 @@ #include #include #include +#include #include #include #include Index: sys/kern/subr_physmem.c =================================================================== --- sys/kern/subr_physmem.c +++ sys/kern/subr_physmem.c @@ -43,6 +43,7 @@ #include #include #include +#include #include /* Index: sys/mips/atheros/ar531x/ar5315_machdep.c =================================================================== --- sys/mips/atheros/ar531x/ar5315_machdep.c +++ sys/mips/atheros/ar531x/ar5315_machdep.c @@ -45,6 +45,7 @@ #include #include #include +#include #include Index: sys/mips/atheros/ar71xx_machdep.c =================================================================== --- sys/mips/atheros/ar71xx_machdep.c +++ sys/mips/atheros/ar71xx_machdep.c @@ -48,6 +48,7 @@ #include #include #include +#include #include Index: sys/mips/beri/beri_machdep.c =================================================================== --- sys/mips/beri/beri_machdep.c +++ sys/mips/beri/beri_machdep.c @@ -69,6 +69,7 @@ #include #include #include +#include #include #include Index: sys/mips/broadcom/bcm_machdep.c =================================================================== --- sys/mips/broadcom/bcm_machdep.c +++ sys/mips/broadcom/bcm_machdep.c @@ -61,6 +61,7 @@ #include #include #include +#include #include #include Index: sys/mips/cavium/octeon_machdep.c =================================================================== --- sys/mips/cavium/octeon_machdep.c +++ sys/mips/cavium/octeon_machdep.c @@ -60,6 +60,7 @@ #include #include #include +#include #include #include Index: sys/mips/ingenic/jz4780_machdep.c =================================================================== --- sys/mips/ingenic/jz4780_machdep.c +++ sys/mips/ingenic/jz4780_machdep.c @@ -51,6 +51,7 @@ #include #include #include +#include #include Index: sys/mips/malta/malta_machdep.c =================================================================== --- sys/mips/malta/malta_machdep.c +++ sys/mips/malta/malta_machdep.c @@ -58,6 +58,7 @@ #include #include #include +#include #include #include Index: sys/mips/mediatek/mtk_machdep.c =================================================================== --- sys/mips/mediatek/mtk_machdep.c +++ sys/mips/mediatek/mtk_machdep.c @@ -58,6 +58,7 @@ #include #include #include +#include #include #include Index: sys/mips/mips/minidump_machdep.c =================================================================== --- sys/mips/mips/minidump_machdep.c +++ sys/mips/mips/minidump_machdep.c @@ -42,9 +42,11 @@ #include #include #include +#include #include #include #include +#include #include #include #include Index: sys/mips/mips/pmap.c =================================================================== --- sys/mips/mips/pmap.c +++ sys/mips/mips/pmap.c @@ -95,6 +95,7 @@ #include #include #include +#include #include #include Index: sys/mips/mips/uma_machdep.c =================================================================== --- sys/mips/mips/uma_machdep.c +++ sys/mips/mips/uma_machdep.c @@ -36,8 +36,10 @@ #include #include #include +#include #include #include +#include #include #include #include Index: sys/mips/nlm/xlp_machdep.c =================================================================== --- sys/mips/nlm/xlp_machdep.c +++ sys/mips/nlm/xlp_machdep.c @@ -59,6 +59,7 @@ #include #include #include +#include #include #include Index: sys/powerpc/aim/mmu_oea64.c =================================================================== --- sys/powerpc/aim/mmu_oea64.c +++ sys/powerpc/aim/mmu_oea64.c @@ -82,6 +82,7 @@ #include #include #include +#include #include #include Index: sys/powerpc/aim/mmu_radix.c =================================================================== --- sys/powerpc/aim/mmu_radix.c +++ sys/powerpc/aim/mmu_radix.c @@ -68,6 +68,7 @@ #include #include #include +#include #include #include Index: sys/powerpc/booke/pmap.c =================================================================== --- sys/powerpc/booke/pmap.c +++ sys/powerpc/booke/pmap.c @@ -99,16 +99,17 @@ #include #include +#include #include #include #include #include #include -#include #include #include #include #include +#include #include #include Index: sys/powerpc/powerpc/minidump_machdep.c =================================================================== --- sys/powerpc/powerpc/minidump_machdep.c +++ sys/powerpc/powerpc/minidump_machdep.c @@ -38,6 +38,7 @@ #include #include #include +#include #include #include Index: sys/powerpc/powerpc/uma_machdep.c =================================================================== --- sys/powerpc/powerpc/uma_machdep.c +++ sys/powerpc/powerpc/uma_machdep.c @@ -36,10 +36,12 @@ #include #include #include +#include #include #include #include #include +#include #include #include #include Index: sys/riscv/riscv/minidump_machdep.c =================================================================== --- sys/riscv/riscv/minidump_machdep.c +++ sys/riscv/riscv/minidump_machdep.c @@ -45,6 +45,7 @@ #include #include #include +#include #include #include Index: sys/riscv/riscv/pmap.c =================================================================== --- sys/riscv/riscv/pmap.c +++ sys/riscv/riscv/pmap.c @@ -152,6 +152,7 @@ #include #include #include +#include #include #include Index: sys/riscv/riscv/uma_machdep.c =================================================================== --- sys/riscv/riscv/uma_machdep.c +++ sys/riscv/riscv/uma_machdep.c @@ -34,8 +34,10 @@ #include #include #include +#include #include #include +#include #include #include #include Index: sys/vm/uma_core.c =================================================================== --- sys/vm/uma_core.c +++ sys/vm/uma_core.c @@ -82,16 +82,17 @@ #include #include +#include #include #include #include #include -#include #include #include #include #include #include +#include #include #include #include Index: sys/vm/vm_dumpset.h =================================================================== --- /dev/null +++ sys/vm/vm_dumpset.h @@ -0,0 +1,99 @@ +/*- + * SPDX-License-Identifier: BSD-2-Clause-FreeBSD + * + * Copyright (c) 2020, Scott Phillips + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice unmodified, this list of conditions, and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * $FreeBSD$ + */ + +#ifndef _SYS_DUMPSET_H_ +#define _SYS_DUMPSET_H_ + +#include +#include + +extern struct bitset *vm_page_dump; +extern long vm_page_dump_pages; +extern vm_paddr_t dump_avail[PHYS_AVAIL_COUNT]; + +static inline void +dump_add_page(vm_paddr_t pa) +{ + vm_pindex_t adj; + int i; + + adj = 0; + for (i = 0; dump_avail[i + 1] != 0; i += 2) { + if (pa >= dump_avail[i] && pa < dump_avail[i + 1]) { + BIT_SET_ATOMIC(vm_page_dump_pages, + (pa >> PAGE_SHIFT) - (dump_avail[i] >> PAGE_SHIFT) + + adj, vm_page_dump); + return; + } + adj += howmany(dump_avail[i + 1], PAGE_SIZE) - + dump_avail[i] / PAGE_SIZE; + } +} + +static inline void +dump_drop_page(vm_paddr_t pa) +{ + vm_pindex_t adj; + int i; + + adj = 0; + for (i = 0; dump_avail[i + 1] != 0; i += 2) { + if (pa >= dump_avail[i] && pa < dump_avail[i + 1]) { + BIT_CLR_ATOMIC(vm_page_dump_pages, + (pa >> PAGE_SHIFT) - (dump_avail[i] >> PAGE_SHIFT) + + adj, vm_page_dump); + return; + } + adj += howmany(dump_avail[i + 1], PAGE_SIZE) - + dump_avail[i] / PAGE_SIZE; + } +} + +static inline vm_paddr_t +vm_page_dump_index_to_pa(int bit) +{ + int i, tot; + + for (i = 0; dump_avail[i + 1] != 0; i += 2) { + tot = howmany(dump_avail[i + 1], PAGE_SIZE) - + dump_avail[i] / PAGE_SIZE; + if (bit < tot) + return ((vm_paddr_t)bit * PAGE_SIZE + + (dump_avail[i] & ~PAGE_MASK)); + bit -= tot; + } + return ((vm_paddr_t)NULL); +} + +#define VM_PAGE_DUMP_FOREACH(pa) \ + for (vm_pindex_t __b = BIT_FFS(vm_page_dump_pages, vm_page_dump); \ + (pa) = vm_page_dump_index_to_pa(__b - 1), __b != 0; \ + __b = BIT_FFS_AT(vm_page_dump_pages, vm_page_dump, __b)) + +#endif /* _SYS_DUMPSET_H_ */ Index: sys/vm/vm_page.h =================================================================== --- sys/vm/vm_page.h +++ sys/vm/vm_page.h @@ -69,8 +69,6 @@ #ifndef _VM_PAGE_ #define _VM_PAGE_ -#include -#include #include /* @@ -587,69 +585,6 @@ #define PS_ALL_VALID 0x2 #define PS_NONE_BUSY 0x4 -extern struct bitset *vm_page_dump; -extern long vm_page_dump_pages; -extern vm_paddr_t dump_avail[]; - -static inline void -dump_add_page(vm_paddr_t pa) -{ - vm_pindex_t adj; - int i; - - adj = 0; - for (i = 0; dump_avail[i + 1] != 0; i += 2) { - if (pa >= dump_avail[i] && pa < dump_avail[i + 1]) { - BIT_SET_ATOMIC(vm_page_dump_pages, - (pa >> PAGE_SHIFT) - (dump_avail[i] >> PAGE_SHIFT) + - adj, vm_page_dump); - return; - } - adj += howmany(dump_avail[i + 1], PAGE_SIZE) - - dump_avail[i] / PAGE_SIZE; - } -} - -static inline void -dump_drop_page(vm_paddr_t pa) -{ - vm_pindex_t adj; - int i; - - adj = 0; - for (i = 0; dump_avail[i + 1] != 0; i += 2) { - if (pa >= dump_avail[i] && pa < dump_avail[i + 1]) { - BIT_CLR_ATOMIC(vm_page_dump_pages, - (pa >> PAGE_SHIFT) - (dump_avail[i] >> PAGE_SHIFT) + - adj, vm_page_dump); - return; - } - adj += howmany(dump_avail[i + 1], PAGE_SIZE) - - dump_avail[i] / PAGE_SIZE; - } -} - -static inline vm_paddr_t -vm_page_dump_index_to_pa(int bit) -{ - int i, tot; - - for (i = 0; dump_avail[i + 1] != 0; i += 2) { - tot = howmany(dump_avail[i + 1], PAGE_SIZE) - - dump_avail[i] / PAGE_SIZE; - if (bit < tot) - return ((vm_paddr_t)bit * PAGE_SIZE + - (dump_avail[i] & ~PAGE_MASK)); - bit -= tot; - } - return ((vm_paddr_t)NULL); -} - -#define VM_PAGE_DUMP_FOREACH(pa) \ - for (vm_pindex_t __b = BIT_FFS(vm_page_dump_pages, vm_page_dump); \ - (pa) = vm_page_dump_index_to_pa(__b - 1), __b != 0; \ - __b = BIT_FFS_AT(vm_page_dump_pages, vm_page_dump, __b)) - bool vm_page_busy_acquire(vm_page_t m, int allocflags); void vm_page_busy_downgrade(vm_page_t m); int vm_page_busy_tryupgrade(vm_page_t m); Index: sys/vm/vm_page.c =================================================================== --- sys/vm/vm_page.c +++ sys/vm/vm_page.c @@ -108,6 +108,7 @@ #include #include #include +#include #include #include Index: sys/vm/vm_phys.h =================================================================== --- sys/vm/vm_phys.h +++ sys/vm/vm_phys.h @@ -47,7 +47,6 @@ #endif extern vm_paddr_t phys_avail[PHYS_AVAIL_COUNT]; -extern vm_paddr_t dump_avail[PHYS_AVAIL_COUNT]; /* Domains must be dense (non-sparse) and zero-based. */ struct mem_affinity { Index: sys/x86/x86/nexus.c =================================================================== --- sys/x86/x86/nexus.c +++ sys/x86/x86/nexus.c @@ -66,6 +66,7 @@ #include #include #include +#include #include #include