From a7b31bac691668a60da8b9892124b7da408e0a0e Mon Sep 17 00:00:00 2001
From: "David S. Miller" <davem@sunset.davemloft.net>
Date: Wed, 15 Feb 2006 21:16:42 -0800
Subject: [PATCH] [SPARC64]: Do not write garbage into %pstate in
 tsb_context_switch().

For SUN4V, we were clobbering %o5 to do the hypervisor call.
This clobbers the saved %pstate value and we end up writing
garbage into that register as a result.  Oops.

Signed-off-by: David S. Miller <davem@davemloft.net>
---
 arch/sparc64/kernel/tsb.S | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/arch/sparc64/kernel/tsb.S b/arch/sparc64/kernel/tsb.S
index be8f0892d72..7996c9d6670 100644
--- a/arch/sparc64/kernel/tsb.S
+++ b/arch/sparc64/kernel/tsb.S
@@ -265,13 +265,19 @@ __tsb_context_switch:
 	mov	SCRATCHPAD_UTSBREG2, %g1
 	stxa	%g2, [%g1] ASI_SCRATCHPAD
 
+	/* Save away %o5's %pstate, we have to use %o5 for
+	 * the hypervisor call.
+	 */
+	mov	%o5, %g1
+
 	mov	HV_FAST_MMU_TSB_CTXNON0, %o5
 	mov	1, %o0
 	mov	%o4, %o1
 	ta	HV_FAST_TRAP
 
+	/* Finish up and restore %o5.  */
 	ba,pt	%xcc, 9f
-	 nop
+	 mov	%g1, %o5
 
 	/* SUN4U TSB switch.  */
 1:	mov	TSB_REG, %g1
-- 
2.20.1