[SPARC64]: Fix too early reference to %g6
authorDavid S. Miller <davem@davemloft.net>
Wed, 1 Feb 2006 02:34:21 +0000 (18:34 -0800)
committerDavid S. Miller <davem@sunset.davemloft.net>
Mon, 20 Mar 2006 09:11:27 +0000 (01:11 -0800)
%g6 is not necessarily set to current_thread_info()
at sparc64_realfault_common.  So store the fault
code and address after we invoke etrap and %g6 is
properly set up.

Signed-off-by: David S. Miller <davem@davemloft.net>
arch/sparc64/kernel/tsb.S

index c4e7740d5e82e44c8f86de4ae04b3fc84f35f0fa..e1dd37f5e53515d4b73fc785efda36aea342448a 100644 (file)
@@ -110,10 +110,13 @@ tsb_do_itlb_fault:
 
        .globl  sparc64_realfault_common
 sparc64_realfault_common:
-       stb     %g4, [%g6 + TI_FAULT_CODE]      ! Save fault code
-       stx     %g5, [%g6 + TI_FAULT_ADDR]      ! Save fault address
+       /* fault code in %g4, fault address in %g5, etrap will
+        * preserve these two values in %l4 and %l5 respectively
+        */
        ba,pt   %xcc, etrap                     ! Save trap state
 1:      rd     %pc, %g7                        ! ...
+       stb     %l4, [%g6 + TI_FAULT_CODE]      ! Save fault code
+       stx     %l5, [%g6 + TI_FAULT_ADDR]      ! Save fault address
        call    do_sparc64_fault                ! Call fault handler
         add    %sp, PTREGS_OFF, %o0            ! Compute pt_regs arg
        ba,pt   %xcc, rtrap_clr_l6              ! Restore cpu state