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");

Reply via email to