diff options
author | David Howells <dhowells@redhat.com> | 2006-01-18 20:43:59 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2006-01-18 22:20:29 -0500 |
commit | a411aee96ea7fe6fe065df65bf29ea755bcdb554 (patch) | |
tree | 3a6cfece835c6d896a035e05fbcfe34a4c691bfc /include | |
parent | 150256d8aadb3a337c31efa9e175cbd25bf06b06 (diff) |
[PATCH] Handle TIF_RESTORE_SIGMASK for FRV
Handle TIF_RESTORE_SIGMASK as added by David Woodhouse's patch entitled:
[PATCH] 2/3 Add TIF_RESTORE_SIGMASK support for arch/powerpc
[PATCH] 3/3 Generic sys_rt_sigsuspend
It does the following:
(1) Declares TIF_RESTORE_SIGMASK for FRV.
(2) Invokes it over to do_signal() when TIF_RESTORE_SIGMASK is set.
(3) Makes do_signal() support TIF_RESTORE_SIGMASK, using the signal mask saved
in current->saved_sigmask.
(4) Discards sys_rt_sigsuspend() from the arch, using the generic one instead.
(5) Makes sys_sigsuspend() save the signal mask and set TIF_RESTORE_SIGMASK
rather than attempting to fudge the return registers.
(6) Makes sys_sigsuspend() return -ERESTARTNOHAND rather than looping
intrinsically.
(7) Makes setup_frame(), setup_rt_frame() and handle_signal() return 0 or
-EFAULT rather than true/false to be consistent with the rest of the
kernel.
Due to the fact do_signal() is then only called from one place:
(8) Make do_signal() no longer have a return value is it was just being
ignored; force_sig() takes care of this.
(9) Discards the old sigmask argument to do_signal() as it's no longer
necessary.
This patch depends on the FRV signalling patches as well as the
sys_rt_sigsuspend patch.
Signed-off-by: David Howells <dhowells@redhat.com>
Signed-off-by: David Woodhouse <dwmw2@infradead.org>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'include')
-rw-r--r-- | include/asm-frv/thread_info.h | 2 | ||||
-rw-r--r-- | include/asm-frv/unistd.h | 1 |
2 files changed, 3 insertions, 0 deletions
diff --git a/include/asm-frv/thread_info.h b/include/asm-frv/thread_info.h index a5576e02dd1d..ea426abf01d3 100644 --- a/include/asm-frv/thread_info.h +++ b/include/asm-frv/thread_info.h | |||
@@ -129,6 +129,7 @@ register struct thread_info *__current_thread_info asm("gr15"); | |||
129 | #define TIF_NEED_RESCHED 3 /* rescheduling necessary */ | 129 | #define TIF_NEED_RESCHED 3 /* rescheduling necessary */ |
130 | #define TIF_SINGLESTEP 4 /* restore singlestep on return to user mode */ | 130 | #define TIF_SINGLESTEP 4 /* restore singlestep on return to user mode */ |
131 | #define TIF_IRET 5 /* return with iret */ | 131 | #define TIF_IRET 5 /* return with iret */ |
132 | #define TIF_RESTORE_SIGMASK 6 /* restore signal mask in do_signal() */ | ||
132 | #define TIF_POLLING_NRFLAG 16 /* true if poll_idle() is polling TIF_NEED_RESCHED */ | 133 | #define TIF_POLLING_NRFLAG 16 /* true if poll_idle() is polling TIF_NEED_RESCHED */ |
133 | #define TIF_MEMDIE 17 /* OOM killer killed process */ | 134 | #define TIF_MEMDIE 17 /* OOM killer killed process */ |
134 | 135 | ||
@@ -138,6 +139,7 @@ register struct thread_info *__current_thread_info asm("gr15"); | |||
138 | #define _TIF_NEED_RESCHED (1 << TIF_NEED_RESCHED) | 139 | #define _TIF_NEED_RESCHED (1 << TIF_NEED_RESCHED) |
139 | #define _TIF_SINGLESTEP (1 << TIF_SINGLESTEP) | 140 | #define _TIF_SINGLESTEP (1 << TIF_SINGLESTEP) |
140 | #define _TIF_IRET (1 << TIF_IRET) | 141 | #define _TIF_IRET (1 << TIF_IRET) |
142 | #define _TIF_RESTORE_SIGMASK (1 << TIF_RESTORE_SIGMASK) | ||
141 | #define _TIF_POLLING_NRFLAG (1 << TIF_POLLING_NRFLAG) | 143 | #define _TIF_POLLING_NRFLAG (1 << TIF_POLLING_NRFLAG) |
142 | 144 | ||
143 | #define _TIF_WORK_MASK 0x0000FFFE /* work to do on interrupt/exception return */ | 145 | #define _TIF_WORK_MASK 0x0000FFFE /* work to do on interrupt/exception return */ |
diff --git a/include/asm-frv/unistd.h b/include/asm-frv/unistd.h index cde376a7a857..4d994d2e99e3 100644 --- a/include/asm-frv/unistd.h +++ b/include/asm-frv/unistd.h | |||
@@ -486,6 +486,7 @@ static inline pid_t wait(int * wait_stat) | |||
486 | /* #define __ARCH_WANT_SYS_SIGPENDING */ | 486 | /* #define __ARCH_WANT_SYS_SIGPENDING */ |
487 | #define __ARCH_WANT_SYS_SIGPROCMASK | 487 | #define __ARCH_WANT_SYS_SIGPROCMASK |
488 | #define __ARCH_WANT_SYS_RT_SIGACTION | 488 | #define __ARCH_WANT_SYS_RT_SIGACTION |
489 | #define __ARCH_WANT_SYS_RT_SIGSUSPEND | ||
489 | #endif | 490 | #endif |
490 | 491 | ||
491 | /* | 492 | /* |