diff options
author | Paul Mundt <lethal@linux-sh.org> | 2008-07-30 00:11:26 -0400 |
---|---|---|
committer | Paul Mundt <lethal@linux-sh.org> | 2008-08-01 15:39:32 -0400 |
commit | cec3fd3e2a7cacf37e2bd6d9fa915337245cc563 (patch) | |
tree | dd97b01f9cd717afd502d4fc7ef2f341e545ebd9 /arch/sh | |
parent | daf423db3b6afd90ecdd776dbc32c0b57cc78edb (diff) |
sh: Tidy up the _TIF work masks, and fix syscall trace bug on singlestep.
Signed-off-by: Paul Mundt <lethal@linux-sh.org>
Diffstat (limited to 'arch/sh')
-rw-r--r-- | arch/sh/include/asm/thread_info.h | 40 | ||||
-rw-r--r-- | arch/sh/kernel/cpu/sh5/entry.S | 2 | ||||
-rw-r--r-- | arch/sh/kernel/entry-common.S | 4 |
3 files changed, 31 insertions, 15 deletions
diff --git a/arch/sh/include/asm/thread_info.h b/arch/sh/include/asm/thread_info.h index eeb4c747119e..c05b1afd1324 100644 --- a/arch/sh/include/asm/thread_info.h +++ b/arch/sh/include/asm/thread_info.h | |||
@@ -123,18 +123,34 @@ static inline struct thread_info *current_thread_info(void) | |||
123 | #define TIF_MEMDIE 18 | 123 | #define TIF_MEMDIE 18 |
124 | #define TIF_FREEZE 19 | 124 | #define TIF_FREEZE 19 |
125 | 125 | ||
126 | #define _TIF_SYSCALL_TRACE (1<<TIF_SYSCALL_TRACE) | 126 | #define _TIF_SYSCALL_TRACE (1 << TIF_SYSCALL_TRACE) |
127 | #define _TIF_SIGPENDING (1<<TIF_SIGPENDING) | 127 | #define _TIF_SIGPENDING (1 << TIF_SIGPENDING) |
128 | #define _TIF_NEED_RESCHED (1<<TIF_NEED_RESCHED) | 128 | #define _TIF_NEED_RESCHED (1 << TIF_NEED_RESCHED) |
129 | #define _TIF_RESTORE_SIGMASK (1<<TIF_RESTORE_SIGMASK) | 129 | #define _TIF_RESTORE_SIGMASK (1 << TIF_RESTORE_SIGMASK) |
130 | #define _TIF_SINGLESTEP (1<<TIF_SINGLESTEP) | 130 | #define _TIF_SINGLESTEP (1 << TIF_SINGLESTEP) |
131 | #define _TIF_SYSCALL_AUDIT (1<<TIF_SYSCALL_AUDIT) | 131 | #define _TIF_SYSCALL_AUDIT (1 << TIF_SYSCALL_AUDIT) |
132 | #define _TIF_USEDFPU (1<<TIF_USEDFPU) | 132 | #define _TIF_USEDFPU (1 << TIF_USEDFPU) |
133 | #define _TIF_POLLING_NRFLAG (1<<TIF_POLLING_NRFLAG) | 133 | #define _TIF_POLLING_NRFLAG (1 << TIF_POLLING_NRFLAG) |
134 | #define _TIF_FREEZE (1<<TIF_FREEZE) | 134 | #define _TIF_FREEZE (1 << TIF_FREEZE) |
135 | 135 | ||
136 | #define _TIF_WORK_MASK 0x000000FE /* work to do on interrupt/exception return */ | 136 | /* |
137 | #define _TIF_ALLWORK_MASK 0x000000FF /* work to do on any return to u-space */ | 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 | #endif /* __KERNEL__ */ | 155 | #endif /* __KERNEL__ */ |
140 | 156 | ||
diff --git a/arch/sh/kernel/cpu/sh5/entry.S b/arch/sh/kernel/cpu/sh5/entry.S index ca08e7f26a3a..bba331d5ef74 100644 --- a/arch/sh/kernel/cpu/sh5/entry.S +++ b/arch/sh/kernel/cpu/sh5/entry.S | |||
@@ -1300,7 +1300,7 @@ syscall_allowed: | |||
1300 | 1300 | ||
1301 | getcon KCR0, r2 | 1301 | getcon KCR0, r2 |
1302 | ld.l r2, TI_FLAGS, r4 | 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 | and r6, r4, r6 | 1304 | and r6, r4, r6 |
1305 | beq/l r6, ZERO, tr0 | 1305 | beq/l r6, ZERO, tr0 |
1306 | 1306 | ||
diff --git a/arch/sh/kernel/entry-common.S b/arch/sh/kernel/entry-common.S index 5e0dd1933847..a34417c8ee0a 100644 --- a/arch/sh/kernel/entry-common.S +++ b/arch/sh/kernel/entry-common.S | |||
@@ -202,7 +202,7 @@ work_resched: | |||
202 | syscall_exit_work: | 202 | syscall_exit_work: |
203 | ! r0: current_thread_info->flags | 203 | ! r0: current_thread_info->flags |
204 | ! r8: current_thread_info | 204 | ! r8: current_thread_info |
205 | tst #_TIF_SYSCALL_TRACE | _TIF_SINGLESTEP | _TIF_SYSCALL_AUDIT, r0 | 205 | tst #_TIF_WORK_SYSCALL_MASK, r0 |
206 | bt/s work_pending | 206 | bt/s work_pending |
207 | tst #_TIF_NEED_RESCHED, r0 | 207 | tst #_TIF_NEED_RESCHED, r0 |
208 | #ifdef CONFIG_TRACE_IRQFLAGS | 208 | #ifdef CONFIG_TRACE_IRQFLAGS |
@@ -351,7 +351,7 @@ ENTRY(system_call) | |||
351 | ! | 351 | ! |
352 | get_current_thread_info r8, r10 | 352 | get_current_thread_info r8, r10 |
353 | mov.l @(TI_FLAGS,r8), r8 | 353 | mov.l @(TI_FLAGS,r8), r8 |
354 | mov #(_TIF_SYSCALL_TRACE | _TIF_SYSCALL_AUDIT), r10 | 354 | mov #_TIF_WORK_SYSCALL_MASK, r10 |
355 | tst r10, r8 | 355 | tst r10, r8 |
356 | bf syscall_trace_entry | 356 | bf syscall_trace_entry |
357 | ! | 357 | ! |