Module Name: src
Committed By: mrg
Date: Sun Mar 18 23:48:00 UTC 2012
Modified Files:
src/sys/arch/sparc64/sparc64: pmap.c
Log Message:
take the pmap_lock in pmap_protect().
hopefully this will avoid a problem in pmap_clear_reference()
detecting a reference remaining at the end.
when we remove most/all pmap_lock uses we probably need to remove
this check entirely, but for now this seems better.
To generate a diff of this commit:
cvs rdiff -u -r1.276 -r1.277 src/sys/arch/sparc64/sparc64/pmap.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/arch/sparc64/sparc64/pmap.c
diff -u src/sys/arch/sparc64/sparc64/pmap.c:1.276 src/sys/arch/sparc64/sparc64/pmap.c:1.277
--- src/sys/arch/sparc64/sparc64/pmap.c:1.276 Mon Feb 6 10:40:26 2012
+++ src/sys/arch/sparc64/sparc64/pmap.c Sun Mar 18 23:48:00 2012
@@ -1,4 +1,4 @@
-/* $NetBSD: pmap.c,v 1.276 2012/02/06 10:40:26 martin Exp $ */
+/* $NetBSD: pmap.c,v 1.277 2012/03/18 23:48:00 mrg Exp $ */
/*
*
* Copyright (C) 1996-1999 Eduardo Horvath.
@@ -26,7 +26,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.276 2012/02/06 10:40:26 martin Exp $");
+__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.277 2012/03/18 23:48:00 mrg Exp $");
#undef NO_VCACHE /* Don't forget the locked TLB in dostart */
#define HWREF
@@ -2123,6 +2123,7 @@ pmap_protect(struct pmap *pm, vaddr_t sv
}
sva = trunc_page(sva);
+ mutex_enter(&pmap_lock);
for (; sva < eva; sva += PAGE_SIZE) {
#ifdef DEBUG
/*
@@ -2130,6 +2131,7 @@ pmap_protect(struct pmap *pm, vaddr_t sv
*/
if (pm == pmap_kernel() && sva >= ktext &&
sva < roundup(ekdata, 4 * MEG)) {
+ mutex_exit(&pmap_lock);
prom_printf("pmap_protect: va=%08x in locked TLB\n",
sva);
prom_abort();
@@ -2181,6 +2183,7 @@ pmap_protect(struct pmap *pm, vaddr_t sv
tlb_flush_pte(sva, pm);
}
pv_check();
+ mutex_exit(&pmap_lock);
}
/*