[SPARC64]: %l6 trap return handling no longer necessary.
authorDavid S. Miller <davem@davemloft.net>
Thu, 24 Apr 2008 10:15:22 +0000 (03:15 -0700)
committerDavid S. Miller <davem@davemloft.net>
Thu, 24 Apr 2008 10:15:22 +0000 (03:15 -0700)
Now that we indicate the "restart system call" in the
trap type field of pt_regs->magic, we don't need to
set the %l6 boolean in all of the trap return paths.

And we therefore don't need to pass it to do_notify_resume().

Signed-off-by: David S. Miller <davem@davemloft.net>
arch/sparc64/kernel/entry.S
arch/sparc64/kernel/entry.h
arch/sparc64/kernel/rtrap.S
arch/sparc64/kernel/signal.c
arch/sparc64/kernel/sun4v_tlb_miss.S
arch/sparc64/kernel/tsb.S
arch/sparc64/kernel/winfixup.S
arch/sparc64/mm/ultra.S
include/asm-sparc64/ttable.h

index f54cd2d..fd06e93 100644 (file)
@@ -47,7 +47,7 @@ do_fpdis:
        ba,pt           %xcc, etrap
 109:    or             %g7, %lo(109b), %g7
        add             %g0, %g0, %g0
-       ba,a,pt         %xcc, rtrap_clr_l6
+       ba,a,pt         %xcc, rtrap
 
 1:     TRAP_LOAD_THREAD_REG(%g6, %g1)
        ldub            [%g6 + TI_FPSAVED], %g5
@@ -226,7 +226,7 @@ fp_other_bounce:
        call            do_fpother
         add            %sp, PTREGS_OFF, %o0
        ba,pt           %xcc, rtrap
-        clr            %l6
+        nop
 
        .globl          do_fpother_check_fitos
        .align          32
@@ -489,7 +489,7 @@ utrap_trap:         /* %g3=handler,%g4=level */
         call           bad_trap
         add            %sp, PTREGS_OFF, %o0
        ba,pt           %xcc, rtrap
-        clr            %l6
+        nop
 
 invoke_utrap:
        sllx            %g3, 3, %g3
@@ -607,7 +607,7 @@ __spitfire_cee_trap_continue:
        call            spitfire_access_error
         add            %sp, PTREGS_OFF, %o0
        ba,pt           %xcc, rtrap
-        clr            %l6
+        nop
 
        /* This is the trap handler entry point for ECC correctable
         * errors.  They are corrected, but we listen for the trap
@@ -686,7 +686,7 @@ __spitfire_data_access_exception_tl1:
        call            spitfire_data_access_exception_tl1
         add            %sp, PTREGS_OFF, %o0
        ba,pt           %xcc, rtrap
-        clr            %l6
+        nop
 
 __spitfire_data_access_exception:
        rdpr            %pstate, %g4
@@ -705,7 +705,7 @@ __spitfire_data_access_exception:
        call            spitfire_data_access_exception
         add            %sp, PTREGS_OFF, %o0
        ba,pt           %xcc, rtrap
-        clr            %l6
+        nop
 
        .globl          __spitfire_insn_access_exception
        .globl          __spitfire_insn_access_exception_tl1
@@ -725,7 +725,7 @@ __spitfire_insn_access_exception_tl1:
        call            spitfire_insn_access_exception_tl1
         add            %sp, PTREGS_OFF, %o0
        ba,pt           %xcc, rtrap
-        clr            %l6
+        nop
 
 __spitfire_insn_access_exception:
        rdpr            %pstate, %g4
@@ -743,7 +743,7 @@ __spitfire_insn_access_exception:
        call            spitfire_insn_access_exception
         add            %sp, PTREGS_OFF, %o0
        ba,pt           %xcc, rtrap
-        clr            %l6
+        nop
 
        /* These get patched into the trap table at boot time
         * once we know we have a cheetah processor.
@@ -937,7 +937,7 @@ do_dcpe_tl1_fatal:
        call            cheetah_plus_parity_error
         add            %sp, PTREGS_OFF, %o1
        ba,pt           %xcc, rtrap
-        clr            %l6
+        nop
 
 do_icpe_tl1:
        rdpr            %tl, %g1                ! Save original trap level
@@ -979,7 +979,7 @@ do_icpe_tl1_fatal:
        call            cheetah_plus_parity_error
         add            %sp, PTREGS_OFF, %o1
        ba,pt           %xcc, rtrap
-        clr            %l6
+        nop
        
 dcpe_icpe_tl1_common:
        /* Flush D-cache, re-enable D/I caches in DCU and finally
@@ -1281,7 +1281,7 @@ __do_privact:
        call            do_privact
         add            %sp, PTREGS_OFF, %o0
        ba,pt           %xcc, rtrap
-        clr            %l6
+        nop
 
        .globl          do_mna
 do_mna:
@@ -1308,7 +1308,7 @@ do_mna:
        call            mem_address_unaligned
         add            %sp, PTREGS_OFF, %o0
        ba,pt           %xcc, rtrap
-        clr            %l6
+        nop
 
        .globl          do_lddfmna
 do_lddfmna:
@@ -1326,7 +1326,7 @@ do_lddfmna:
        call            handle_lddfmna
         add            %sp, PTREGS_OFF, %o0
        ba,pt           %xcc, rtrap
-        clr            %l6
+        nop
 
        .globl          do_stdfmna
 do_stdfmna:
@@ -1344,7 +1344,7 @@ do_stdfmna:
        call            handle_stdfmna
         add            %sp, PTREGS_OFF, %o0
        ba,pt           %xcc, rtrap
-        clr            %l6
+        nop
 
        .globl  breakpoint_trap
 breakpoint_trap:
@@ -1424,13 +1424,13 @@ sys32_rt_sigreturn:
 1:             ldx             [%curptr + TI_FLAGS], %l5
                andcc           %l5, (_TIF_SYSCALL_TRACE|_TIF_SECCOMP|_TIF_SYSCALL_AUDIT), %g0
                be,pt           %icc, rtrap
-                clr            %l6
+                nop
                add             %sp, PTREGS_OFF, %o0
                call            syscall_trace
                 mov            1, %o1
 
                ba,pt           %xcc, rtrap
-                clr            %l6
+                nop
 
        /* This is how fork() was meant to be done, 8 instruction entry.
         *
@@ -1605,7 +1605,7 @@ ret_sys_call:
        bne,pn          %icc, linux_syscall_trace2
         add            %l1, 0x4, %l2                   ! npc = npc+4
        stx             %l1, [%sp + PTREGS_OFF + PT_V9_TPC]
-       ba,pt           %xcc, rtrap_clr_l6
+       ba,pt           %xcc, rtrap
         stx            %l2, [%sp + PTREGS_OFF + PT_V9_TNPC]
 
 1:
@@ -1616,7 +1616,6 @@ ret_sys_call:
        sub             %g0, %o0, %o0
        or              %g3, %g2, %g3
        stx             %o0, [%sp + PTREGS_OFF + PT_V9_I0]
-       mov             1, %l6
        stx             %g3, [%sp + PTREGS_OFF + PT_V9_TSTATE]
        bne,pn          %icc, linux_syscall_trace2
         add            %l1, 0x4, %l2                   ! npc = npc+4
index 4a91e9c..32fbab6 100644 (file)
@@ -20,7 +20,6 @@ extern void timer_interrupt(int irq, struct pt_regs *regs);
 
 extern void do_notify_resume(struct pt_regs *regs,
                             unsigned long orig_i0,
-                            int restart_syscall,
                             unsigned long thread_info_flags);
 
 extern asmlinkage void syscall_trace(struct pt_regs *regs,
index 079d18a..ecf6753 100644 (file)
 #define                RTRAP_PSTATE_IRQOFF     (PSTATE_RMO|PSTATE_PEF|PSTATE_PRIV)
 #define                RTRAP_PSTATE_AG_IRQOFF  (PSTATE_RMO|PSTATE_PEF|PSTATE_PRIV|PSTATE_AG)
 
-               /* Register %l6 keeps track of whether we are returning
-                * from a system call or not.  It is cleared if we call
-                * do_notify_resume, and it must not be otherwise modified
-                * until we fully commit to returning to userspace.
-                */
-
                .text
                .align                  32
 __handle_softirq:
@@ -56,14 +50,12 @@ __handle_user_windows:
                be,pt                   %xcc, __handle_user_windows_continue
                 nop
                mov                     %l5, %o1
-               mov                     %l6, %o2
                add                     %sp, PTREGS_OFF, %o0
-               mov                     %l0, %o3
+               mov                     %l0, %o2
 
                call                    do_notify_resume
                 wrpr                   %g0, RTRAP_PSTATE, %pstate
                wrpr                    %g0, RTRAP_PSTATE_IRQOFF, %pstate
-               clr                     %l6
                /* Signal delivery can modify pt_regs tstate, so we must
                 * reload it.
                 */
@@ -99,14 +91,12 @@ __handle_perfctrs:
                be,pt                   %xcc, __handle_perfctrs_continue
                 sethi                  %hi(TSTATE_PEF), %o0
                mov                     %l5, %o1
-               mov                     %l6, %o2
                add                     %sp, PTREGS_OFF, %o0
-               mov                     %l0, %o3
+               mov                     %l0, %o2
                call                    do_notify_resume
 
                 wrpr                   %g0, RTRAP_PSTATE, %pstate
                wrpr                    %g0, RTRAP_PSTATE_IRQOFF, %pstate
-               clr                     %l6
                /* Signal delivery can modify pt_regs tstate, so we must
                 * reload it.
                 */
@@ -127,13 +117,11 @@ __handle_userfpu:
 
 __handle_signal:
                mov                     %l5, %o1
-               mov                     %l6, %o2
                add                     %sp, PTREGS_OFF, %o0
-               mov                     %l0, %o3
+               mov                     %l0, %o2
                call                    do_notify_resume
                 wrpr                   %g0, RTRAP_PSTATE, %pstate
                wrpr                    %g0, RTRAP_PSTATE_IRQOFF, %pstate
-               clr                     %l6
 
                /* Signal delivery can modify pt_regs tstate, so we must
                 * reload it.
@@ -145,9 +133,8 @@ __handle_signal:
                 andn                   %l1, %l4, %l1
 
                .align                  64
-               .globl                  rtrap_irq, rtrap_clr_l6, rtrap, irqsz_patchme, rtrap_xcall
+               .globl                  rtrap_irq, rtrap, irqsz_patchme, rtrap_xcall
 rtrap_irq:
-rtrap_clr_l6:  clr                     %l6
 rtrap:
 #ifndef CONFIG_SMP
                sethi                   %hi(per_cpu____cpu_data), %l0
index b959597..77a3e85 100644 (file)
@@ -580,8 +580,7 @@ static void do_signal(struct pt_regs *regs, unsigned long orig_i0)
        }
 }
 
-void do_notify_resume(struct pt_regs *regs, unsigned long orig_i0, int restart_syscall,
-                     unsigned long thread_info_flags)
+void do_notify_resume(struct pt_regs *regs, unsigned long orig_i0, unsigned long thread_info_flags)
 {
        if (thread_info_flags & (_TIF_SIGPENDING | _TIF_RESTORE_SIGMASK))
                do_signal(regs, orig_i0);
index fd94305..e1fbf8c 100644 (file)
@@ -262,7 +262,7 @@ sun4v_iacc:
        mov     %l5, %o2
        call    sun4v_insn_access_exception
         add    %sp, PTREGS_OFF, %o0
-       ba,a,pt %xcc, rtrap_clr_l6
+       ba,a,pt %xcc, rtrap
 
        /* Instruction Access Exception, tl1. */
 sun4v_iacc_tl1:
@@ -278,7 +278,7 @@ sun4v_iacc_tl1:
        mov     %l5, %o2
        call    sun4v_insn_access_exception_tl1
         add    %sp, PTREGS_OFF, %o0
-       ba,a,pt %xcc, rtrap_clr_l6
+       ba,a,pt %xcc, rtrap
 
        /* Data Access Exception, tl0. */
 sun4v_dacc:
@@ -294,7 +294,7 @@ sun4v_dacc:
        mov     %l5, %o2
        call    sun4v_data_access_exception
         add    %sp, PTREGS_OFF, %o0
-       ba,a,pt %xcc, rtrap_clr_l6
+       ba,a,pt %xcc, rtrap
 
        /* Data Access Exception, tl1. */
 sun4v_dacc_tl1:
@@ -310,7 +310,7 @@ sun4v_dacc_tl1:
        mov     %l5, %o2
        call    sun4v_data_access_exception_tl1
         add    %sp, PTREGS_OFF, %o0
-       ba,a,pt %xcc, rtrap_clr_l6
+       ba,a,pt %xcc, rtrap
 
        /* Memory Address Unaligned.  */
 sun4v_mna:
@@ -344,7 +344,7 @@ sun4v_mna:
        mov     %l5, %o2
        call    sun4v_do_mna
         add    %sp, PTREGS_OFF, %o0
-       ba,a,pt %xcc, rtrap_clr_l6
+       ba,a,pt %xcc, rtrap
 
        /* Privileged Action.  */
 sun4v_privact:
@@ -352,7 +352,7 @@ sun4v_privact:
         rd     %pc, %g7
        call    do_privact
         add    %sp, PTREGS_OFF, %o0
-       ba,a,pt %xcc, rtrap_clr_l6
+       ba,a,pt %xcc, rtrap
 
        /* Unaligned ldd float, tl0. */
 sun4v_lddfmna:
@@ -368,7 +368,7 @@ sun4v_lddfmna:
        mov     %l5, %o2
        call    handle_lddfmna
         add    %sp, PTREGS_OFF, %o0
-       ba,a,pt %xcc, rtrap_clr_l6
+       ba,a,pt %xcc, rtrap
 
        /* Unaligned std float, tl0. */
 sun4v_stdfmna:
@@ -384,7 +384,7 @@ sun4v_stdfmna:
        mov     %l5, %o2
        call    handle_stdfmna
         add    %sp, PTREGS_OFF, %o0
-       ba,a,pt %xcc, rtrap_clr_l6
+       ba,a,pt %xcc, rtrap
 
 #define BRANCH_ALWAYS  0x10680000
 #define NOP            0x01000000
index 10adb2f..c499214 100644 (file)
@@ -275,7 +275,7 @@ sparc64_realfault_common:
        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
+       ba,pt   %xcc, rtrap                     ! Restore cpu state
         nop                                    ! Delay slot (fill me)
 
 winfix_trampoline:
index c4aa110..a6b0863 100644 (file)
@@ -32,7 +32,7 @@ fill_fixup:
         rd     %pc, %g7
        call    do_sparc64_fault
         add    %sp, PTREGS_OFF, %o0
-       ba,pt   %xcc, rtrap_clr_l6
+       ba,pt   %xcc, rtrap
         nop
 
        /* Be very careful about usage of the trap globals here.
@@ -100,7 +100,7 @@ spill_fixup_dax:
         rd     %pc, %g7
        call    do_sparc64_fault
         add    %sp, PTREGS_OFF, %o0
-       ba,a,pt %xcc, rtrap_clr_l6
+       ba,a,pt %xcc, rtrap
 
 winfix_mna:
        andn    %g3, 0x7f, %g3
@@ -122,12 +122,12 @@ fill_fixup_mna:
        mov     %l4, %o2
        call    sun4v_do_mna
         mov    %l5, %o1
-       ba,a,pt %xcc, rtrap_clr_l6
+       ba,a,pt %xcc, rtrap
 1:     mov     %l4, %o1
        mov     %l5, %o2
        call    mem_address_unaligned
         nop
-       ba,a,pt %xcc, rtrap_clr_l6
+       ba,a,pt %xcc, rtrap
 
 winfix_dax:
        andn    %g3, 0x7f, %g3
@@ -150,7 +150,7 @@ fill_fixup_dax:
         add    %sp, PTREGS_OFF, %o0
        call    sun4v_data_access_exception
         nop
-       ba,a,pt %xcc, rtrap_clr_l6
+       ba,a,pt %xcc, rtrap
 1:     call    spitfire_data_access_exception
         nop
-       ba,a,pt %xcc, rtrap_clr_l6
+       ba,a,pt %xcc, rtrap
index 2865c10..e686a67 100644 (file)
@@ -476,7 +476,6 @@ xcall_sync_tick:
 #endif
        call            smp_synchronize_tick_client
         nop
-       clr             %l6
        b               rtrap_xcall
         ldx            [%sp + PTREGS_OFF + PT_V9_TSTATE], %l1
 
@@ -511,7 +510,6 @@ xcall_report_regs:
 #endif
        call            __show_regs
         add            %sp, PTREGS_OFF, %o0
-       clr             %l6
        /* Has to be a non-v9 branch due to the large distance. */
        b               rtrap_xcall
         ldx            [%sp + PTREGS_OFF + PT_V9_TSTATE], %l1
@@ -576,7 +574,7 @@ __hypervisor_tlb_xcall_error:
        mov     %l4, %o0
        call    hypervisor_tlbop_error_xcall
         mov    %l5, %o1
-       ba,a,pt %xcc, rtrap_clr_l6
+       ba,a,pt %xcc, rtrap
 
        .globl          __hypervisor_xcall_flush_tlb_mm
 __hypervisor_xcall_flush_tlb_mm: /* 21 insns */
index 7208a77..d3cc4ef 100644 (file)
@@ -28,7 +28,7 @@
        call    routine;                                \
         add    %sp, PTREGS_OFF, %o0;                   \
        ba,pt   %xcc, rtrap;                            \
-        clr    %l6;                                    \
+        nop;                                           \
        nop;
 
 #define TRAP_7INSNS(routine)                           \
@@ -38,7 +38,7 @@
        call    routine;                                \
         add    %sp, PTREGS_OFF, %o0;                   \
        ba,pt   %xcc, rtrap;                            \
-        clr    %l6;
+        nop;
 
 #define TRAP_SAVEFPU(routine)                          \
        sethi   %hi(109f), %g7;                         \
@@ -47,7 +47,7 @@
        call    routine;                                \
         add    %sp, PTREGS_OFF, %o0;                   \
        ba,pt   %xcc, rtrap;                            \
-        clr    %l6;                                    \
+        nop;                                           \
        nop;
 
 #define TRAP_NOSAVE(routine)                           \
@@ -67,7 +67,7 @@
        call    routine;                                \
         add    %sp, PTREGS_OFF, %o0;                   \
        ba,pt   %xcc, rtrap;                            \
-        clr    %l6;                                    \
+        nop;                                           \
        nop;
        
 #define TRAP_ARG(routine, arg)                         \
@@ -78,7 +78,7 @@
        call    routine;                                \
         mov    arg, %o1;                               \
        ba,pt   %xcc, rtrap;                            \
-        clr    %l6;
+        nop;
        
 #define TRAPTL1_ARG(routine, arg)                      \
        sethi   %hi(109f), %g7;                         \
@@ -88,7 +88,7 @@
        call    routine;                                \
         mov    arg, %o1;                               \
        ba,pt   %xcc, rtrap;                            \
-        clr    %l6;
+        nop;
        
 #define SYSCALL_TRAP(routine, systbl)                  \
        sethi   %hi(109f), %g7;                         \
        ldx     [%sp + PTREGS_OFF + PT_V9_TNPC], %l1;                   \
        add     %l1, 4, %l2;                                            \
        stx     %l1, [%sp + PTREGS_OFF + PT_V9_TPC];                    \
-       ba,pt   %xcc, rtrap_clr_l6;                                     \
+       ba,pt   %xcc, rtrap;                                            \
         stx    %l2, [%sp + PTREGS_OFF + PT_V9_TNPC];
                
 #ifdef CONFIG_KPROBES