Module Name: src
Committed By: matt
Date: Tue Jan 31 00:30:52 UTC 2012
Modified Files:
src/sys/uvm: uvm_km.c
Log Message:
Deal with case when kmembase == kmemstart.
Use KASSERTMSG for a few KASSERTs
Make sure to match the color of the VA when we are allocating a physical page.
To generate a diff of this commit:
cvs rdiff -u -r1.113 -r1.114 src/sys/uvm/uvm_km.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/uvm/uvm_km.c
diff -u src/sys/uvm/uvm_km.c:1.113 src/sys/uvm/uvm_km.c:1.114
--- src/sys/uvm/uvm_km.c:1.113 Sun Jan 29 12:37:01 2012
+++ src/sys/uvm/uvm_km.c Tue Jan 31 00:30:52 2012
@@ -1,4 +1,4 @@
-/* $NetBSD: uvm_km.c,v 1.113 2012/01/29 12:37:01 para Exp $ */
+/* $NetBSD: uvm_km.c,v 1.114 2012/01/31 00:30:52 matt Exp $ */
/*
* Copyright (c) 1997 Charles D. Cranor and Washington University.
@@ -120,7 +120,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: uvm_km.c,v 1.113 2012/01/29 12:37:01 para Exp $");
+__KERNEL_RCSID(0, "$NetBSD: uvm_km.c,v 1.114 2012/01/31 00:30:52 matt Exp $");
#include "opt_uvmhist.h"
@@ -222,6 +222,8 @@ uvm_km_bootstrap(vaddr_t start, vaddr_t
if (error)
panic(
"uvm_km_bootstrap: could not reserve kernel kmem");
+ } else {
+ kmembase = base;
}
/*
@@ -528,7 +530,8 @@ uvm_km_alloc(struct vm_map *map, vsize_t
if (flags & UVM_KMF_EXEC)
prot |= VM_PROT_EXECUTE;
while (loopsize) {
- KASSERT(!pmap_extract(pmap_kernel(), loopva, NULL));
+ KASSERTMSG(!pmap_extract(pmap_kernel(), loopva, NULL),
+ "loopva=%#"PRIxVADDR, loopva);
pg = uvm_pagealloc_strat(NULL, offset, NULL, pgaflags,
#ifdef UVM_KM_VMFREELIST
@@ -662,10 +665,13 @@ again:
loopsize = size;
while (loopsize) {
- KASSERT(!pmap_extract(pmap_kernel(), loopva, NULL));
-
- pg = uvm_pagealloc(NULL, 0, NULL,
- (flags & VM_SLEEP) ? 0 : UVM_PGA_USERESERVE);
+ KASSERTMSG(!pmap_extract(pmap_kernel(), loopva, NULL),
+ "loopva=%#"PRIxVADDR" loopsize=%#"PRIxVSIZE" vmem=%p",
+ loopva, loopsize, vm);
+
+ pg = uvm_pagealloc(NULL, loopva, NULL,
+ UVM_KMF_COLORMATCH
+ | ((flags & VM_SLEEP) ? 0 : UVM_PGA_USERESERVE));
if (__predict_false(pg == NULL)) {
if (flags & VM_SLEEP) {
uvm_wait("plpg");