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>

+16 -1
+15
arch/m68knommu/kernel/signal.c
··· 279 279 struct sigcontext context; 280 280 int err = 0; 281 281 282 + /* Always make any pending restarted system calls return -EINTR */ 283 + current_thread_info()->restart_block.fn = do_no_restart_syscall; 284 + 282 285 /* get previous context */ 283 286 if (copy_from_user(&context, usc, sizeof(context))) 284 287 goto badframe; ··· 318 315 greg_t *gregs = uc->uc_mcontext.gregs; 319 316 unsigned long usp; 320 317 int err; 318 + 319 + /* Always make any pending restarted system calls return -EINTR */ 320 + current_thread_info()->restart_block.fn = do_no_restart_syscall; 321 321 322 322 err = __get_user(temp, &uc->uc_mcontext.version); 323 323 if (temp != MCONTEXT_VERSION) ··· 695 689 case -ERESTARTNOHAND: 696 690 if (!has_handler) 697 691 goto do_restart; 692 + regs->d0 = -EINTR; 693 + break; 694 + 695 + case -ERESTART_RESTARTBLOCK: 696 + if (!has_handler) { 697 + regs->d0 = __NR_restart_syscall; 698 + regs->pc -= 2; 699 + break; 700 + } 698 701 regs->d0 = -EINTR; 699 702 break; 700 703
+1 -1
arch/m68knommu/kernel/syscalltable.S
··· 18 18 .text 19 19 ALIGN 20 20 ENTRY(sys_call_table) 21 - .long sys_ni_syscall /* 0 - old "setup()" system call*/ 21 + .long sys_restart_syscall /* 0 - old "setup()" system call */ 22 22 .long sys_exit 23 23 .long sys_fork 24 24 .long sys_read