[SPARC64]: SUN4V memory exception trap handlers.
[deliverable/linux.git] / arch / sparc64 / kernel / winfixup.S
index efe2770e8f5d715f173b13cc8ad150546ecbfbe0..aca2a98b930b0539d3d86708b1eea15768ddf0ad 100644 (file)
@@ -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
This page took 0.03159 seconds and 5 git commands to generate.