svn commit: r326002 - user/jeff/numa/sys/vm
Jeff Roberson
jeff at FreeBSD.org
Mon Nov 20 02:26:22 UTC 2017
Author: jeff
Date: Mon Nov 20 02:26:20 2017
New Revision: 326002
URL: https://svnweb.freebsd.org/changeset/base/326002
Log:
Update for r325992
Not all files that include vm_phys.h include opt_vm.h, this gives different
definitions for vm_phys_domain().
Add some asserts to guarantee that we're getting the domain we expect in
a few cases that can cause crashes later.
Modified:
user/jeff/numa/sys/vm/vm_init.c
user/jeff/numa/sys/vm/vm_kern.c
user/jeff/numa/sys/vm/vm_phys.h
user/jeff/numa/sys/vm/vm_reserv.c
Modified: user/jeff/numa/sys/vm/vm_init.c
==============================================================================
--- user/jeff/numa/sys/vm/vm_init.c Sun Nov 19 20:18:21 2017 (r326001)
+++ user/jeff/numa/sys/vm/vm_init.c Mon Nov 20 02:26:20 2017 (r326002)
@@ -93,10 +93,10 @@ __FBSDID("$FreeBSD$");
#if VM_NRESERVLEVEL > 0
-#define KVA_QUANTUM 1 << (VM_LEVEL_0_ORDER + PAGE_SHIFT)
+#define KVA_QUANTUM (1 << (VM_LEVEL_0_ORDER + PAGE_SHIFT))
#else
/* On non-superpage architectures want large import sizes. */
-#define KVA_QUANTUM PAGE_SIZE * 1024
+#define KVA_QUANTUM (PAGE_SIZE * 1024)
#endif
long physmem;
@@ -114,7 +114,10 @@ kva_import(void *unused, vmem_size_t size, int flags,
{
vm_offset_t addr;
int result;
-
+
+ KASSERT((size % KVA_QUANTUM) == 0,
+ ("kva_import: Size %jd is not a multiple of %u",
+ size, KVA_QUANTUM));
addr = vm_map_min(kernel_map);
result = vm_map_find(kernel_map, NULL, 0, &addr, size, 0,
VMFS_SUPER_SPACE, VM_PROT_ALL, VM_PROT_ALL, MAP_NOFAULT);
Modified: user/jeff/numa/sys/vm/vm_kern.c
==============================================================================
--- user/jeff/numa/sys/vm/vm_kern.c Sun Nov 19 20:18:21 2017 (r326001)
+++ user/jeff/numa/sys/vm/vm_kern.c Mon Nov 20 02:26:20 2017 (r326002)
@@ -65,6 +65,8 @@
#include <sys/cdefs.h>
__FBSDID("$FreeBSD$");
+#include "opt_vm.h"
+
#include <sys/param.h>
#include <sys/systm.h>
#include <sys/kernel.h> /* for ticks and hz */
@@ -464,6 +466,9 @@ retry:
kmem_unback(object, addr, i);
return (KERN_NO_SPACE);
}
+ KASSERT(vm_phys_domidx(m) == domain,
+ ("kmem_back_domain: Domain mismatch %d != %d",
+ vm_phys_domidx(m), domain));
if (flags & M_ZERO && (m->flags & PG_ZERO) == 0)
pmap_zero_page(m);
KASSERT((m->oflags & VPO_UNMANAGED) != 0,
Modified: user/jeff/numa/sys/vm/vm_phys.h
==============================================================================
--- user/jeff/numa/sys/vm/vm_phys.h Sun Nov 19 20:18:21 2017 (r326001)
+++ user/jeff/numa/sys/vm/vm_phys.h Mon Nov 20 02:26:20 2017 (r326002)
@@ -100,7 +100,6 @@ int vm_phys_mem_affinity(int f, int t);
static inline int
vm_phys_domidx(vm_page_t m)
{
-#ifdef VM_NUMA_ALLOC
int domn, segind;
/* XXXKIB try to assert that the page is managed */
@@ -109,9 +108,6 @@ vm_phys_domidx(vm_page_t m)
domn = vm_phys_segs[segind].domain;
KASSERT(domn < vm_ndomains, ("domain %d m %p", domn, m));
return (domn);
-#else
- return (0);
-#endif
}
/*
Modified: user/jeff/numa/sys/vm/vm_reserv.c
==============================================================================
--- user/jeff/numa/sys/vm/vm_reserv.c Sun Nov 19 20:18:21 2017 (r326001)
+++ user/jeff/numa/sys/vm/vm_reserv.c Mon Nov 20 02:26:20 2017 (r326002)
@@ -713,7 +713,7 @@ vm_reserv_alloc_page(vm_object_t object, vm_pindex_t p
LIST_INSERT_HEAD(&object->rvq, rv, objq);
rv->object = object;
rv->pindex = first;
- rv->domain = vm_phys_domidx(m);
+ rv->domain = domain;
KASSERT(rv->popcnt == 0,
("vm_reserv_alloc_page: reserv %p's popcnt is corrupted", rv));
KASSERT(!rv->inpartpopq,
@@ -732,6 +732,8 @@ vm_reserv_alloc_page(vm_object_t object, vm_pindex_t p
found:
index = VM_RESERV_INDEX(object, pindex);
m = &rv->pages[index];
+ KASSERT(object != kernel_object || vm_phys_domidx(m) == domain,
+ ("vm_reserv_alloc_page: Domain mismatch from reservation."));
/* Handle vm_page_rename(m, new_object, ...). */
if (popmap_is_set(rv->popmap, index))
return (NULL);
More information about the svn-src-user
mailing list