Module Name: src Committed By: matt Date: Mon Sep 3 17:30:04 UTC 2012
Modified Files: src/sys/uvm: uvm_km.c uvm_map.c Log Message: Cleanup comment. Change panic to KASSERTMSG. Use kernel_map->misc_lock to make sure we don't call pmap_growkernel concurrently and possibly mess up uvm_maxkaddr. To generate a diff of this commit: cvs rdiff -u -r1.131 -r1.132 src/sys/uvm/uvm_km.c cvs rdiff -u -r1.319 -r1.320 src/sys/uvm/uvm_map.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.131 src/sys/uvm/uvm_km.c:1.132 --- src/sys/uvm/uvm_km.c:1.131 Mon Sep 3 16:07:17 2012 +++ src/sys/uvm/uvm_km.c Mon Sep 3 17:30:04 2012 @@ -1,4 +1,4 @@ -/* $NetBSD: uvm_km.c,v 1.131 2012/09/03 16:07:17 matt Exp $ */ +/* $NetBSD: uvm_km.c,v 1.132 2012/09/03 17:30:04 matt Exp $ */ /* * Copyright (c) 1997 Charles D. Cranor and Washington University. @@ -152,7 +152,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: uvm_km.c,v 1.131 2012/09/03 16:07:17 matt Exp $"); +__KERNEL_RCSID(0, "$NetBSD: uvm_km.c,v 1.132 2012/09/03 17:30:04 matt Exp $"); #include "opt_uvmhist.h" @@ -782,16 +782,17 @@ again: #ifdef PMAP_GROWKERNEL /* - * Since we just set kernel_map, the check in uvm_map_prepare to grow the - * kernel's VA space never happened so we must do it here. If the kernel - * pmap can't map the requested space, then allocate more resources for it. + * These VA allocations happen independently of uvm_map so if this allocation + * extends beyond the current limit, then allocate more resources for it. */ + mutex_enter(&kernel_map->misc_lock); if (uvm_maxkaddr < va + size) { uvm_maxkaddr = pmap_growkernel(va + size); - if (uvm_maxkaddr < va + size) - panic("%s: pmap_growkernel(%#"PRIxVADDR") failed", - __func__, (vaddr_t) (va + size)); + KASSERTMSG(uvm_maxkaddr >= va + size, + "%#"PRIxVADDR" %#"PRIxPTR" %#zx", + uvm_maxkaddr, va, size); } + mutex_exit(&kernel_map->misc_lock); #endif loopva = va; Index: src/sys/uvm/uvm_map.c diff -u src/sys/uvm/uvm_map.c:1.319 src/sys/uvm/uvm_map.c:1.320 --- src/sys/uvm/uvm_map.c:1.319 Sat Aug 18 14:28:04 2012 +++ src/sys/uvm/uvm_map.c Mon Sep 3 17:30:04 2012 @@ -1,4 +1,4 @@ -/* $NetBSD: uvm_map.c,v 1.319 2012/08/18 14:28:04 chs Exp $ */ +/* $NetBSD: uvm_map.c,v 1.320 2012/09/03 17:30:04 matt Exp $ */ /* * Copyright (c) 1997 Charles D. Cranor and Washington University. @@ -66,7 +66,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: uvm_map.c,v 1.319 2012/08/18 14:28:04 chs Exp $"); +__KERNEL_RCSID(0, "$NetBSD: uvm_map.c,v 1.320 2012/09/03 17:30:04 matt Exp $"); #include "opt_ddb.h" #include "opt_uvmhist.h" @@ -1182,8 +1182,10 @@ retry: * If the kernel pmap can't map the requested space, * then allocate more resources for it. */ + mutex_enter(&map->misc_lock); if (map == kernel_map && uvm_maxkaddr < (start + size)) uvm_maxkaddr = pmap_growkernel(start + size); + mutex_exit(&map->misc_lock); #endif UVMMAP_EVCNT_INCR(map_call);