diff options
author | Thomas Gleixner <tglx@linutronix.de> | 2013-03-21 17:49:32 -0400 |
---|---|---|
committer | Thomas Gleixner <tglx@linutronix.de> | 2013-04-08 11:39:22 -0400 |
commit | ee761f629d598579594d7e1eb8c552f3c5f71e4d (patch) | |
tree | c5661623f8420b41efc3970f1cab23e6db581f68 | |
parent | 6546327ad187238ac63d2429701b32becb096fd8 (diff) |
arch: Consolidate tsk_is_polling()
Move it to a common place. Preparatory patch for implementing
set/clear for the idle need_resched poll implementation.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Rusty Russell <rusty@rustcorp.com.au>
Cc: Paul McKenney <paulmck@linux.vnet.ibm.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Reviewed-by: Cc: Srivatsa S. Bhat <srivatsa.bhat@linux.vnet.ibm.com>
Cc: Magnus Damm <magnus.damm@gmail.com>
Link: http://lkml.kernel.org/r/20130321215233.446034505@linutronix.de
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
-rw-r--r-- | arch/alpha/include/asm/thread_info.h | 2 | ||||
-rw-r--r-- | arch/ia64/include/asm/thread_info.h | 2 | ||||
-rw-r--r-- | arch/metag/include/asm/thread_info.h | 2 | ||||
-rw-r--r-- | arch/microblaze/include/asm/thread_info.h | 1 | ||||
-rw-r--r-- | arch/mn10300/include/asm/thread_info.h | 2 | ||||
-rw-r--r-- | arch/openrisc/include/asm/thread_info.h | 2 | ||||
-rw-r--r-- | arch/parisc/include/asm/thread_info.h | 2 | ||||
-rw-r--r-- | arch/powerpc/include/asm/thread_info.h | 2 | ||||
-rw-r--r-- | arch/sh/include/asm/thread_info.h | 2 | ||||
-rw-r--r-- | arch/sparc/include/asm/thread_info_32.h | 2 | ||||
-rw-r--r-- | arch/sparc/include/asm/thread_info_64.h | 2 | ||||
-rw-r--r-- | arch/tile/include/asm/thread_info.h | 2 | ||||
-rw-r--r-- | arch/x86/include/asm/thread_info.h | 2 | ||||
-rw-r--r-- | include/linux/sched.h | 20 | ||||
-rw-r--r-- | kernel/sched/core.c | 5 |
15 files changed, 20 insertions, 30 deletions
diff --git a/arch/alpha/include/asm/thread_info.h b/arch/alpha/include/asm/thread_info.h index 1f8c72959fb6..52cd2a4a3ff4 100644 --- a/arch/alpha/include/asm/thread_info.h +++ b/arch/alpha/include/asm/thread_info.h | |||
@@ -95,8 +95,6 @@ register struct thread_info *__current_thread_info __asm__("$8"); | |||
95 | #define TS_POLLING 0x0010 /* idle task polling need_resched, | 95 | #define TS_POLLING 0x0010 /* idle task polling need_resched, |
96 | skip sending interrupt */ | 96 | skip sending interrupt */ |
97 | 97 | ||
98 | #define tsk_is_polling(t) (task_thread_info(t)->status & TS_POLLING) | ||
99 | |||
100 | #ifndef __ASSEMBLY__ | 98 | #ifndef __ASSEMBLY__ |
101 | #define HAVE_SET_RESTORE_SIGMASK 1 | 99 | #define HAVE_SET_RESTORE_SIGMASK 1 |
102 | static inline void set_restore_sigmask(void) | 100 | static inline void set_restore_sigmask(void) |
diff --git a/arch/ia64/include/asm/thread_info.h b/arch/ia64/include/asm/thread_info.h index 020d655ed082..cade13dd0299 100644 --- a/arch/ia64/include/asm/thread_info.h +++ b/arch/ia64/include/asm/thread_info.h | |||
@@ -131,8 +131,6 @@ struct thread_info { | |||
131 | #define TS_POLLING 1 /* true if in idle loop and not sleeping */ | 131 | #define TS_POLLING 1 /* true if in idle loop and not sleeping */ |
132 | #define TS_RESTORE_SIGMASK 2 /* restore signal mask in do_signal() */ | 132 | #define TS_RESTORE_SIGMASK 2 /* restore signal mask in do_signal() */ |
133 | 133 | ||
134 | #define tsk_is_polling(t) (task_thread_info(t)->status & TS_POLLING) | ||
135 | |||
136 | #ifndef __ASSEMBLY__ | 134 | #ifndef __ASSEMBLY__ |
137 | #define HAVE_SET_RESTORE_SIGMASK 1 | 135 | #define HAVE_SET_RESTORE_SIGMASK 1 |
138 | static inline void set_restore_sigmask(void) | 136 | static inline void set_restore_sigmask(void) |
diff --git a/arch/metag/include/asm/thread_info.h b/arch/metag/include/asm/thread_info.h index 0ecd34d8b5f6..7c4a33006142 100644 --- a/arch/metag/include/asm/thread_info.h +++ b/arch/metag/include/asm/thread_info.h | |||
@@ -150,6 +150,4 @@ static inline int kstack_end(void *addr) | |||
150 | #define _TIF_WORK_MASK (_TIF_ALLWORK_MASK & ~(_TIF_SYSCALL_TRACE | \ | 150 | #define _TIF_WORK_MASK (_TIF_ALLWORK_MASK & ~(_TIF_SYSCALL_TRACE | \ |
151 | _TIF_SYSCALL_AUDIT | _TIF_SINGLESTEP)) | 151 | _TIF_SYSCALL_AUDIT | _TIF_SINGLESTEP)) |
152 | 152 | ||
153 | #define tsk_is_polling(t) test_tsk_thread_flag(t, TIF_POLLING_NRFLAG) | ||
154 | |||
155 | #endif /* _ASM_THREAD_INFO_H */ | 153 | #endif /* _ASM_THREAD_INFO_H */ |
diff --git a/arch/microblaze/include/asm/thread_info.h b/arch/microblaze/include/asm/thread_info.h index 008f30433d22..de26ea6373de 100644 --- a/arch/microblaze/include/asm/thread_info.h +++ b/arch/microblaze/include/asm/thread_info.h | |||
@@ -182,7 +182,6 @@ static inline bool test_and_clear_restore_sigmask(void) | |||
182 | ti->status &= ~TS_RESTORE_SIGMASK; | 182 | ti->status &= ~TS_RESTORE_SIGMASK; |
183 | return true; | 183 | return true; |
184 | } | 184 | } |
185 | #define tsk_is_polling(t) test_tsk_thread_flag(t, TIF_POLLING_NRFLAG) | ||
186 | #endif | 185 | #endif |
187 | 186 | ||
188 | #endif /* __KERNEL__ */ | 187 | #endif /* __KERNEL__ */ |
diff --git a/arch/mn10300/include/asm/thread_info.h b/arch/mn10300/include/asm/thread_info.h index f90062b0622d..224b4262486d 100644 --- a/arch/mn10300/include/asm/thread_info.h +++ b/arch/mn10300/include/asm/thread_info.h | |||
@@ -165,8 +165,6 @@ void arch_release_thread_info(struct thread_info *ti); | |||
165 | #define _TIF_WORK_MASK 0x0000FFFE /* work to do on interrupt/exception return */ | 165 | #define _TIF_WORK_MASK 0x0000FFFE /* work to do on interrupt/exception return */ |
166 | #define _TIF_ALLWORK_MASK 0x0000FFFF /* work to do on any return to u-space */ | 166 | #define _TIF_ALLWORK_MASK 0x0000FFFF /* work to do on any return to u-space */ |
167 | 167 | ||
168 | #define tsk_is_polling(t) test_tsk_thread_flag(t, TIF_POLLING_NRFLAG) | ||
169 | |||
170 | #endif /* __KERNEL__ */ | 168 | #endif /* __KERNEL__ */ |
171 | 169 | ||
172 | #endif /* _ASM_THREAD_INFO_H */ | 170 | #endif /* _ASM_THREAD_INFO_H */ |
diff --git a/arch/openrisc/include/asm/thread_info.h b/arch/openrisc/include/asm/thread_info.h index 07f3212422ad..d797acc901e4 100644 --- a/arch/openrisc/include/asm/thread_info.h +++ b/arch/openrisc/include/asm/thread_info.h | |||
@@ -128,8 +128,6 @@ register struct thread_info *current_thread_info_reg asm("r10"); | |||
128 | /* For OpenRISC, this is anything in the LSW other than syscall trace */ | 128 | /* For OpenRISC, this is anything in the LSW other than syscall trace */ |
129 | #define _TIF_WORK_MASK (0xff & ~(_TIF_SYSCALL_TRACE|_TIF_SINGLESTEP)) | 129 | #define _TIF_WORK_MASK (0xff & ~(_TIF_SYSCALL_TRACE|_TIF_SINGLESTEP)) |
130 | 130 | ||
131 | #define tsk_is_polling(t) test_tsk_thread_flag(t, TIF_POLLING_NRFLAG) | ||
132 | |||
133 | #endif /* __KERNEL__ */ | 131 | #endif /* __KERNEL__ */ |
134 | 132 | ||
135 | #endif /* _ASM_THREAD_INFO_H */ | 133 | #endif /* _ASM_THREAD_INFO_H */ |
diff --git a/arch/parisc/include/asm/thread_info.h b/arch/parisc/include/asm/thread_info.h index d1fb79a36f3d..6182832e5b6c 100644 --- a/arch/parisc/include/asm/thread_info.h +++ b/arch/parisc/include/asm/thread_info.h | |||
@@ -77,8 +77,6 @@ struct thread_info { | |||
77 | #define _TIF_SYSCALL_TRACE_MASK (_TIF_SYSCALL_TRACE | _TIF_SINGLESTEP | \ | 77 | #define _TIF_SYSCALL_TRACE_MASK (_TIF_SYSCALL_TRACE | _TIF_SINGLESTEP | \ |
78 | _TIF_BLOCKSTEP) | 78 | _TIF_BLOCKSTEP) |
79 | 79 | ||
80 | #define tsk_is_polling(t) test_tsk_thread_flag(t, TIF_POLLING_NRFLAG) | ||
81 | |||
82 | #endif /* __KERNEL__ */ | 80 | #endif /* __KERNEL__ */ |
83 | 81 | ||
84 | #endif /* _ASM_PARISC_THREAD_INFO_H */ | 82 | #endif /* _ASM_PARISC_THREAD_INFO_H */ |
diff --git a/arch/powerpc/include/asm/thread_info.h b/arch/powerpc/include/asm/thread_info.h index 406b7b9a1341..8ceea14d6fe4 100644 --- a/arch/powerpc/include/asm/thread_info.h +++ b/arch/powerpc/include/asm/thread_info.h | |||
@@ -182,8 +182,6 @@ static inline bool test_thread_local_flags(unsigned int flags) | |||
182 | #define is_32bit_task() (1) | 182 | #define is_32bit_task() (1) |
183 | #endif | 183 | #endif |
184 | 184 | ||
185 | #define tsk_is_polling(t) test_tsk_thread_flag(t, TIF_POLLING_NRFLAG) | ||
186 | |||
187 | #endif /* !__ASSEMBLY__ */ | 185 | #endif /* !__ASSEMBLY__ */ |
188 | 186 | ||
189 | #endif /* __KERNEL__ */ | 187 | #endif /* __KERNEL__ */ |
diff --git a/arch/sh/include/asm/thread_info.h b/arch/sh/include/asm/thread_info.h index 7d5ac4e48485..45a93669289d 100644 --- a/arch/sh/include/asm/thread_info.h +++ b/arch/sh/include/asm/thread_info.h | |||
@@ -207,8 +207,6 @@ static inline bool test_and_clear_restore_sigmask(void) | |||
207 | return true; | 207 | return true; |
208 | } | 208 | } |
209 | 209 | ||
210 | #define tsk_is_polling(t) test_tsk_thread_flag(t, TIF_POLLING_NRFLAG) | ||
211 | |||
212 | #endif /* !__ASSEMBLY__ */ | 210 | #endif /* !__ASSEMBLY__ */ |
213 | 211 | ||
214 | #endif /* __KERNEL__ */ | 212 | #endif /* __KERNEL__ */ |
diff --git a/arch/sparc/include/asm/thread_info_32.h b/arch/sparc/include/asm/thread_info_32.h index 25849ae3e900..dd3807599bb9 100644 --- a/arch/sparc/include/asm/thread_info_32.h +++ b/arch/sparc/include/asm/thread_info_32.h | |||
@@ -132,8 +132,6 @@ register struct thread_info *current_thread_info_reg asm("g6"); | |||
132 | #define _TIF_DO_NOTIFY_RESUME_MASK (_TIF_NOTIFY_RESUME | \ | 132 | #define _TIF_DO_NOTIFY_RESUME_MASK (_TIF_NOTIFY_RESUME | \ |
133 | _TIF_SIGPENDING) | 133 | _TIF_SIGPENDING) |
134 | 134 | ||
135 | #define tsk_is_polling(t) test_tsk_thread_flag(t, TIF_POLLING_NRFLAG) | ||
136 | |||
137 | #endif /* __KERNEL__ */ | 135 | #endif /* __KERNEL__ */ |
138 | 136 | ||
139 | #endif /* _ASM_THREAD_INFO_H */ | 137 | #endif /* _ASM_THREAD_INFO_H */ |
diff --git a/arch/sparc/include/asm/thread_info_64.h b/arch/sparc/include/asm/thread_info_64.h index 269bd92313df..d5e504251079 100644 --- a/arch/sparc/include/asm/thread_info_64.h +++ b/arch/sparc/include/asm/thread_info_64.h | |||
@@ -256,8 +256,6 @@ static inline bool test_and_clear_restore_sigmask(void) | |||
256 | return true; | 256 | return true; |
257 | } | 257 | } |
258 | 258 | ||
259 | #define tsk_is_polling(t) test_tsk_thread_flag(t, TIF_POLLING_NRFLAG) | ||
260 | |||
261 | #define thread32_stack_is_64bit(__SP) (((__SP) & 0x1) != 0) | 259 | #define thread32_stack_is_64bit(__SP) (((__SP) & 0x1) != 0) |
262 | #define test_thread_64bit_stack(__SP) \ | 260 | #define test_thread_64bit_stack(__SP) \ |
263 | ((test_thread_flag(TIF_32BIT) && !thread32_stack_is_64bit(__SP)) ? \ | 261 | ((test_thread_flag(TIF_32BIT) && !thread32_stack_is_64bit(__SP)) ? \ |
diff --git a/arch/tile/include/asm/thread_info.h b/arch/tile/include/asm/thread_info.h index e9c670d7a7fe..ccc8ef37235c 100644 --- a/arch/tile/include/asm/thread_info.h +++ b/arch/tile/include/asm/thread_info.h | |||
@@ -153,8 +153,6 @@ extern void _cpu_idle(void); | |||
153 | #define TS_POLLING 0x0004 /* in idle loop but not sleeping */ | 153 | #define TS_POLLING 0x0004 /* in idle loop but not sleeping */ |
154 | #define TS_RESTORE_SIGMASK 0x0008 /* restore signal mask in do_signal */ | 154 | #define TS_RESTORE_SIGMASK 0x0008 /* restore signal mask in do_signal */ |
155 | 155 | ||
156 | #define tsk_is_polling(t) (task_thread_info(t)->status & TS_POLLING) | ||
157 | |||
158 | #ifndef __ASSEMBLY__ | 156 | #ifndef __ASSEMBLY__ |
159 | #define HAVE_SET_RESTORE_SIGMASK 1 | 157 | #define HAVE_SET_RESTORE_SIGMASK 1 |
160 | static inline void set_restore_sigmask(void) | 158 | static inline void set_restore_sigmask(void) |
diff --git a/arch/x86/include/asm/thread_info.h b/arch/x86/include/asm/thread_info.h index 2cd056e3ada3..a1df6e84691f 100644 --- a/arch/x86/include/asm/thread_info.h +++ b/arch/x86/include/asm/thread_info.h | |||
@@ -241,8 +241,6 @@ static inline struct thread_info *current_thread_info(void) | |||
241 | skip sending interrupt */ | 241 | skip sending interrupt */ |
242 | #define TS_RESTORE_SIGMASK 0x0008 /* restore signal mask in do_signal() */ | 242 | #define TS_RESTORE_SIGMASK 0x0008 /* restore signal mask in do_signal() */ |
243 | 243 | ||
244 | #define tsk_is_polling(t) (task_thread_info(t)->status & TS_POLLING) | ||
245 | |||
246 | #ifndef __ASSEMBLY__ | 244 | #ifndef __ASSEMBLY__ |
247 | #define HAVE_SET_RESTORE_SIGMASK 1 | 245 | #define HAVE_SET_RESTORE_SIGMASK 1 |
248 | static inline void set_restore_sigmask(void) | 246 | static inline void set_restore_sigmask(void) |
diff --git a/include/linux/sched.h b/include/linux/sched.h index d35d2b6ddbfb..6709a5813f27 100644 --- a/include/linux/sched.h +++ b/include/linux/sched.h | |||
@@ -2622,6 +2622,26 @@ static inline int spin_needbreak(spinlock_t *lock) | |||
2622 | } | 2622 | } |
2623 | 2623 | ||
2624 | /* | 2624 | /* |
2625 | * Idle thread specific functions to determine the need_resched | ||
2626 | * polling state. We have two versions, one based on TS_POLLING in | ||
2627 | * thread_info.status and one based on TIF_POLLING_NRFLAG in | ||
2628 | * thread_info.flags | ||
2629 | */ | ||
2630 | #ifdef TS_POLLING | ||
2631 | static inline int tsk_is_polling(struct task_struct *p) | ||
2632 | { | ||
2633 | return task_thread_info(p)->status & TS_POLLING; | ||
2634 | } | ||
2635 | #elif defined(TIF_POLLING_NRFLAG) | ||
2636 | static inline int tsk_is_polling(struct task_struct *p) | ||
2637 | { | ||
2638 | return test_tsk_thread_flag(p, TIF_POLLING_NRFLAG); | ||
2639 | } | ||
2640 | #else | ||
2641 | static inline int tsk_is_polling(struct task_struct *p) { return 0; } | ||
2642 | #endif | ||
2643 | |||
2644 | /* | ||
2625 | * Thread group CPU time accounting. | 2645 | * Thread group CPU time accounting. |
2626 | */ | 2646 | */ |
2627 | void thread_group_cputime(struct task_struct *tsk, struct task_cputime *times); | 2647 | void thread_group_cputime(struct task_struct *tsk, struct task_cputime *times); |
diff --git a/kernel/sched/core.c b/kernel/sched/core.c index 7f12624a393c..243a20c5cf91 100644 --- a/kernel/sched/core.c +++ b/kernel/sched/core.c | |||
@@ -512,11 +512,6 @@ static inline void init_hrtick(void) | |||
512 | * the target CPU. | 512 | * the target CPU. |
513 | */ | 513 | */ |
514 | #ifdef CONFIG_SMP | 514 | #ifdef CONFIG_SMP |
515 | |||
516 | #ifndef tsk_is_polling | ||
517 | #define tsk_is_polling(t) 0 | ||
518 | #endif | ||
519 | |||
520 | void resched_task(struct task_struct *p) | 515 | void resched_task(struct task_struct *p) |
521 | { | 516 | { |
522 | int cpu; | 517 | int cpu; |