Module Name: src
Committed By: matt
Date: Tue May 4 17:14:17 UTC 2010
Modified Files:
src/sys/arch/mips/mips [matt-nb5-mips64]: pmap_tlb.c
Log Message:
Make sure to deactivate ASIDs on pmap destruction even on UP kernels.
To generate a diff of this commit:
cvs rdiff -u -r1.1.2.10 -r1.1.2.11 src/sys/arch/mips/mips/pmap_tlb.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/mips/mips/pmap_tlb.c
diff -u src/sys/arch/mips/mips/pmap_tlb.c:1.1.2.10 src/sys/arch/mips/mips/pmap_tlb.c:1.1.2.11
--- src/sys/arch/mips/mips/pmap_tlb.c:1.1.2.10 Thu Mar 11 08:19:01 2010
+++ src/sys/arch/mips/mips/pmap_tlb.c Tue May 4 17:14:17 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: pmap_tlb.c,v 1.1.2.10 2010/03/11 08:19:01 matt Exp $ */
+/* $NetBSD: pmap_tlb.c,v 1.1.2.11 2010/05/04 17:14:17 matt Exp $ */
/*-
* Copyright (c) 2010 The NetBSD Foundation, Inc.
@@ -31,7 +31,7 @@
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: pmap_tlb.c,v 1.1.2.10 2010/03/11 08:19:01 matt Exp $");
+__KERNEL_RCSID(0, "$NetBSD: pmap_tlb.c,v 1.1.2.11 2010/05/04 17:14:17 matt Exp $");
/*
* Manages address spaces in a TLB.
@@ -797,14 +797,16 @@
TLBINFO_UNLOCK(ti);
atomic_and_ulong(&ci->ci_flags, ~CPUF_USERPMAP);
}
+#elif defined(DEBUG)
+ tlb_set_asid(0);
#endif
}
void
pmap_tlb_asid_release_all(struct pmap *pm)
{
-#ifdef MULTIPROCESSOR
KASSERT(pm != pmap_kernel());
+#ifdef MULTIPROCESSOR
KASSERT(pm->pm_onproc == 0);
for (u_int i = 0; pm->pm_active != 0; i++) {
KASSERT(i < pmap_ntlbs);
@@ -817,6 +819,18 @@
TLBINFO_UNLOCK(ti);
}
}
+#else
+ /*
+ * Handle the case of an UP kernel which only has, at most, one ASID.
+ * If the pmap has an ASID allocated, free it.
+ */
+ struct pmap_tlb_info * const ti = curcpu()->ci_tlb_info;
+ struct pmap_asid_info * const pai = PMAP_PAI(pm, ti);
+ TLBINFO_LOCK(ti);
+ if (pai->pai_asid) {
+ pmap_pai_reset(ti, pai, pm);
+ }
+ TLBINFO_UNLOCK(ti);
#endif /* MULTIPROCESSOR */
}