aboutsummaryrefslogtreecommitdiff
path: root/sys/vm/vm_page.c
diff options
context:
space:
mode:
authorJeff Roberson <jeff@FreeBSD.org>2019-08-18 07:06:31 +0000
committerJeff Roberson <jeff@FreeBSD.org>2019-08-18 07:06:31 +0000
commitb7565d44df6d15d8a7487401c2b88d0264c3420b (patch)
treebc5829ed2e16a40577cdba87a0b46157eba3e53f /sys/vm/vm_page.c
parentf49e79b56bbb0615e5228dacf636f44bbf5a4a00 (diff)
downloadsrc-b7565d44df6d15d8a7487401c2b88d0264c3420b.tar.gz
src-b7565d44df6d15d8a7487401c2b88d0264c3420b.zip
Encapsulate phys_avail manipulation in a set of simple routines. Add a
NUMA aware boot time memory allocator that will be used to allocate early domain correct structures. Code partially submitted by gallatin. Reviewed by: gallatin, kib Tested by: pho Sponsored by: Netflix Differential Revision: https://reviews.freebsd.org/D21251
Notes
Notes: svn path=/head/; revision=351181
Diffstat (limited to 'sys/vm/vm_page.c')
-rw-r--r--sys/vm/vm_page.c21
1 files changed, 5 insertions, 16 deletions
diff --git a/sys/vm/vm_page.c b/sys/vm/vm_page.c
index e8797a929055..98367025b63e 100644
--- a/sys/vm/vm_page.c
+++ b/sys/vm/vm_page.c
@@ -538,7 +538,7 @@ vm_page_startup(vm_offset_t vaddr)
char *list, *listend;
vm_offset_t mapped;
vm_paddr_t end, high_avail, low_avail, new_end, page_range, size;
- vm_paddr_t biggestsize, last_pa, pa;
+ vm_paddr_t last_pa, pa;
u_long pagecount;
int biggestone, i, segind;
#ifdef WITNESS
@@ -548,22 +548,10 @@ vm_page_startup(vm_offset_t vaddr)
long ii;
#endif
- biggestsize = 0;
- biggestone = 0;
vaddr = round_page(vaddr);
- for (i = 0; phys_avail[i + 1]; i += 2) {
- phys_avail[i] = round_page(phys_avail[i]);
- phys_avail[i + 1] = trunc_page(phys_avail[i + 1]);
- }
- for (i = 0; phys_avail[i + 1]; i += 2) {
- size = phys_avail[i + 1] - phys_avail[i];
- if (size > biggestsize) {
- biggestone = i;
- biggestsize = size;
- }
- }
-
+ vm_phys_early_startup();
+ biggestone = vm_phys_avail_largest();
end = phys_avail[biggestone+1];
/*
@@ -776,7 +764,8 @@ vm_page_startup(vm_offset_t vaddr)
* physical pages.
*/
for (i = 0; phys_avail[i + 1] != 0; i += 2)
- vm_phys_add_seg(phys_avail[i], phys_avail[i + 1]);
+ if (vm_phys_avail_size(i) != 0)
+ vm_phys_add_seg(phys_avail[i], phys_avail[i + 1]);
/*
* Initialize the physical memory allocator.