summaryrefslogtreecommitdiffstats
path: root/arch/sparc64/kernel/winfixup.S
diff options
context:
space:
mode:
authorDavid S. Miller2006-02-10 05:20:34 +0100
committerDavid S. Miller2006-03-20 10:12:07 +0100
commited6b0b45437dcf7ef1c48b3be413bebcc84771d8 (patch)
treee52dbcebe1435f9d2957b55c100824cb7b8b1f98 /arch/sparc64/kernel/winfixup.S
parent[SPARC64]: Hypervisor TSB context switching. (diff)
downloadkernel-qcow2-linux-ed6b0b45437dcf7ef1c48b3be413bebcc84771d8.tar.gz
kernel-qcow2-linux-ed6b0b45437dcf7ef1c48b3be413bebcc84771d8.tar.xz
kernel-qcow2-linux-ed6b0b45437dcf7ef1c48b3be413bebcc84771d8.zip
[SPARC64]: SUN4V memory exception trap handlers.
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'arch/sparc64/kernel/winfixup.S')
-rw-r--r--arch/sparc64/kernel/winfixup.S26
1 files changed, 20 insertions, 6 deletions
diff --git a/arch/sparc64/kernel/winfixup.S b/arch/sparc64/kernel/winfixup.S
index efe2770e8f5d..aca2a98b930b 100644
--- a/arch/sparc64/kernel/winfixup.S
+++ b/arch/sparc64/kernel/winfixup.S
@@ -109,16 +109,23 @@ winfix_mna:
done
fill_fixup_mna:
- TRAP_LOAD_THREAD_REG(%g6, %g1)
rdpr %tstate, %g1
and %g1, TSTATE_CWP, %g1
wrpr %g1, %cwp
ba,pt %xcc, etrap
rd %pc, %g7
- mov %l4, %o2
- mov %l5, %o1
- call mem_address_unaligned
+ sethi %hi(tlb_type), %g1
+ mov %l4, %o1
+ lduw [%g1 + %lo(tlb_type)], %g1
+ mov %l5, %o2
+ cmp %g1, 3
+ bne,pt %icc, 1f
add %sp, PTREGS_OFF, %o0
+ call sun4v_mna
+ nop
+ ba,a,pt %xcc, rtrap_clr_l6
+1: call mem_address_unaligned
+ nop
ba,a,pt %xcc, rtrap_clr_l6
winfix_dax:
@@ -128,14 +135,21 @@ winfix_dax:
done
fill_fixup_dax:
- TRAP_LOAD_THREAD_REG(%g6, %g1)
rdpr %tstate, %g1
and %g1, TSTATE_CWP, %g1
wrpr %g1, %cwp
ba,pt %xcc, etrap
rd %pc, %g7
+ sethi %hi(tlb_type), %g1
mov %l4, %o1
+ lduw [%g1 + %lo(tlb_type)], %g1
mov %l5, %o2
- call spitfire_data_access_exception
+ cmp %g1, 3
+ bne,pt %icc, 1f
add %sp, PTREGS_OFF, %o0
+ call sun4v_data_access_exception
+ nop
+ ba,a,pt %xcc, rtrap_clr_l6
+1: call spitfire_data_access_exception
+ nop
ba,a,pt %xcc, rtrap_clr_l6