diff options
author | David S. Miller <davem@davemloft.net> | 2006-01-31 21:33:00 -0500 |
---|---|---|
committer | David S. Miller <davem@sunset.davemloft.net> | 2006-03-20 04:11:22 -0500 |
commit | 4da808c352c290d3f762933d44d4ab90c2fd65f3 (patch) | |
tree | da99326440777580a19c345a5b0d52fbf800042b /arch/sparc64/kernel | |
parent | 4753eb2ac7022b999e5e484f1a5dc001dba22bd3 (diff) |
[SPARC64]: Fix bogus flush instruction usage.
Some of the trap code was still assuming that alternate
global %g6 was hard coded with current_thread_info().
Let's just consistently flush at KERNBASE when we need
a pipeline synchronization. That's locked into the TLB
and will always work.
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'arch/sparc64/kernel')
-rw-r--r-- | arch/sparc64/kernel/etrap.S | 6 | ||||
-rw-r--r-- | arch/sparc64/kernel/rtrap.S | 3 | ||||
-rw-r--r-- | arch/sparc64/kernel/winfixup.S | 3 |
3 files changed, 8 insertions, 4 deletions
diff --git a/arch/sparc64/kernel/etrap.S b/arch/sparc64/kernel/etrap.S index 8b3b6d720ed5..db7681017299 100644 --- a/arch/sparc64/kernel/etrap.S +++ b/arch/sparc64/kernel/etrap.S | |||
@@ -72,7 +72,8 @@ etrap_irq: | |||
72 | sethi %hi(sparc64_kern_pri_context), %g2 | 72 | sethi %hi(sparc64_kern_pri_context), %g2 |
73 | ldx [%g2 + %lo(sparc64_kern_pri_context)], %g3 | 73 | ldx [%g2 + %lo(sparc64_kern_pri_context)], %g3 |
74 | stxa %g3, [%l4] ASI_DMMU | 74 | stxa %g3, [%l4] ASI_DMMU |
75 | flush %l6 | 75 | sethi %hi(KERNBASE), %l4 |
76 | flush %l4 | ||
76 | wr %g0, ASI_AIUS, %asi | 77 | wr %g0, ASI_AIUS, %asi |
77 | 2: wrpr %g0, 0x0, %tl | 78 | 2: wrpr %g0, 0x0, %tl |
78 | mov %g4, %l4 | 79 | mov %g4, %l4 |
@@ -215,7 +216,8 @@ scetrap: | |||
215 | sethi %hi(sparc64_kern_pri_context), %g2 | 216 | sethi %hi(sparc64_kern_pri_context), %g2 |
216 | ldx [%g2 + %lo(sparc64_kern_pri_context)], %g3 | 217 | ldx [%g2 + %lo(sparc64_kern_pri_context)], %g3 |
217 | stxa %g3, [%l4] ASI_DMMU | 218 | stxa %g3, [%l4] ASI_DMMU |
218 | flush %l6 | 219 | sethi %hi(KERNBASE), %l4 |
220 | flush %l4 | ||
219 | 221 | ||
220 | mov ASI_AIUS, %l7 | 222 | mov ASI_AIUS, %l7 |
221 | 2: mov %g4, %l4 | 223 | 2: mov %g4, %l4 |
diff --git a/arch/sparc64/kernel/rtrap.S b/arch/sparc64/kernel/rtrap.S index 5a62ec5d531c..89794ebdcbcf 100644 --- a/arch/sparc64/kernel/rtrap.S +++ b/arch/sparc64/kernel/rtrap.S | |||
@@ -259,7 +259,8 @@ rt_continue: ldx [%sp + PTREGS_OFF + PT_V9_G1], %g1 | |||
259 | ldx [%l1 + %lo(sparc64_kern_pri_nuc_bits)], %l1 | 259 | ldx [%l1 + %lo(sparc64_kern_pri_nuc_bits)], %l1 |
260 | or %l0, %l1, %l0 | 260 | or %l0, %l1, %l0 |
261 | stxa %l0, [%l7] ASI_DMMU | 261 | stxa %l0, [%l7] ASI_DMMU |
262 | flush %g6 | 262 | sethi %hi(KERNBASE), %l7 |
263 | flush %l7 | ||
263 | rdpr %wstate, %l1 | 264 | rdpr %wstate, %l1 |
264 | rdpr %otherwin, %l2 | 265 | rdpr %otherwin, %l2 |
265 | srl %l1, 3, %l1 | 266 | srl %l1, 3, %l1 |
diff --git a/arch/sparc64/kernel/winfixup.S b/arch/sparc64/kernel/winfixup.S index de588036df43..c0545d089c96 100644 --- a/arch/sparc64/kernel/winfixup.S +++ b/arch/sparc64/kernel/winfixup.S | |||
@@ -20,7 +20,8 @@ set_pcontext: | |||
20 | ldx [%l1 + %lo(sparc64_kern_pri_context)], %l1 | 20 | ldx [%l1 + %lo(sparc64_kern_pri_context)], %l1 |
21 | mov PRIMARY_CONTEXT, %g1 | 21 | mov PRIMARY_CONTEXT, %g1 |
22 | stxa %l1, [%g1] ASI_DMMU | 22 | stxa %l1, [%g1] ASI_DMMU |
23 | flush %g6 | 23 | sethi %hi(KERNBASE), %l1 |
24 | flush %l1 | ||
24 | retl | 25 | retl |
25 | nop | 26 | nop |
26 | 27 | ||