Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

frv: double syscall restarts, syscall restart in sigreturn()

We need to make sure that only the first do_signal() to be handled on
the way out syscall will bother with syscall restarts; additionally, the
check on the "signal has user handler" path had been wrong - compare
with restart prevention in sigreturn()...

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Signed-off-by: David Howells <dhowells@redhat.com>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>

authored by

Al Viro and committed by
Linus Torvalds
ed1cde68 44c7afff

+3 -1
+3 -1
arch/frv/kernel/signal.c
··· 446 446 int ret; 447 447 448 448 /* Are we from a system call? */ 449 - if (in_syscall(__frame)) { 449 + if (__frame->syscallno != -1) { 450 450 /* If so, check system call restarting.. */ 451 451 switch (__frame->gr8) { 452 452 case -ERESTART_RESTARTBLOCK: ··· 465 465 __frame->gr8 = __frame->orig_gr8; 466 466 __frame->pc -= 4; 467 467 } 468 + __frame->syscallno = -1; 468 469 } 469 470 470 471 /* Set up the stack frame */ ··· 552 551 __frame->pc -= 4; 553 552 break; 554 553 } 554 + __frame->syscallno = -1; 555 555 } 556 556 557 557 /* if there's no signal to deliver, we just put the saved sigmask