Module Name: src
Committed By: mrg
Date: Mon Feb 1 06:26:15 UTC 2010
Modified Files:
src/sys/arch/sparc64/include: ctlreg.h
src/sys/arch/sparc64/sparc64: locore.s
Log Message:
for USIII, use the new "tlb demap all" operation in sp_tlb_flush_all()
To generate a diff of this commit:
cvs rdiff -u -r1.48 -r1.49 src/sys/arch/sparc64/include/ctlreg.h
cvs rdiff -u -r1.306 -r1.307 src/sys/arch/sparc64/sparc64/locore.s
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/include/ctlreg.h
diff -u src/sys/arch/sparc64/include/ctlreg.h:1.48 src/sys/arch/sparc64/include/ctlreg.h:1.49
--- src/sys/arch/sparc64/include/ctlreg.h:1.48 Sat Dec 5 08:00:18 2009
+++ src/sys/arch/sparc64/include/ctlreg.h Mon Feb 1 06:26:15 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: ctlreg.h,v 1.48 2009/12/05 08:00:18 nakayama Exp $ */
+/* $NetBSD: ctlreg.h,v 1.49 2010/02/01 06:26:15 mrg Exp $ */
/*
* Copyright (c) 1996-2002 Eduardo Horvath
@@ -362,6 +362,7 @@
#define DEMAP_CTX_NUCLEUS ((0x06)<<4) /* Demap all of kernel CTXT */
#define DEMAP_CTX_PRIMARY ((0x04)<<4) /* Demap all of primary CTXT */
#define DEMAP_CTX_SECONDARY ((0x05)<<4) /* Demap all of secondary CTXT */
+#define DEMAP_ALL ((0x08)<<4) /* Demap all non-locked TLB entries [USIII] */
/*
* Interrupt registers. This really gets hairy.
Index: src/sys/arch/sparc64/sparc64/locore.s
diff -u src/sys/arch/sparc64/sparc64/locore.s:1.306 src/sys/arch/sparc64/sparc64/locore.s:1.307
--- src/sys/arch/sparc64/sparc64/locore.s:1.306 Mon Feb 1 03:43:27 2010
+++ src/sys/arch/sparc64/sparc64/locore.s Mon Feb 1 06:26:15 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: locore.s,v 1.306 2010/02/01 03:43:27 mrg Exp $ */
+/* $NetBSD: locore.s,v 1.307 2010/02/01 06:26:15 mrg Exp $ */
/*
* Copyright (c) 1996-2002 Eduardo Horvath
@@ -5322,82 +5322,25 @@
retl
wrpr %o3, %pstate
#else
- ! XXX bump up %tl around this call always
- rdpr %tl, %o4
- inc %o4
- wrpr %o4, 0, %tl
-
+ rdpr %tl, %o5
+ brnz,pt %o5, 1f
+ set DEMAP_ALL, %o2
+ wrpr 1, %tl
+1:
rdpr %pstate, %o3
andn %o3, PSTATE_IE, %o4 ! disable interrupts
wrpr %o4, 0, %pstate
- set (63 * 8), %o0 ! last TLB entry
- set CTX_PRIMARY, %o4
- ldxa [%o4] ASI_DMMU, %o4 ! save secondary context
- set CTX_MASK, %o5
- membar #Sync
- ! %o0 = loop counter
- ! %o1 = ctx value
- ! %o2 = TLB tag value
- ! %o3 = saved %pstate
- ! %o4 = saved primary ctx
- ! %o5 = CTX_MASK
- ! %xx = saved %tl
+ stxa %o2, [%o2] ASI_IMMU_DEMAP
+ stxa %o2, [%o2] ASI_DMMU_DEMAP
-0:
- ldxa [%o0] ASI_DMMU_TLB_TAG, %o2 ! fetch the TLB tag
- andcc %o2, %o5, %o1 ! context 0?
- bz,pt %xcc, 1f ! if so, skip
- mov CTX_PRIMARY, %o2
-
- stxa %o1, [%o2] ASI_DMMU ! set the context
- set DEMAP_CTX_PRIMARY, %o2
- membar #Sync
- stxa %o2, [%o2] ASI_DMMU_DEMAP ! do the demap
- membar #Sync
-
-1:
- dec 8, %o0
- brgz,pt %o0, 0b ! loop over all entries
- nop
-
-/*
- * now do the IMMU
- */
-
- set (63 * 8), %o0 ! last TLB entry
-
-0:
- ldxa [%o0] ASI_IMMU_TLB_TAG, %o2 ! fetch the TLB tag
- andcc %o2, %o5, %o1 ! context 0?
- bz,pt %xcc, 1f ! if so, skip
- mov CTX_PRIMARY, %o2
-
- stxa %o1, [%o2] ASI_DMMU ! set the context
- set DEMAP_CTX_PRIMARY, %o2
- membar #Sync
- stxa %o2, [%o2] ASI_IMMU_DEMAP ! do the demap
- membar #Sync
-
-1:
- dec 8, %o0
- brgz,pt %o0, 0b ! loop over all entries
- nop
-
- set CTX_PRIMARY, %o2
- stxa %o4, [%o2] ASI_DMMU ! restore secondary ctx
sethi %hi(KERNBASE), %o4
membar #Sync
flush %o4
- ! XXX bump up %tl around this call always
- rdpr %tl, %o4
- dec %o4
- wrpr %o4, 0, %tl
-
+ wrpr %o5, %tl
retl
wrpr %o3, %pstate
-
#endif
/*