diff options
| author | David S. Miller <davem@davemloft.net> | 2008-04-24 06:15:22 -0400 |
|---|---|---|
| committer | David S. Miller <davem@davemloft.net> | 2008-04-24 06:15:22 -0400 |
| commit | 7697daaa894ca2bc5cd652269c316bcdc3ec441b (patch) | |
| tree | d95630c696f34d5bc2b0cb6ab69a812440187c36 | |
| parent | 238468b2ac76020c192a7402c92df5097916bf4a (diff) | |
[SPARC64]: %l6 trap return handling no longer necessary.
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>
| -rw-r--r-- | arch/sparc64/kernel/entry.S | 35 | ||||
| -rw-r--r-- | arch/sparc64/kernel/entry.h | 1 | ||||
| -rw-r--r-- | arch/sparc64/kernel/rtrap.S | 21 | ||||
| -rw-r--r-- | arch/sparc64/kernel/signal.c | 3 | ||||
| -rw-r--r-- | arch/sparc64/kernel/sun4v_tlb_miss.S | 16 | ||||
| -rw-r--r-- | arch/sparc64/kernel/tsb.S | 2 | ||||
| -rw-r--r-- | arch/sparc64/kernel/winfixup.S | 12 | ||||
| -rw-r--r-- | arch/sparc64/mm/ultra.S | 4 | ||||
| -rw-r--r-- | include/asm-sparc64/ttable.h | 14 |
9 files changed, 45 insertions, 63 deletions
diff --git a/arch/sparc64/kernel/entry.S b/arch/sparc64/kernel/entry.S index f54cd2dd55dc..fd06e937ae1e 100644 --- a/arch/sparc64/kernel/entry.S +++ b/arch/sparc64/kernel/entry.S | |||
| @@ -47,7 +47,7 @@ do_fpdis: | |||
| 47 | ba,pt %xcc, etrap | 47 | ba,pt %xcc, etrap |
| 48 | 109: or %g7, %lo(109b), %g7 | 48 | 109: or %g7, %lo(109b), %g7 |
| 49 | add %g0, %g0, %g0 | 49 | add %g0, %g0, %g0 |
| 50 | ba,a,pt %xcc, rtrap_clr_l6 | 50 | ba,a,pt %xcc, rtrap |
| 51 | 51 | ||
| 52 | 1: TRAP_LOAD_THREAD_REG(%g6, %g1) | 52 | 1: TRAP_LOAD_THREAD_REG(%g6, %g1) |
| 53 | ldub [%g6 + TI_FPSAVED], %g5 | 53 | ldub [%g6 + TI_FPSAVED], %g5 |
| @@ -226,7 +226,7 @@ fp_other_bounce: | |||
| 226 | call do_fpother | 226 | call do_fpother |
| 227 | add %sp, PTREGS_OFF, %o0 | 227 | add %sp, PTREGS_OFF, %o0 |
| 228 | ba,pt %xcc, rtrap | 228 | ba,pt %xcc, rtrap |
| 229 | clr %l6 | 229 | nop |
| 230 | 230 | ||
| 231 | .globl do_fpother_check_fitos | 231 | .globl do_fpother_check_fitos |
| 232 | .align 32 | 232 | .align 32 |
| @@ -489,7 +489,7 @@ utrap_trap: /* %g3=handler,%g4=level */ | |||
| 489 | call bad_trap | 489 | call bad_trap |
| 490 | add %sp, PTREGS_OFF, %o0 | 490 | add %sp, PTREGS_OFF, %o0 |
| 491 | ba,pt %xcc, rtrap | 491 | ba,pt %xcc, rtrap |
| 492 | clr %l6 | 492 | nop |
| 493 | 493 | ||
| 494 | invoke_utrap: | 494 | invoke_utrap: |
| 495 | sllx %g3, 3, %g3 | 495 | sllx %g3, 3, %g3 |
| @@ -607,7 +607,7 @@ __spitfire_cee_trap_continue: | |||
| 607 | call spitfire_access_error | 607 | call spitfire_access_error |
| 608 | add %sp, PTREGS_OFF, %o0 | 608 | add %sp, PTREGS_OFF, %o0 |
| 609 | ba,pt %xcc, rtrap | 609 | ba,pt %xcc, rtrap |
| 610 | clr %l6 | 610 | nop |
| 611 | 611 | ||
| 612 | /* This is the trap handler entry point for ECC correctable | 612 | /* This is the trap handler entry point for ECC correctable |
| 613 | * errors. They are corrected, but we listen for the trap | 613 | * errors. They are corrected, but we listen for the trap |
| @@ -686,7 +686,7 @@ __spitfire_data_access_exception_tl1: | |||
| 686 | call spitfire_data_access_exception_tl1 | 686 | call spitfire_data_access_exception_tl1 |
| 687 | add %sp, PTREGS_OFF, %o0 | 687 | add %sp, PTREGS_OFF, %o0 |
| 688 | ba,pt %xcc, rtrap | 688 | ba,pt %xcc, rtrap |
| 689 | clr %l6 | 689 | nop |
| 690 | 690 | ||
| 691 | __spitfire_data_access_exception: | 691 | __spitfire_data_access_exception: |
| 692 | rdpr %pstate, %g4 | 692 | rdpr %pstate, %g4 |
| @@ -705,7 +705,7 @@ __spitfire_data_access_exception: | |||
| 705 | call spitfire_data_access_exception | 705 | call spitfire_data_access_exception |
| 706 | add %sp, PTREGS_OFF, %o0 | 706 | add %sp, PTREGS_OFF, %o0 |
| 707 | ba,pt %xcc, rtrap | 707 | ba,pt %xcc, rtrap |
| 708 | clr %l6 | 708 | nop |
| 709 | 709 | ||
| 710 | .globl __spitfire_insn_access_exception | 710 | .globl __spitfire_insn_access_exception |
| 711 | .globl __spitfire_insn_access_exception_tl1 | 711 | .globl __spitfire_insn_access_exception_tl1 |
| @@ -725,7 +725,7 @@ __spitfire_insn_access_exception_tl1: | |||
| 725 | call spitfire_insn_access_exception_tl1 | 725 | call spitfire_insn_access_exception_tl1 |
| 726 | add %sp, PTREGS_OFF, %o0 | 726 | add %sp, PTREGS_OFF, %o0 |
| 727 | ba,pt %xcc, rtrap | 727 | ba,pt %xcc, rtrap |
| 728 | clr %l6 | 728 | nop |
| 729 | 729 | ||
| 730 | __spitfire_insn_access_exception: | 730 | __spitfire_insn_access_exception: |
| 731 | rdpr %pstate, %g4 | 731 | rdpr %pstate, %g4 |
| @@ -743,7 +743,7 @@ __spitfire_insn_access_exception: | |||
| 743 | call spitfire_insn_access_exception | 743 | call spitfire_insn_access_exception |
| 744 | add %sp, PTREGS_OFF, %o0 | 744 | add %sp, PTREGS_OFF, %o0 |
| 745 | ba,pt %xcc, rtrap | 745 | ba,pt %xcc, rtrap |
| 746 | clr %l6 | 746 | nop |
| 747 | 747 | ||
| 748 | /* These get patched into the trap table at boot time | 748 | /* These get patched into the trap table at boot time |
| 749 | * once we know we have a cheetah processor. | 749 | * once we know we have a cheetah processor. |
| @@ -937,7 +937,7 @@ do_dcpe_tl1_fatal: | |||
| 937 | call cheetah_plus_parity_error | 937 | call cheetah_plus_parity_error |
| 938 | add %sp, PTREGS_OFF, %o1 | 938 | add %sp, PTREGS_OFF, %o1 |
| 939 | ba,pt %xcc, rtrap | 939 | ba,pt %xcc, rtrap |
| 940 | clr %l6 | 940 | nop |
| 941 | 941 | ||
| 942 | do_icpe_tl1: | 942 | do_icpe_tl1: |
| 943 | rdpr %tl, %g1 ! Save original trap level | 943 | rdpr %tl, %g1 ! Save original trap level |
| @@ -979,7 +979,7 @@ do_icpe_tl1_fatal: | |||
| 979 | call cheetah_plus_parity_error | 979 | call cheetah_plus_parity_error |
| 980 | add %sp, PTREGS_OFF, %o1 | 980 | add %sp, PTREGS_OFF, %o1 |
| 981 | ba,pt %xcc, rtrap | 981 | ba,pt %xcc, rtrap |
| 982 | clr %l6 | 982 | nop |
| 983 | 983 | ||
| 984 | dcpe_icpe_tl1_common: | 984 | dcpe_icpe_tl1_common: |
| 985 | /* Flush D-cache, re-enable D/I caches in DCU and finally | 985 | /* Flush D-cache, re-enable D/I caches in DCU and finally |
| @@ -1281,7 +1281,7 @@ __do_privact: | |||
| 1281 | call do_privact | 1281 | call do_privact |
| 1282 | add %sp, PTREGS_OFF, %o0 | 1282 | add %sp, PTREGS_OFF, %o0 |
| 1283 | ba,pt %xcc, rtrap | 1283 | ba,pt %xcc, rtrap |
| 1284 | clr %l6 | 1284 | nop |
| 1285 | 1285 | ||
| 1286 | .globl do_mna | 1286 | .globl do_mna |
| 1287 | do_mna: | 1287 | do_mna: |
| @@ -1308,7 +1308,7 @@ do_mna: | |||
| 1308 | call mem_address_unaligned | 1308 | call mem_address_unaligned |
| 1309 | add %sp, PTREGS_OFF, %o0 | 1309 | add %sp, PTREGS_OFF, %o0 |
| 1310 | ba,pt %xcc, rtrap | 1310 | ba,pt %xcc, rtrap |
| 1311 | clr %l6 | 1311 | nop |
| 1312 | 1312 | ||
| 1313 | .globl do_lddfmna | 1313 | .globl do_lddfmna |
| 1314 | do_lddfmna: | 1314 | do_lddfmna: |
| @@ -1326,7 +1326,7 @@ do_lddfmna: | |||
| 1326 | call handle_lddfmna | 1326 | call handle_lddfmna |
| 1327 | add %sp, PTREGS_OFF, %o0 | 1327 | add %sp, PTREGS_OFF, %o0 |
| 1328 | ba,pt %xcc, rtrap | 1328 | ba,pt %xcc, rtrap |
| 1329 | clr %l6 | 1329 | nop |
| 1330 | 1330 | ||
| 1331 | .globl do_stdfmna | 1331 | .globl do_stdfmna |
| 1332 | do_stdfmna: | 1332 | do_stdfmna: |
| @@ -1344,7 +1344,7 @@ do_stdfmna: | |||
| 1344 | call handle_stdfmna | 1344 | call handle_stdfmna |
| 1345 | add %sp, PTREGS_OFF, %o0 | 1345 | add %sp, PTREGS_OFF, %o0 |
| 1346 | ba,pt %xcc, rtrap | 1346 | ba,pt %xcc, rtrap |
| 1347 | clr %l6 | 1347 | nop |
| 1348 | 1348 | ||
| 1349 | .globl breakpoint_trap | 1349 | .globl breakpoint_trap |
| 1350 | breakpoint_trap: | 1350 | breakpoint_trap: |
| @@ -1424,13 +1424,13 @@ sys32_rt_sigreturn: | |||
| 1424 | 1: ldx [%curptr + TI_FLAGS], %l5 | 1424 | 1: ldx [%curptr + TI_FLAGS], %l5 |
| 1425 | andcc %l5, (_TIF_SYSCALL_TRACE|_TIF_SECCOMP|_TIF_SYSCALL_AUDIT), %g0 | 1425 | andcc %l5, (_TIF_SYSCALL_TRACE|_TIF_SECCOMP|_TIF_SYSCALL_AUDIT), %g0 |
| 1426 | be,pt %icc, rtrap | 1426 | be,pt %icc, rtrap |
| 1427 | clr %l6 | 1427 | nop |
| 1428 | add %sp, PTREGS_OFF, %o0 | 1428 | add %sp, PTREGS_OFF, %o0 |
| 1429 | call syscall_trace | 1429 | call syscall_trace |
| 1430 | mov 1, %o1 | 1430 | mov 1, %o1 |
| 1431 | 1431 | ||
| 1432 | ba,pt %xcc, rtrap | 1432 | ba,pt %xcc, rtrap |
| 1433 | clr %l6 | 1433 | nop |
| 1434 | 1434 | ||
| 1435 | /* This is how fork() was meant to be done, 8 instruction entry. | 1435 | /* This is how fork() was meant to be done, 8 instruction entry. |
| 1436 | * | 1436 | * |
| @@ -1605,7 +1605,7 @@ ret_sys_call: | |||
| 1605 | bne,pn %icc, linux_syscall_trace2 | 1605 | bne,pn %icc, linux_syscall_trace2 |
| 1606 | add %l1, 0x4, %l2 ! npc = npc+4 | 1606 | add %l1, 0x4, %l2 ! npc = npc+4 |
| 1607 | stx %l1, [%sp + PTREGS_OFF + PT_V9_TPC] | 1607 | stx %l1, [%sp + PTREGS_OFF + PT_V9_TPC] |
| 1608 | ba,pt %xcc, rtrap_clr_l6 | 1608 | ba,pt %xcc, rtrap |
| 1609 | stx %l2, [%sp + PTREGS_OFF + PT_V9_TNPC] | 1609 | stx %l2, [%sp + PTREGS_OFF + PT_V9_TNPC] |
| 1610 | 1610 | ||
| 1611 | 1: | 1611 | 1: |
| @@ -1616,7 +1616,6 @@ ret_sys_call: | |||
| 1616 | sub %g0, %o0, %o0 | 1616 | sub %g0, %o0, %o0 |
| 1617 | or %g3, %g2, %g3 | 1617 | or %g3, %g2, %g3 |
| 1618 | stx %o0, [%sp + PTREGS_OFF + PT_V9_I0] | 1618 | stx %o0, [%sp + PTREGS_OFF + PT_V9_I0] |
| 1619 | mov 1, %l6 | ||
| 1620 | stx %g3, [%sp + PTREGS_OFF + PT_V9_TSTATE] | 1619 | stx %g3, [%sp + PTREGS_OFF + PT_V9_TSTATE] |
| 1621 | bne,pn %icc, linux_syscall_trace2 | 1620 | bne,pn %icc, linux_syscall_trace2 |
| 1622 | add %l1, 0x4, %l2 ! npc = npc+4 | 1621 | add %l1, 0x4, %l2 ! npc = npc+4 |
diff --git a/arch/sparc64/kernel/entry.h b/arch/sparc64/kernel/entry.h index 4a91e9c6d31b..32fbab620852 100644 --- a/arch/sparc64/kernel/entry.h +++ b/arch/sparc64/kernel/entry.h | |||
| @@ -20,7 +20,6 @@ extern void timer_interrupt(int irq, struct pt_regs *regs); | |||
| 20 | 20 | ||
| 21 | extern void do_notify_resume(struct pt_regs *regs, | 21 | extern void do_notify_resume(struct pt_regs *regs, |
| 22 | unsigned long orig_i0, | 22 | unsigned long orig_i0, |
| 23 | int restart_syscall, | ||
| 24 | unsigned long thread_info_flags); | 23 | unsigned long thread_info_flags); |
| 25 | 24 | ||
| 26 | extern asmlinkage void syscall_trace(struct pt_regs *regs, | 25 | extern asmlinkage void syscall_trace(struct pt_regs *regs, |
diff --git a/arch/sparc64/kernel/rtrap.S b/arch/sparc64/kernel/rtrap.S index 079d18a11d24..ecf6753b204a 100644 --- a/arch/sparc64/kernel/rtrap.S +++ b/arch/sparc64/kernel/rtrap.S | |||
| @@ -18,12 +18,6 @@ | |||
| 18 | #define RTRAP_PSTATE_IRQOFF (PSTATE_RMO|PSTATE_PEF|PSTATE_PRIV) | 18 | #define RTRAP_PSTATE_IRQOFF (PSTATE_RMO|PSTATE_PEF|PSTATE_PRIV) |
| 19 | #define RTRAP_PSTATE_AG_IRQOFF (PSTATE_RMO|PSTATE_PEF|PSTATE_PRIV|PSTATE_AG) | 19 | #define RTRAP_PSTATE_AG_IRQOFF (PSTATE_RMO|PSTATE_PEF|PSTATE_PRIV|PSTATE_AG) |
| 20 | 20 | ||
| 21 | /* Register %l6 keeps track of whether we are returning | ||
| 22 | * from a system call or not. It is cleared if we call | ||
| 23 | * do_notify_resume, and it must not be otherwise modified | ||
| 24 | * until we fully commit to returning to userspace. | ||
| 25 | */ | ||
| 26 | |||
| 27 | .text | 21 | .text |
| 28 | .align 32 | 22 | .align 32 |
| 29 | __handle_softirq: | 23 | __handle_softirq: |
| @@ -56,14 +50,12 @@ __handle_user_windows: | |||
| 56 | be,pt %xcc, __handle_user_windows_continue | 50 | be,pt %xcc, __handle_user_windows_continue |
| 57 | nop | 51 | nop |
| 58 | mov %l5, %o1 | 52 | mov %l5, %o1 |
| 59 | mov %l6, %o2 | ||
| 60 | add %sp, PTREGS_OFF, %o0 | 53 | add %sp, PTREGS_OFF, %o0 |
| 61 | mov %l0, %o3 | 54 | mov %l0, %o2 |
| 62 | 55 | ||
| 63 | call do_notify_resume | 56 | call do_notify_resume |
| 64 | wrpr %g0, RTRAP_PSTATE, %pstate | 57 | wrpr %g0, RTRAP_PSTATE, %pstate |
| 65 | wrpr %g0, RTRAP_PSTATE_IRQOFF, %pstate | 58 | wrpr %g0, RTRAP_PSTATE_IRQOFF, %pstate |
| 66 | clr %l6 | ||
| 67 | /* Signal delivery can modify pt_regs tstate, so we must | 59 | /* Signal delivery can modify pt_regs tstate, so we must |
| 68 | * reload it. | 60 | * reload it. |
| 69 | */ | 61 | */ |
| @@ -99,14 +91,12 @@ __handle_perfctrs: | |||
| 99 | be,pt %xcc, __handle_perfctrs_continue | 91 | be,pt %xcc, __handle_perfctrs_continue |
| 100 | sethi %hi(TSTATE_PEF), %o0 | 92 | sethi %hi(TSTATE_PEF), %o0 |
| 101 | mov %l5, %o1 | 93 | mov %l5, %o1 |
| 102 | mov %l6, %o2 | ||
| 103 | add %sp, PTREGS_OFF, %o0 | 94 | add %sp, PTREGS_OFF, %o0 |
| 104 | mov %l0, %o3 | 95 | mov %l0, %o2 |
| 105 | call do_notify_resume | 96 | call do_notify_resume |
| 106 | 97 | ||
| 107 | wrpr %g0, RTRAP_PSTATE, %pstate | 98 | wrpr %g0, RTRAP_PSTATE, %pstate |
| 108 | wrpr %g0, RTRAP_PSTATE_IRQOFF, %pstate | 99 | wrpr %g0, RTRAP_PSTATE_IRQOFF, %pstate |
| 109 | clr %l6 | ||
| 110 | /* Signal delivery can modify pt_regs tstate, so we must | 100 | /* Signal delivery can modify pt_regs tstate, so we must |
| 111 | * reload it. | 101 | * reload it. |
| 112 | */ | 102 | */ |
| @@ -127,13 +117,11 @@ __handle_userfpu: | |||
| 127 | 117 | ||
| 128 | __handle_signal: | 118 | __handle_signal: |
| 129 | mov %l5, %o1 | 119 | mov %l5, %o1 |
| 130 | mov %l6, %o2 | ||
| 131 | add %sp, PTREGS_OFF, %o0 | 120 | add %sp, PTREGS_OFF, %o0 |
| 132 | mov %l0, %o3 | 121 | mov %l0, %o2 |
| 133 | call do_notify_resume | 122 | call do_notify_resume |
| 134 | wrpr %g0, RTRAP_PSTATE, %pstate | 123 | wrpr %g0, RTRAP_PSTATE, %pstate |
| 135 | wrpr %g0, RTRAP_PSTATE_IRQOFF, %pstate | 124 | wrpr %g0, RTRAP_PSTATE_IRQOFF, %pstate |
| 136 | clr %l6 | ||
| 137 | 125 | ||
| 138 | /* Signal delivery can modify pt_regs tstate, so we must | 126 | /* Signal delivery can modify pt_regs tstate, so we must |
| 139 | * reload it. | 127 | * reload it. |
| @@ -145,9 +133,8 @@ __handle_signal: | |||
| 145 | andn %l1, %l4, %l1 | 133 | andn %l1, %l4, %l1 |
| 146 | 134 | ||
| 147 | .align 64 | 135 | .align 64 |
| 148 | .globl rtrap_irq, rtrap_clr_l6, rtrap, irqsz_patchme, rtrap_xcall | 136 | .globl rtrap_irq, rtrap, irqsz_patchme, rtrap_xcall |
| 149 | rtrap_irq: | 137 | rtrap_irq: |
| 150 | rtrap_clr_l6: clr %l6 | ||
| 151 | rtrap: | 138 | rtrap: |
| 152 | #ifndef CONFIG_SMP | 139 | #ifndef CONFIG_SMP |
| 153 | sethi %hi(per_cpu____cpu_data), %l0 | 140 | sethi %hi(per_cpu____cpu_data), %l0 |
diff --git a/arch/sparc64/kernel/signal.c b/arch/sparc64/kernel/signal.c index b959597201ed..77a3e8592cbc 100644 --- a/arch/sparc64/kernel/signal.c +++ b/arch/sparc64/kernel/signal.c | |||
| @@ -580,8 +580,7 @@ static void do_signal(struct pt_regs *regs, unsigned long orig_i0) | |||
| 580 | } | 580 | } |
| 581 | } | 581 | } |
| 582 | 582 | ||
| 583 | void do_notify_resume(struct pt_regs *regs, unsigned long orig_i0, int restart_syscall, | 583 | void do_notify_resume(struct pt_regs *regs, unsigned long orig_i0, unsigned long thread_info_flags) |
| 584 | unsigned long thread_info_flags) | ||
| 585 | { | 584 | { |
| 586 | if (thread_info_flags & (_TIF_SIGPENDING | _TIF_RESTORE_SIGMASK)) | 585 | if (thread_info_flags & (_TIF_SIGPENDING | _TIF_RESTORE_SIGMASK)) |
| 587 | do_signal(regs, orig_i0); | 586 | do_signal(regs, orig_i0); |
diff --git a/arch/sparc64/kernel/sun4v_tlb_miss.S b/arch/sparc64/kernel/sun4v_tlb_miss.S index fd9430562e0b..e1fbf8c75787 100644 --- a/arch/sparc64/kernel/sun4v_tlb_miss.S +++ b/arch/sparc64/kernel/sun4v_tlb_miss.S | |||
| @@ -262,7 +262,7 @@ sun4v_iacc: | |||
| 262 | mov %l5, %o2 | 262 | mov %l5, %o2 |
| 263 | call sun4v_insn_access_exception | 263 | call sun4v_insn_access_exception |
| 264 | add %sp, PTREGS_OFF, %o0 | 264 | add %sp, PTREGS_OFF, %o0 |
| 265 | ba,a,pt %xcc, rtrap_clr_l6 | 265 | ba,a,pt %xcc, rtrap |
| 266 | 266 | ||
| 267 | /* Instruction Access Exception, tl1. */ | 267 | /* Instruction Access Exception, tl1. */ |
| 268 | sun4v_iacc_tl1: | 268 | sun4v_iacc_tl1: |
| @@ -278,7 +278,7 @@ sun4v_iacc_tl1: | |||
| 278 | mov %l5, %o2 | 278 | mov %l5, %o2 |
| 279 | call sun4v_insn_access_exception_tl1 | 279 | call sun4v_insn_access_exception_tl1 |
| 280 | add %sp, PTREGS_OFF, %o0 | 280 | add %sp, PTREGS_OFF, %o0 |
| 281 | ba,a,pt %xcc, rtrap_clr_l6 | 281 | ba,a,pt %xcc, rtrap |
| 282 | 282 | ||
| 283 | /* Data Access Exception, tl0. */ | 283 | /* Data Access Exception, tl0. */ |
| 284 | sun4v_dacc: | 284 | sun4v_dacc: |
| @@ -294,7 +294,7 @@ sun4v_dacc: | |||
| 294 | mov %l5, %o2 | 294 | mov %l5, %o2 |
| 295 | call sun4v_data_access_exception | 295 | call sun4v_data_access_exception |
| 296 | add %sp, PTREGS_OFF, %o0 | 296 | add %sp, PTREGS_OFF, %o0 |
| 297 | ba,a,pt %xcc, rtrap_clr_l6 | 297 | ba,a,pt %xcc, rtrap |
| 298 | 298 | ||
| 299 | /* Data Access Exception, tl1. */ | 299 | /* Data Access Exception, tl1. */ |
| 300 | sun4v_dacc_tl1: | 300 | sun4v_dacc_tl1: |
| @@ -310,7 +310,7 @@ sun4v_dacc_tl1: | |||
| 310 | mov %l5, %o2 | 310 | mov %l5, %o2 |
| 311 | call sun4v_data_access_exception_tl1 | 311 | call sun4v_data_access_exception_tl1 |
| 312 | add %sp, PTREGS_OFF, %o0 | 312 | add %sp, PTREGS_OFF, %o0 |
| 313 | ba,a,pt %xcc, rtrap_clr_l6 | 313 | ba,a,pt %xcc, rtrap |
| 314 | 314 | ||
| 315 | /* Memory Address Unaligned. */ | 315 | /* Memory Address Unaligned. */ |
| 316 | sun4v_mna: | 316 | sun4v_mna: |
| @@ -344,7 +344,7 @@ sun4v_mna: | |||
| 344 | mov %l5, %o2 | 344 | mov %l5, %o2 |
| 345 | call sun4v_do_mna | 345 | call sun4v_do_mna |
| 346 | add %sp, PTREGS_OFF, %o0 | 346 | add %sp, PTREGS_OFF, %o0 |
| 347 | ba,a,pt %xcc, rtrap_clr_l6 | 347 | ba,a,pt %xcc, rtrap |
| 348 | 348 | ||
| 349 | /* Privileged Action. */ | 349 | /* Privileged Action. */ |
| 350 | sun4v_privact: | 350 | sun4v_privact: |
| @@ -352,7 +352,7 @@ sun4v_privact: | |||
| 352 | rd %pc, %g7 | 352 | rd %pc, %g7 |
| 353 | call do_privact | 353 | call do_privact |
| 354 | add %sp, PTREGS_OFF, %o0 | 354 | add %sp, PTREGS_OFF, %o0 |
| 355 | ba,a,pt %xcc, rtrap_clr_l6 | 355 | ba,a,pt %xcc, rtrap |
| 356 | 356 | ||
| 357 | /* Unaligned ldd float, tl0. */ | 357 | /* Unaligned ldd float, tl0. */ |
| 358 | sun4v_lddfmna: | 358 | sun4v_lddfmna: |
| @@ -368,7 +368,7 @@ sun4v_lddfmna: | |||
| 368 | mov %l5, %o2 | 368 | mov %l5, %o2 |
| 369 | call handle_lddfmna | 369 | call handle_lddfmna |
| 370 | add %sp, PTREGS_OFF, %o0 | 370 | add %sp, PTREGS_OFF, %o0 |
| 371 | ba,a,pt %xcc, rtrap_clr_l6 | 371 | ba,a,pt %xcc, rtrap |
| 372 | 372 | ||
| 373 | /* Unaligned std float, tl0. */ | 373 | /* Unaligned std float, tl0. */ |
| 374 | sun4v_stdfmna: | 374 | sun4v_stdfmna: |
| @@ -384,7 +384,7 @@ sun4v_stdfmna: | |||
| 384 | mov %l5, %o2 | 384 | mov %l5, %o2 |
| 385 | call handle_stdfmna | 385 | call handle_stdfmna |
| 386 | add %sp, PTREGS_OFF, %o0 | 386 | add %sp, PTREGS_OFF, %o0 |
| 387 | ba,a,pt %xcc, rtrap_clr_l6 | 387 | ba,a,pt %xcc, rtrap |
| 388 | 388 | ||
| 389 | #define BRANCH_ALWAYS 0x10680000 | 389 | #define BRANCH_ALWAYS 0x10680000 |
| 390 | #define NOP 0x01000000 | 390 | #define NOP 0x01000000 |
diff --git a/arch/sparc64/kernel/tsb.S b/arch/sparc64/kernel/tsb.S index 10adb2fb8ffe..c499214b501d 100644 --- a/arch/sparc64/kernel/tsb.S +++ b/arch/sparc64/kernel/tsb.S | |||
| @@ -275,7 +275,7 @@ sparc64_realfault_common: | |||
| 275 | stx %l5, [%g6 + TI_FAULT_ADDR] ! Save fault address | 275 | stx %l5, [%g6 + TI_FAULT_ADDR] ! Save fault address |
| 276 | call do_sparc64_fault ! Call fault handler | 276 | call do_sparc64_fault ! Call fault handler |
| 277 | add %sp, PTREGS_OFF, %o0 ! Compute pt_regs arg | 277 | add %sp, PTREGS_OFF, %o0 ! Compute pt_regs arg |
| 278 | ba,pt %xcc, rtrap_clr_l6 ! Restore cpu state | 278 | ba,pt %xcc, rtrap ! Restore cpu state |
| 279 | nop ! Delay slot (fill me) | 279 | nop ! Delay slot (fill me) |
| 280 | 280 | ||
| 281 | winfix_trampoline: | 281 | winfix_trampoline: |
diff --git a/arch/sparc64/kernel/winfixup.S b/arch/sparc64/kernel/winfixup.S index c4aa110a10e5..a6b0863c27df 100644 --- a/arch/sparc64/kernel/winfixup.S +++ b/arch/sparc64/kernel/winfixup.S | |||
| @@ -32,7 +32,7 @@ fill_fixup: | |||
| 32 | rd %pc, %g7 | 32 | rd %pc, %g7 |
| 33 | call do_sparc64_fault | 33 | call do_sparc64_fault |
| 34 | add %sp, PTREGS_OFF, %o0 | 34 | add %sp, PTREGS_OFF, %o0 |
| 35 | ba,pt %xcc, rtrap_clr_l6 | 35 | ba,pt %xcc, rtrap |
| 36 | nop | 36 | nop |
| 37 | 37 | ||
| 38 | /* Be very careful about usage of the trap globals here. | 38 | /* Be very careful about usage of the trap globals here. |
| @@ -100,7 +100,7 @@ spill_fixup_dax: | |||
| 100 | rd %pc, %g7 | 100 | rd %pc, %g7 |
| 101 | call do_sparc64_fault | 101 | call do_sparc64_fault |
| 102 | add %sp, PTREGS_OFF, %o0 | 102 | add %sp, PTREGS_OFF, %o0 |
| 103 | ba,a,pt %xcc, rtrap_clr_l6 | 103 | ba,a,pt %xcc, rtrap |
| 104 | 104 | ||
| 105 | winfix_mna: | 105 | winfix_mna: |
| 106 | andn %g3, 0x7f, %g3 | 106 | andn %g3, 0x7f, %g3 |
| @@ -122,12 +122,12 @@ fill_fixup_mna: | |||
| 122 | mov %l4, %o2 | 122 | mov %l4, %o2 |
| 123 | call sun4v_do_mna | 123 | call sun4v_do_mna |
| 124 | mov %l5, %o1 | 124 | mov %l5, %o1 |
| 125 | ba,a,pt %xcc, rtrap_clr_l6 | 125 | ba,a,pt %xcc, rtrap |
| 126 | 1: mov %l4, %o1 | 126 | 1: mov %l4, %o1 |
| 127 | mov %l5, %o2 | 127 | mov %l5, %o2 |
| 128 | call mem_address_unaligned | 128 | call mem_address_unaligned |
| 129 | nop | 129 | nop |
| 130 | ba,a,pt %xcc, rtrap_clr_l6 | 130 | ba,a,pt %xcc, rtrap |
| 131 | 131 | ||
| 132 | winfix_dax: | 132 | winfix_dax: |
| 133 | andn %g3, 0x7f, %g3 | 133 | andn %g3, 0x7f, %g3 |
| @@ -150,7 +150,7 @@ fill_fixup_dax: | |||
| 150 | add %sp, PTREGS_OFF, %o0 | 150 | add %sp, PTREGS_OFF, %o0 |
| 151 | call sun4v_data_access_exception | 151 | call sun4v_data_access_exception |
| 152 | nop | 152 | nop |
| 153 | ba,a,pt %xcc, rtrap_clr_l6 | 153 | ba,a,pt %xcc, rtrap |
| 154 | 1: call spitfire_data_access_exception | 154 | 1: call spitfire_data_access_exception |
| 155 | nop | 155 | nop |
| 156 | ba,a,pt %xcc, rtrap_clr_l6 | 156 | ba,a,pt %xcc, rtrap |
diff --git a/arch/sparc64/mm/ultra.S b/arch/sparc64/mm/ultra.S index 2865c105b6a4..e686a67561af 100644 --- a/arch/sparc64/mm/ultra.S +++ b/arch/sparc64/mm/ultra.S | |||
| @@ -476,7 +476,6 @@ xcall_sync_tick: | |||
| 476 | #endif | 476 | #endif |
| 477 | call smp_synchronize_tick_client | 477 | call smp_synchronize_tick_client |
| 478 | nop | 478 | nop |
| 479 | clr %l6 | ||
| 480 | b rtrap_xcall | 479 | b rtrap_xcall |
| 481 | ldx [%sp + PTREGS_OFF + PT_V9_TSTATE], %l1 | 480 | ldx [%sp + PTREGS_OFF + PT_V9_TSTATE], %l1 |
| 482 | 481 | ||
| @@ -511,7 +510,6 @@ xcall_report_regs: | |||
| 511 | #endif | 510 | #endif |
| 512 | call __show_regs | 511 | call __show_regs |
| 513 | add %sp, PTREGS_OFF, %o0 | 512 | add %sp, PTREGS_OFF, %o0 |
| 514 | clr %l6 | ||
| 515 | /* Has to be a non-v9 branch due to the large distance. */ | 513 | /* Has to be a non-v9 branch due to the large distance. */ |
| 516 | b rtrap_xcall | 514 | b rtrap_xcall |
| 517 | ldx [%sp + PTREGS_OFF + PT_V9_TSTATE], %l1 | 515 | ldx [%sp + PTREGS_OFF + PT_V9_TSTATE], %l1 |
| @@ -576,7 +574,7 @@ __hypervisor_tlb_xcall_error: | |||
| 576 | mov %l4, %o0 | 574 | mov %l4, %o0 |
| 577 | call hypervisor_tlbop_error_xcall | 575 | call hypervisor_tlbop_error_xcall |
| 578 | mov %l5, %o1 | 576 | mov %l5, %o1 |
| 579 | ba,a,pt %xcc, rtrap_clr_l6 | 577 | ba,a,pt %xcc, rtrap |
| 580 | 578 | ||
| 581 | .globl __hypervisor_xcall_flush_tlb_mm | 579 | .globl __hypervisor_xcall_flush_tlb_mm |
| 582 | __hypervisor_xcall_flush_tlb_mm: /* 21 insns */ | 580 | __hypervisor_xcall_flush_tlb_mm: /* 21 insns */ |
diff --git a/include/asm-sparc64/ttable.h b/include/asm-sparc64/ttable.h index 7208a777750e..d3cc4eff39a6 100644 --- a/include/asm-sparc64/ttable.h +++ b/include/asm-sparc64/ttable.h | |||
| @@ -28,7 +28,7 @@ | |||
| 28 | call routine; \ | 28 | call routine; \ |
| 29 | add %sp, PTREGS_OFF, %o0; \ | 29 | add %sp, PTREGS_OFF, %o0; \ |
| 30 | ba,pt %xcc, rtrap; \ | 30 | ba,pt %xcc, rtrap; \ |
| 31 | clr %l6; \ | 31 | nop; \ |
| 32 | nop; | 32 | nop; |
| 33 | 33 | ||
| 34 | #define TRAP_7INSNS(routine) \ | 34 | #define TRAP_7INSNS(routine) \ |
| @@ -38,7 +38,7 @@ | |||
| 38 | call routine; \ | 38 | call routine; \ |
| 39 | add %sp, PTREGS_OFF, %o0; \ | 39 | add %sp, PTREGS_OFF, %o0; \ |
| 40 | ba,pt %xcc, rtrap; \ | 40 | ba,pt %xcc, rtrap; \ |
| 41 | clr %l6; | 41 | nop; |
| 42 | 42 | ||
| 43 | #define TRAP_SAVEFPU(routine) \ | 43 | #define TRAP_SAVEFPU(routine) \ |
| 44 | sethi %hi(109f), %g7; \ | 44 | sethi %hi(109f), %g7; \ |
| @@ -47,7 +47,7 @@ | |||
| 47 | call routine; \ | 47 | call routine; \ |
| 48 | add %sp, PTREGS_OFF, %o0; \ | 48 | add %sp, PTREGS_OFF, %o0; \ |
| 49 | ba,pt %xcc, rtrap; \ | 49 | ba,pt %xcc, rtrap; \ |
| 50 | clr %l6; \ | 50 | nop; \ |
| 51 | nop; | 51 | nop; |
| 52 | 52 | ||
| 53 | #define TRAP_NOSAVE(routine) \ | 53 | #define TRAP_NOSAVE(routine) \ |
| @@ -67,7 +67,7 @@ | |||
| 67 | call routine; \ | 67 | call routine; \ |
| 68 | add %sp, PTREGS_OFF, %o0; \ | 68 | add %sp, PTREGS_OFF, %o0; \ |
| 69 | ba,pt %xcc, rtrap; \ | 69 | ba,pt %xcc, rtrap; \ |
| 70 | clr %l6; \ | 70 | nop; \ |
| 71 | nop; | 71 | nop; |
| 72 | 72 | ||
| 73 | #define TRAP_ARG(routine, arg) \ | 73 | #define TRAP_ARG(routine, arg) \ |
| @@ -78,7 +78,7 @@ | |||
| 78 | call routine; \ | 78 | call routine; \ |
| 79 | mov arg, %o1; \ | 79 | mov arg, %o1; \ |
| 80 | ba,pt %xcc, rtrap; \ | 80 | ba,pt %xcc, rtrap; \ |
| 81 | clr %l6; | 81 | nop; |
| 82 | 82 | ||
| 83 | #define TRAPTL1_ARG(routine, arg) \ | 83 | #define TRAPTL1_ARG(routine, arg) \ |
| 84 | sethi %hi(109f), %g7; \ | 84 | sethi %hi(109f), %g7; \ |
| @@ -88,7 +88,7 @@ | |||
| 88 | call routine; \ | 88 | call routine; \ |
| 89 | mov arg, %o1; \ | 89 | mov arg, %o1; \ |
| 90 | ba,pt %xcc, rtrap; \ | 90 | ba,pt %xcc, rtrap; \ |
| 91 | clr %l6; | 91 | nop; |
| 92 | 92 | ||
| 93 | #define SYSCALL_TRAP(routine, systbl) \ | 93 | #define SYSCALL_TRAP(routine, systbl) \ |
| 94 | sethi %hi(109f), %g7; \ | 94 | sethi %hi(109f), %g7; \ |
| @@ -166,7 +166,7 @@ | |||
| 166 | ldx [%sp + PTREGS_OFF + PT_V9_TNPC], %l1; \ | 166 | ldx [%sp + PTREGS_OFF + PT_V9_TNPC], %l1; \ |
| 167 | add %l1, 4, %l2; \ | 167 | add %l1, 4, %l2; \ |
| 168 | stx %l1, [%sp + PTREGS_OFF + PT_V9_TPC]; \ | 168 | stx %l1, [%sp + PTREGS_OFF + PT_V9_TPC]; \ |
| 169 | ba,pt %xcc, rtrap_clr_l6; \ | 169 | ba,pt %xcc, rtrap; \ |
| 170 | stx %l2, [%sp + PTREGS_OFF + PT_V9_TNPC]; | 170 | stx %l2, [%sp + PTREGS_OFF + PT_V9_TNPC]; |
| 171 | 171 | ||
| 172 | #ifdef CONFIG_KPROBES | 172 | #ifdef CONFIG_KPROBES |
