sparc64: Fix accidental syscall restart on child return from clone/fork/vfork.
This fixes a regression added by 238468b2ac76020c192a7402c92df5097916bf4a ("[SPARC64]: Use trap type stored in pt_regs to handle syscall restart.") Because we now encode the "returning from syscall" status in the pt_regs area, we have to be mindful to zap it out in the child of a fork. During a parallel kernel build I saw an accidental -EINTR return from vfork() in 'make' because of this bug. Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
90888816ba
commit
fd7354108a
@ -591,6 +591,12 @@ int copy_thread(int nr, unsigned long clone_flags, unsigned long sp,
|
||||
if (clone_flags & CLONE_SETTLS)
|
||||
t->kregs->u_regs[UREG_G7] = regs->u_regs[UREG_I3];
|
||||
|
||||
/* We do not want to accidently trigger system call restart
|
||||
* handling in the new thread. Therefore, clear out the trap
|
||||
* type, which will make pt_regs_regs_is_syscall() return false.
|
||||
*/
|
||||
pt_regs_clear_trap_type(t->kregs);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user