diff options
Diffstat (limited to 'arch/sparc64/kernel/rtrap.S')
-rw-r--r-- | arch/sparc64/kernel/rtrap.S | 21 |
1 files changed, 4 insertions, 17 deletions
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 |