Date: Mon, 20 Nov 2017 02:26:20 +0000 (UTC) From: Jeff Roberson <jeff@FreeBSD.org> To: src-committers@freebsd.org, svn-src-user@freebsd.org Subject: svn commit: r326002 - user/jeff/numa/sys/vm Message-ID: <201711200226.vAK2QKET092022@repo.freebsd.org>
next in thread | raw e-mail | index | archive | help
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);
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201711200226.vAK2QKET092022>