diff options
-rw-r--r-- | include/linux/tick.h | 9 | ||||
-rw-r--r-- | kernel/time/tick-sched.c | 10 |
2 files changed, 14 insertions, 5 deletions
diff --git a/include/linux/tick.h b/include/linux/tick.h index b84773cb9f4c..8a4987f2294a 100644 --- a/include/linux/tick.h +++ b/include/linux/tick.h | |||
@@ -181,7 +181,13 @@ static inline bool tick_nohz_full_cpu(int cpu) | |||
181 | 181 | ||
182 | extern void tick_nohz_init(void); | 182 | extern void tick_nohz_init(void); |
183 | extern void __tick_nohz_full_check(void); | 183 | extern void __tick_nohz_full_check(void); |
184 | extern void tick_nohz_full_kick(void); | 184 | extern void tick_nohz_full_kick_cpu(int cpu); |
185 | |||
186 | static inline void tick_nohz_full_kick(void) | ||
187 | { | ||
188 | tick_nohz_full_kick_cpu(smp_processor_id()); | ||
189 | } | ||
190 | |||
185 | extern void tick_nohz_full_kick_all(void); | 191 | extern void tick_nohz_full_kick_all(void); |
186 | extern void __tick_nohz_task_switch(struct task_struct *tsk); | 192 | extern void __tick_nohz_task_switch(struct task_struct *tsk); |
187 | #else | 193 | #else |
@@ -189,6 +195,7 @@ static inline void tick_nohz_init(void) { } | |||
189 | static inline bool tick_nohz_full_enabled(void) { return false; } | 195 | static inline bool tick_nohz_full_enabled(void) { return false; } |
190 | static inline bool tick_nohz_full_cpu(int cpu) { return false; } | 196 | static inline bool tick_nohz_full_cpu(int cpu) { return false; } |
191 | static inline void __tick_nohz_full_check(void) { } | 197 | static inline void __tick_nohz_full_check(void) { } |
198 | static inline void tick_nohz_full_kick_cpu(int cpu) { } | ||
192 | static inline void tick_nohz_full_kick(void) { } | 199 | static inline void tick_nohz_full_kick(void) { } |
193 | static inline void tick_nohz_full_kick_all(void) { } | 200 | static inline void tick_nohz_full_kick_all(void) { } |
194 | static inline void __tick_nohz_task_switch(struct task_struct *tsk) { } | 201 | static inline void __tick_nohz_task_switch(struct task_struct *tsk) { } |
diff --git a/kernel/time/tick-sched.c b/kernel/time/tick-sched.c index 6558b7ac112d..3d63944a3eca 100644 --- a/kernel/time/tick-sched.c +++ b/kernel/time/tick-sched.c | |||
@@ -224,13 +224,15 @@ static DEFINE_PER_CPU(struct irq_work, nohz_full_kick_work) = { | |||
224 | }; | 224 | }; |
225 | 225 | ||
226 | /* | 226 | /* |
227 | * Kick the current CPU if it's full dynticks in order to force it to | 227 | * Kick the CPU if it's full dynticks in order to force it to |
228 | * re-evaluate its dependency on the tick and restart it if necessary. | 228 | * re-evaluate its dependency on the tick and restart it if necessary. |
229 | */ | 229 | */ |
230 | void tick_nohz_full_kick(void) | 230 | void tick_nohz_full_kick_cpu(int cpu) |
231 | { | 231 | { |
232 | if (tick_nohz_full_cpu(smp_processor_id())) | 232 | if (!tick_nohz_full_cpu(cpu)) |
233 | irq_work_queue(&__get_cpu_var(nohz_full_kick_work)); | 233 | return; |
234 | |||
235 | irq_work_queue_on(&per_cpu(nohz_full_kick_work, cpu), cpu); | ||
234 | } | 236 | } |
235 | 237 | ||
236 | static void nohz_full_kick_ipi(void *info) | 238 | static void nohz_full_kick_ipi(void *info) |