-
- Downloads
arch/tile: fix up some issues in calling do_work_pending()
First, we were at risk of handling thread-info flags, in particular do_signal(), when returning from kernel space. This could happen after a failed kernel_execve(), or when forking a kernel thread. The fix is to test in do_work_pending() for user_mode() and return immediately if so; we already had this test for one of the flags, so I just hoisted it to the top of the function. Second, if a ptraced process updated the callee-saved registers in the ptregs struct and then processed another thread-info flag, we would overwrite the modifications with the original callee-saved registers. To fix this, we add a register to note if we've already saved the registers once, and skip doing it on additional passes through the loop. To avoid a performance hit from the couple of extra instructions involved, I modified the GET_THREAD_INFO() macro to be guaranteed to be one instruction, then bundled it with adjacent instructions, yielding an overall net savings. Reported-By:Al Viro <viro@ZenIV.linux.org.uk> Signed-off-by:
Chris Metcalf <cmetcalf@tilera.com>
Showing
- arch/tile/include/asm/thread_info.h 7 additions, 2 deletionsarch/tile/include/asm/thread_info.h
- arch/tile/kernel/intvec_32.S 28 additions, 13 deletionsarch/tile/kernel/intvec_32.S
- arch/tile/kernel/intvec_64.S 28 additions, 10 deletionsarch/tile/kernel/intvec_64.S
- arch/tile/kernel/process.c 5 additions, 2 deletionsarch/tile/kernel/process.c
Loading
Please register or sign in to comment