summaryrefslogtreecommitdiff
path: root/arch/sparc64/kernel/ktlb.S
diff options
context:
space:
mode:
authorDavid S. Miller <davem@sunset.davemloft.net>2006-02-05 22:27:28 -0800
committerDavid S. Miller <davem@sunset.davemloft.net>2006-03-20 01:11:50 -0800
commit45fec05f805a113372c9a7ff4c653ac749f6921c (patch)
tree36fc99d10656775acb8e9442719447d64ac30a03 /arch/sparc64/kernel/ktlb.S
parent314981ac7177a933319e3c071a5cf0a579205e6e (diff)
downloadlwn-45fec05f805a113372c9a7ff4c653ac749f6921c.tar.gz
lwn-45fec05f805a113372c9a7ff4c653ac749f6921c.zip
[SPARC64]: Sanitize %pstate writes for sun4v.
If we're just switching between different alternate global sets, nop it out on sun4v. Also, get rid of all of the alternate global save/restore in the OBP CIF trampoline code. Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'arch/sparc64/kernel/ktlb.S')
-rw-r--r--arch/sparc64/kernel/ktlb.S18
1 files changed, 16 insertions, 2 deletions
diff --git a/arch/sparc64/kernel/ktlb.S b/arch/sparc64/kernel/ktlb.S
index 9b415ab6db6b..c1335432124e 100644
--- a/arch/sparc64/kernel/ktlb.S
+++ b/arch/sparc64/kernel/ktlb.S
@@ -60,8 +60,15 @@ kvmap_itlb_load:
retry
kvmap_itlb_longpath:
- rdpr %pstate, %g5
+
+661: rdpr %pstate, %g5
wrpr %g5, PSTATE_AG | PSTATE_MG, %pstate
+ .section .gl_2insn_patch, "ax"
+ .word 661b
+ nop
+ nop
+ .previous
+
rdpr %tpc, %g5
ba,pt %xcc, sparc64_realfault_common
mov FAULT_CODE_ITLB, %g4
@@ -161,8 +168,15 @@ kvmap_check_obp:
nop
kvmap_dtlb_longpath:
- rdpr %pstate, %g5
+
+661: rdpr %pstate, %g5
wrpr %g5, PSTATE_AG | PSTATE_MG, %pstate
+ .section .gl_2insn_patch, "ax"
+ .word 661b
+ nop
+ nop
+ .previous
+
rdpr %tl, %g4
cmp %g4, 1
mov TLB_TAG_ACCESS, %g4