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