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 /arch/sparc64 | |
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>
Diffstat (limited to 'arch/sparc64')
-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 |
8 files changed, 38 insertions, 56 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 */ |