x86 signals: use asm/syscall.h
Replace local inlines with the asm/syscall.h interfaces that do the same things. Signed-off-by: Roland McGrath <roland@redhat.com>
This commit is contained in:
parent
68bd0f4ef7
commit
4dfcbb997a
@ -27,6 +27,7 @@
|
||||
#include <asm/proto.h>
|
||||
#include <asm/ia32_unistd.h>
|
||||
#include <asm/mce.h>
|
||||
#include <asm/syscall.h>
|
||||
#include "sigframe.h"
|
||||
|
||||
#define _BLOCKABLE (~(sigmask(SIGKILL) | sigmask(SIGSTOP)))
|
||||
@ -346,35 +347,6 @@ static int setup_rt_frame(int sig, struct k_sigaction *ka, siginfo_t *info,
|
||||
return -EFAULT;
|
||||
}
|
||||
|
||||
/*
|
||||
* Return -1L or the syscall number that @regs is executing.
|
||||
*/
|
||||
static long current_syscall(struct pt_regs *regs)
|
||||
{
|
||||
/*
|
||||
* We always sign-extend a -1 value being set here,
|
||||
* so this is always either -1L or a syscall number.
|
||||
*/
|
||||
return regs->orig_ax;
|
||||
}
|
||||
|
||||
/*
|
||||
* Return a value that is -EFOO if the system call in @regs->orig_ax
|
||||
* returned an error. This only works for @regs from @current.
|
||||
*/
|
||||
static long current_syscall_ret(struct pt_regs *regs)
|
||||
{
|
||||
#ifdef CONFIG_IA32_EMULATION
|
||||
if (test_thread_flag(TIF_IA32))
|
||||
/*
|
||||
* Sign-extend the value so (int)-EFOO becomes (long)-EFOO
|
||||
* and will match correctly in comparisons.
|
||||
*/
|
||||
return (int) regs->ax;
|
||||
#endif
|
||||
return regs->ax;
|
||||
}
|
||||
|
||||
/*
|
||||
* OK, we're invoking a handler
|
||||
*/
|
||||
@ -386,9 +358,9 @@ handle_signal(unsigned long sig, siginfo_t *info, struct k_sigaction *ka,
|
||||
int ret;
|
||||
|
||||
/* Are we from a system call? */
|
||||
if (current_syscall(regs) >= 0) {
|
||||
if (syscall_get_nr(current, regs) >= 0) {
|
||||
/* If so, check system call restarting.. */
|
||||
switch (current_syscall_ret(regs)) {
|
||||
switch (syscall_get_error(current, regs)) {
|
||||
case -ERESTART_RESTARTBLOCK:
|
||||
case -ERESTARTNOHAND:
|
||||
regs->ax = -EINTR;
|
||||
@ -511,9 +483,9 @@ static void do_signal(struct pt_regs *regs)
|
||||
}
|
||||
|
||||
/* Did we come from a system call? */
|
||||
if (current_syscall(regs) >= 0) {
|
||||
if (syscall_get_nr(current, regs) >= 0) {
|
||||
/* Restart the system call - no handlers present */
|
||||
switch (current_syscall_ret(regs)) {
|
||||
switch (syscall_get_error(current, regs)) {
|
||||
case -ERESTARTNOHAND:
|
||||
case -ERESTARTSYS:
|
||||
case -ERESTARTNOINTR:
|
||||
|
Loading…
Reference in New Issue
Block a user