sparc64: Fix syscall restart, for real...
authorDavid S. Miller <davem@davemloft.net>
Thu, 1 May 2008 10:30:22 +0000 (03:30 -0700)
committerDavid S. Miller <davem@davemloft.net>
Fri, 2 May 2008 12:22:52 +0000 (05:22 -0700)
commit2678fefedbbc03a3ae6f5c254791bf147d6c52fd
tree23052dffe4591f06192b8ee9cd17a1160fe4520f
parent32039f4954938e4d761032d7046254d08d0db54c
sparc64: Fix syscall restart, for real...

The change I put into copy_thread() just papered over the real
problem.

When we are looking to see if we should do a syscall restart, when
deliverying a signal, we should only interpret the syscall return
value as an error if the carry condition code(s) are set.

Otherwise it's a success return.

Also, sigreturn paths should do a pt_regs_clear_trap_type().

It turns out that doing a syscall restart when returning from a fork()
does and should happen, from time to time.  Even if copy_thread()
returns success, copy_process() can still unwind and signal
-ERESTARTNOINTR in the parent.

Signed-off-by: David S. Miller <davem@davemloft.net>
arch/sparc64/kernel/process.c
arch/sparc64/kernel/signal.c
arch/sparc64/kernel/signal32.c