diff options
author | David S. Miller <davem@sunset.davemloft.net> | 2006-02-16 06:16:42 +0100 |
---|---|---|
committer | David S. Miller <davem@sunset.davemloft.net> | 2006-03-20 10:13:08 +0100 |
commit | a7b31bac691668a60da8b9892124b7da408e0a0e (patch) | |
tree | 2bdf523086234a5cb9e943e45df879f1f264a516 /arch/sparc64/kernel/tsb.S | |
parent | [SPARC64]: Fix flush_tsb_user() on SUN4V. (diff) | |
download | linux-a7b31bac691668a60da8b9892124b7da408e0a0e.tar.xz linux-a7b31bac691668a60da8b9892124b7da408e0a0e.zip |
[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>
Diffstat (limited to 'arch/sparc64/kernel/tsb.S')
-rw-r--r-- | arch/sparc64/kernel/tsb.S | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/arch/sparc64/kernel/tsb.S b/arch/sparc64/kernel/tsb.S index be8f0892d721..7996c9d66702 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 |