aboutsummaryrefslogtreecommitdiffstats
path: root/arch/mips/kernel/signal.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/mips/kernel/signal.c')
-rw-r--r--arch/mips/kernel/signal.c56
1 files changed, 21 insertions, 35 deletions
diff --git a/arch/mips/kernel/signal.c b/arch/mips/kernel/signal.c
index 7d5a631d6cab..4a7071863065 100644
--- a/arch/mips/kernel/signal.c
+++ b/arch/mips/kernel/signal.c
@@ -38,6 +38,27 @@
38 38
39#define _BLOCKABLE (~(sigmask(SIGKILL) | sigmask(SIGSTOP))) 39#define _BLOCKABLE (~(sigmask(SIGKILL) | sigmask(SIGSTOP)))
40 40
41#if ICACHE_REFILLS_WORKAROUND_WAR == 0
42
43struct rt_sigframe {
44 u32 rs_ass[4]; /* argument save space for o32 */
45 u32 rs_code[2]; /* signal trampoline */
46 struct siginfo rs_info;
47 struct ucontext rs_uc;
48};
49
50#else
51
52struct rt_sigframe {
53 u32 rs_ass[4]; /* argument save space for o32 */
54 u32 rs_pad[2];
55 struct siginfo rs_info;
56 struct ucontext rs_uc;
57 u32 rs_code[8] ____cacheline_aligned; /* signal trampoline */
58};
59
60#endif
61
41/* 62/*
42 * Helper routines 63 * Helper routines
43 */ 64 */
@@ -287,41 +308,6 @@ asmlinkage int sys_sigaltstack(nabi_no_regargs struct pt_regs regs)
287 return do_sigaltstack(uss, uoss, usp); 308 return do_sigaltstack(uss, uoss, usp);
288} 309}
289 310
290/*
291 * Horribly complicated - with the bloody RM9000 workarounds enabled
292 * the signal trampolines is moving to the end of the structure so we can
293 * increase the alignment without breaking software compatibility.
294 */
295#ifdef CONFIG_TRAD_SIGNALS
296struct sigframe {
297 u32 sf_ass[4]; /* argument save space for o32 */
298#if ICACHE_REFILLS_WORKAROUND_WAR
299 u32 sf_pad[2];
300#else
301 u32 sf_code[2]; /* signal trampoline */
302#endif
303 struct sigcontext sf_sc;
304 sigset_t sf_mask;
305#if ICACHE_REFILLS_WORKAROUND_WAR
306 u32 sf_code[8] ____cacheline_aligned; /* signal trampoline */
307#endif
308};
309#endif
310
311struct rt_sigframe {
312 u32 rs_ass[4]; /* argument save space for o32 */
313#if ICACHE_REFILLS_WORKAROUND_WAR
314 u32 rs_pad[2];
315#else
316 u32 rs_code[2]; /* signal trampoline */
317#endif
318 struct siginfo rs_info;
319 struct ucontext rs_uc;
320#if ICACHE_REFILLS_WORKAROUND_WAR
321 u32 rs_code[8] ____cacheline_aligned; /* signal trampoline */
322#endif
323};
324
325#ifdef CONFIG_TRAD_SIGNALS 311#ifdef CONFIG_TRAD_SIGNALS
326save_static_function(sys_sigreturn); 312save_static_function(sys_sigreturn);
327__attribute_used__ noinline static void 313__attribute_used__ noinline static void