m68knommu: fix syscall restarting
Make restart blocks working, required for proper syscall restarting. Derived from same changes for m68k arch by Andreas Schwab <schwab@suse.de> Signed-off-by: Greg Ungerer <gerg@uclinux.org>
This commit is contained in:
parent
d88ffccbca
commit
f3221a39de
@ -279,6 +279,9 @@ restore_sigcontext(struct pt_regs *regs, struct sigcontext *usc, void *fp,
|
||||
struct sigcontext context;
|
||||
int err = 0;
|
||||
|
||||
/* 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;
|
||||
@ -316,6 +319,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;
|
||||
@ -692,6 +698,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;
|
||||
|
@ -18,7 +18,7 @@
|
||||
.text
|
||||
ALIGN
|
||||
ENTRY(sys_call_table)
|
||||
.long sys_ni_syscall /* 0 - old "setup()" system call*/
|
||||
.long sys_restart_syscall /* 0 - old "setup()" system call */
|
||||
.long sys_exit
|
||||
.long sys_fork
|
||||
.long sys_read
|
||||
|
Loading…
Reference in New Issue
Block a user