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

sh: Tidy up the _TIF work masks, and fix syscall trace bug on singlestep.

Signed-off-by: Paul Mundt <lethal@linux-sh.org>

+30 -14
+27 -11
arch/sh/include/asm/thread_info.h
··· 123 123 #define TIF_MEMDIE 18 124 124 #define TIF_FREEZE 19 125 125 126 - #define _TIF_SYSCALL_TRACE (1<<TIF_SYSCALL_TRACE) 127 - #define _TIF_SIGPENDING (1<<TIF_SIGPENDING) 128 - #define _TIF_NEED_RESCHED (1<<TIF_NEED_RESCHED) 129 - #define _TIF_RESTORE_SIGMASK (1<<TIF_RESTORE_SIGMASK) 130 - #define _TIF_SINGLESTEP (1<<TIF_SINGLESTEP) 131 - #define _TIF_SYSCALL_AUDIT (1<<TIF_SYSCALL_AUDIT) 132 - #define _TIF_USEDFPU (1<<TIF_USEDFPU) 133 - #define _TIF_POLLING_NRFLAG (1<<TIF_POLLING_NRFLAG) 134 - #define _TIF_FREEZE (1<<TIF_FREEZE) 126 + #define _TIF_SYSCALL_TRACE (1 << TIF_SYSCALL_TRACE) 127 + #define _TIF_SIGPENDING (1 << TIF_SIGPENDING) 128 + #define _TIF_NEED_RESCHED (1 << TIF_NEED_RESCHED) 129 + #define _TIF_RESTORE_SIGMASK (1 << TIF_RESTORE_SIGMASK) 130 + #define _TIF_SINGLESTEP (1 << TIF_SINGLESTEP) 131 + #define _TIF_SYSCALL_AUDIT (1 << TIF_SYSCALL_AUDIT) 132 + #define _TIF_USEDFPU (1 << TIF_USEDFPU) 133 + #define _TIF_POLLING_NRFLAG (1 << TIF_POLLING_NRFLAG) 134 + #define _TIF_FREEZE (1 << TIF_FREEZE) 135 135 136 - #define _TIF_WORK_MASK 0x000000FE /* work to do on interrupt/exception return */ 137 - #define _TIF_ALLWORK_MASK 0x000000FF /* work to do on any return to u-space */ 136 + /* 137 + * _TIF_ALLWORK_MASK and _TIF_WORK_MASK need to fit within a byte, or we 138 + * blow the tst immediate size constraints and need to fix up 139 + * arch/sh/kernel/entry-common.S. 140 + */ 141 + 142 + /* work to do in syscall trace */ 143 + #define _TIF_WORK_SYSCALL_MASK (_TIF_SYSCALL_TRACE | _TIF_SINGLESTEP | \ 144 + _TIF_SYSCALL_AUDIT) 145 + 146 + /* work to do on any return to u-space */ 147 + #define _TIF_ALLWORK_MASK (_TIF_SYSCALL_TRACE | _TIF_SIGPENDING | \ 148 + _TIF_NEED_RESCHED | _TIF_SYSCALL_AUDIT | \ 149 + _TIF_SINGLESTEP | _TIF_RESTORE_SIGMASK) 150 + 151 + /* work to do on interrupt/exception return */ 152 + #define _TIF_WORK_MASK (_TIF_ALLWORK_MASK & ~(_TIF_SYSCALL_TRACE | \ 153 + _TIF_SYSCALL_AUDIT | _TIF_SINGLESTEP)) 138 154 139 155 #endif /* __KERNEL__ */ 140 156
+1 -1
arch/sh/kernel/cpu/sh5/entry.S
··· 1300 1300 1301 1301 getcon KCR0, r2 1302 1302 ld.l r2, TI_FLAGS, r4 1303 - movi (_TIF_SYSCALL_TRACE | _TIF_SINGLESTEP | _TIF_SYSCALL_AUDIT), r6 1303 + movi _TIF_WORK_SYSCALL_MASK, r6 1304 1304 and r6, r4, r6 1305 1305 beq/l r6, ZERO, tr0 1306 1306
+2 -2
arch/sh/kernel/entry-common.S
··· 202 202 syscall_exit_work: 203 203 ! r0: current_thread_info->flags 204 204 ! r8: current_thread_info 205 - tst #_TIF_SYSCALL_TRACE | _TIF_SINGLESTEP | _TIF_SYSCALL_AUDIT, r0 205 + tst #_TIF_WORK_SYSCALL_MASK, r0 206 206 bt/s work_pending 207 207 tst #_TIF_NEED_RESCHED, r0 208 208 #ifdef CONFIG_TRACE_IRQFLAGS ··· 351 351 ! 352 352 get_current_thread_info r8, r10 353 353 mov.l @(TI_FLAGS,r8), r8 354 - mov #(_TIF_SYSCALL_TRACE | _TIF_SYSCALL_AUDIT), r10 354 + mov #_TIF_WORK_SYSCALL_MASK, r10 355 355 tst r10, r8 356 356 bf syscall_trace_entry 357 357 !