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