[SPARC64]: Elminate all usage of hard-coded trap globals.
[firefly-linux-kernel-4.4.55.git] / arch / sparc64 / kernel / rtrap.S
index 090dcca00d2a1aa8de184c85b7187c79f9c35cd7..5a62ec5d531cd2ef3dd23f2d3103a712ef33a8bb 100644 (file)
@@ -53,14 +53,13 @@ __handle_user_windows:
                wrpr                    %g0, RTRAP_PSTATE_IRQOFF, %pstate
                ldx                     [%g6 + TI_FLAGS], %l0
 
-1:             andcc                   %l0, (_TIF_NOTIFY_RESUME | _TIF_SIGPENDING), %g0
+1:             andcc                   %l0, (_TIF_SIGPENDING | _TIF_RESTORE_SIGMASK), %g0
                be,pt                   %xcc, __handle_user_windows_continue
                 nop
-               clr                     %o0
-               mov                     %l5, %o2
-               mov                     %l6, %o3
-               add                     %sp, PTREGS_OFF, %o1
-               mov                     %l0, %o4
+               mov                     %l5, %o1
+               mov                     %l6, %o2
+               add                     %sp, PTREGS_OFF, %o0
+               mov                     %l0, %o3
 
                call                    do_notify_resume
                 wrpr                   %g0, RTRAP_PSTATE, %pstate
@@ -96,15 +95,14 @@ __handle_perfctrs:
                 wrpr                   %g0, RTRAP_PSTATE, %pstate
                wrpr                    %g0, RTRAP_PSTATE_IRQOFF, %pstate
                ldx                     [%g6 + TI_FLAGS], %l0
-1:             andcc                   %l0, (_TIF_NOTIFY_RESUME | _TIF_SIGPENDING), %g0
+1:             andcc                   %l0, (_TIF_SIGPENDING | _TIF_RESTORE_SIGMASK), %g0
 
                be,pt                   %xcc, __handle_perfctrs_continue
                 sethi                  %hi(TSTATE_PEF), %o0
-               clr                     %o0
-               mov                     %l5, %o2
-               mov                     %l6, %o3
-               add                     %sp, PTREGS_OFF, %o1
-               mov                     %l0, %o4
+               mov                     %l5, %o1
+               mov                     %l6, %o2
+               add                     %sp, PTREGS_OFF, %o0
+               mov                     %l0, %o3
                call                    do_notify_resume
 
                 wrpr                   %g0, RTRAP_PSTATE, %pstate
@@ -129,11 +127,10 @@ __handle_userfpu:
                ba,a,pt                 %xcc, __handle_userfpu_continue
 
 __handle_signal:
-               clr                     %o0
-               mov                     %l5, %o2
-               mov                     %l6, %o3
-               add                     %sp, PTREGS_OFF, %o1
-               mov                     %l0, %o4
+               mov                     %l5, %o1
+               mov                     %l6, %o2
+               add                     %sp, PTREGS_OFF, %o0
+               mov                     %l0, %o3
                call                    do_notify_resume
                 wrpr                   %g0, RTRAP_PSTATE, %pstate
                wrpr                    %g0, RTRAP_PSTATE_IRQOFF, %pstate
@@ -200,7 +197,7 @@ __handle_preemption_continue:
                 andcc                  %l1, %o0, %g0
                andcc                   %l0, _TIF_NEED_RESCHED, %g0
                bne,pn                  %xcc, __handle_preemption
-                andcc                  %l0, (_TIF_NOTIFY_RESUME | _TIF_SIGPENDING), %g0
+                andcc                  %l0, (_TIF_SIGPENDING | _TIF_RESTORE_SIGMASK), %g0
                bne,pn                  %xcc, __handle_signal
 __handle_signal_continue:
                 ldub                   [%g6 + TI_WSAVED], %o2
@@ -226,10 +223,12 @@ rt_continue:      ldx                     [%sp + PTREGS_OFF + PT_V9_G1], %g1
                ldx                     [%sp + PTREGS_OFF + PT_V9_G3], %g3
                ldx                     [%sp + PTREGS_OFF + PT_V9_G4], %g4
                ldx                     [%sp + PTREGS_OFF + PT_V9_G5], %g5
-               mov                     TSB_REG, %g6
-               brnz,a,pn               %l3, 1f
-                ldxa                   [%g6] ASI_IMMU, %g5
-1:             ldx                     [%sp + PTREGS_OFF + PT_V9_G6], %g6
+               brz,pt                  %l3, 1f
+                nop
+               /* Must do this before thread reg is clobbered below.  */
+               LOAD_PER_CPU_BASE(%g6, %g7)
+1:
+               ldx                     [%sp + PTREGS_OFF + PT_V9_G6], %g6
                ldx                     [%sp + PTREGS_OFF + PT_V9_G7], %g7
                wrpr                    %g0, RTRAP_PSTATE_AG_IRQOFF, %pstate
                ldx                     [%sp + PTREGS_OFF + PT_V9_I0], %i0