m68k: wire up sys_restart_syscall
PATCH 1/1 m68k: wire up sys_restart_syscall
Make restart blocks working, required for proper syscall restarting.
--- arch/m68k/kernel/entry.S | 2 +- arch/m68k/kernel/signal.c | 15 +++++++++++++++ include/asm-m68k/unistd.h | 4 +--- 3 files changed, 17 insertions(+), 4 deletions(-)
arch/m68k/kernel/entry.S +1 -1
@@ -424,7 +424,7 @@ resume: .data ALIGN sys_call_table: - .long sys_ni_syscall /* 0 - old "setup()" system call*/ + .long sys_restart_syscall /* 0 - old "setup()" system call, used for restarting */ .long sys_exit .long sys_fork .long sys_read
arch/m68k/kernel/signal.c +15 -0
@@ -348,6 +348,9 @@ restore_sigcontext(struct pt_regs *regs, struct sigcontext __user *usc, void __ustruct sigcontext context;int err; +/* Always make any pending restarted system calls return -EINTR */ +current_thread_info ()->restart_block.fn = do_no_restart_syscall; +/* get previous context */ if (copy_from_user (&context, usc,sizeof (context))) goto badframe;
@@ -433,6 +436,9 @@ rt_restore_ucontext(struct pt_regs *regs, struct switch_stack *sw,unsigned long usp;int err; +/* Always make any pending restarted system calls return -EINTR */ +current_thread_info ()->restart_block.fn = do_no_restart_syscall; + err =__get_user (temp, &uc->uc_mcontext.version);if (temp !=MCONTEXT_VERSION ) goto badframe;
@@ -959,6 +965,15 @@ handle_restart(struct pt_regs *regs, struct k_sigaction *ka, int has_handler) regs->d0 = -EINTR ;break ; +case -ERESTART_RESTARTBLOCK : +if (!has_handler) { + regs->d0 = __NR_restart_syscall; + regs->pc -=2 ; +break ; + } + regs->d0 = -EINTR ; +break ; +case -ERESTARTSYS :if (has_handler && !(ka->sa.sa_flags &SA_RESTART )) { regs->d0 = -EINTR ;
include/asm-m68k/unistd.h +1 -3
@@ -5,6 +5,7 @@* This file contains the system call numbers. */ +#define __NR_restart_syscall 0#define __NR_exit 1#define __NR_fork 2#define __NR_read 3
@@ -359,9 +360,6 @@#define __ARCH_WANT_SYS_SIGPROCMASK#define __ARCH_WANT_SYS_RT_SIGACTION -/* whitelist for checksyscalls */ -#define __IGNORE_restart_syscall -/* * "Conditional" syscalls *
Signature · 14 lines
1.6.1 Andreas. -- Andreas Schwab, SuSE Labs, [email protected] SuSE Linux Products GmbH, Maxfeldstraße 5, 90409 Nürnberg, Germany PGP key fingerprint = 58CA 54C7 6D53 942B 1756 01D3 44D5 214B 8276 4ED5 "And now for something completely different." -- To unsubscribe from this list: send the line "unsubscribe linux-m68k" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
Geert Uytterhoeven
maintainerHi Andreas,
Quoted 1 line · Andreas Schwab
Make restart blocks working, required for proper syscall restarting.
Thanks!
Is there an easy way to test this?
Gr{oetje,eeting}s,
Geert
--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- [email protected]
In personal conversations with technical people, I call myself a hacker. But when I'm talking to journalists I just say "programmer" or something like that.
-- Linus Torvalds
Quoted 1 line · Geert Uytterhoeven
Is there an easy way to test this?
Run 'sleep 100' and then attach to it with strace. Without this patch the nanosleep syscall returns with an error instead of being restarted.
Andreas.
Signature · 8 lines
Andreas Schwab, SuSE Labs, [email protected] SuSE Linux Products GmbH, Maxfeldstraße 5, 90409 Nürnberg, Germany PGP key fingerprint = 58CA 54C7 6D53 942B 1756 01D3 44D5 214B 8276 4ED5 "And now for something completely different." -- To unsubscribe from this list: send the line "unsubscribe linux-m68k" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
Quoted 6 lines · Andreas Schwab
Quoted 1 line · Geert Uytterhoeven
Is there an easy way to test this?
Run 'sleep 100' and then attach to it with strace. Without this patch the nanosleep syscall returns with an error instead of being restarted.
Thanks! Applied.
Gr{oetje,eeting}s,
Geert
--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- [email protected]
In personal conversations with technical people, I call myself a hacker. But when I'm talking to journalists I just say "programmer" or something like that.
-- Linus Torvalds