Skip to content

Commit 8537bb9

Browse files
committed
nohz: Implement wide kick on top of irq work
It simplifies it and allows wide kick to be performed, even when IRQs are disabled, without an asynchronous level in the middle. This comes at a cost of some more overhead on features like perf and posix cpu timers slow-paths, which is probably not much important for nohz full users. Requested-by: Peter Zijlstra <[email protected]> Reviewed-by: Chris Metcalf <[email protected]> Cc: Christoph Lameter <[email protected]> Cc: Chris Metcalf <[email protected]> Cc: Ingo Molnar <[email protected]> Cc: Luiz Capitulino <[email protected]> Cc: Peter Zijlstra <[email protected]> Cc: Rik van Riel <[email protected]> Cc: Thomas Gleixner <[email protected]> Cc: Viresh Kumar <[email protected]> Signed-off-by: Frederic Weisbecker <[email protected]>
1 parent 5fd7a09 commit 8537bb9

File tree

1 file changed

+4
-8
lines changed

1 file changed

+4
-8
lines changed

kernel/time/tick-sched.c

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -234,24 +234,20 @@ void tick_nohz_full_kick_cpu(int cpu)
234234
irq_work_queue_on(&per_cpu(nohz_full_kick_work, cpu), cpu);
235235
}
236236

237-
static void nohz_full_kick_ipi(void *info)
238-
{
239-
/* Empty, the tick restart happens on tick_nohz_irq_exit() */
240-
}
241-
242237
/*
243238
* Kick all full dynticks CPUs in order to force these to re-evaluate
244239
* their dependency on the tick and restart it if necessary.
245240
*/
246241
void tick_nohz_full_kick_all(void)
247242
{
243+
int cpu;
244+
248245
if (!tick_nohz_full_running)
249246
return;
250247

251248
preempt_disable();
252-
smp_call_function_many(tick_nohz_full_mask,
253-
nohz_full_kick_ipi, NULL, false);
254-
tick_nohz_full_kick();
249+
for_each_cpu_and(cpu, tick_nohz_full_mask, cpu_online_mask)
250+
tick_nohz_full_kick_cpu(cpu);
255251
preempt_enable();
256252
}
257253

0 commit comments

Comments
 (0)