aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/smp.c
diff options
context:
space:
mode:
authorIngo Molnar <mingo@kernel.org>2014-06-18 12:47:03 -0400
committerIngo Molnar <mingo@kernel.org>2014-06-18 12:47:03 -0400
commitd490b3e2c23369c6adfa183d18d9a24ced247797 (patch)
tree3355c2173228ad1986299c84d22d40ce24764390 /kernel/smp.c
parentebe06187bf2aec10d537ce4595e416035367d703 (diff)
parent3882ec643997757824cd5f25180cd8a787b9dbe1 (diff)
Merge branch 'timers/nohz-irq-work-v7' of git://git.kernel.org/pub/scm/linux/kernel/git/frederic/linux-dynticks into timers/nohz
Pull nohz updates from Frederic Weisbecker: " This set moves the nohz kick, used to notify a full dynticks CPU when events require tick rescheduling, out of the scheduler tick to a dedicated IPI. This debloats a bit the scheduler IPI from off-topic work that was abusing that scheduler fast path for its convenient asynchronous properties. Now the nohz kick uses irq-work for its own needs. Of course this implied quite some background infrastructure rework, including: * Clean up some irq-work internals * Implement remote irq-work * Implement nohz kick on top of remote irq-work * Move full dynticks timer enqueue notification to new kick * Move multi-task notification to new kick * Remove unecessary barriers on multi-task notification " Signed-off-by: Ingo Molnar <mingo@kernel.org>
Diffstat (limited to 'kernel/smp.c')
-rw-r--r--kernel/smp.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/kernel/smp.c b/kernel/smp.c
index 306f8180b0d5..a1812d184aed 100644
--- a/kernel/smp.c
+++ b/kernel/smp.c
@@ -3,6 +3,7 @@
3 * 3 *
4 * (C) Jens Axboe <jens.axboe@oracle.com> 2008 4 * (C) Jens Axboe <jens.axboe@oracle.com> 2008
5 */ 5 */
6#include <linux/irq_work.h>
6#include <linux/rcupdate.h> 7#include <linux/rcupdate.h>
7#include <linux/rculist.h> 8#include <linux/rculist.h>
8#include <linux/kernel.h> 9#include <linux/kernel.h>
@@ -210,6 +211,14 @@ void generic_smp_call_function_single_interrupt(void)
210 csd->func(csd->info); 211 csd->func(csd->info);
211 csd_unlock(csd); 212 csd_unlock(csd);
212 } 213 }
214
215 /*
216 * Handle irq works queued remotely by irq_work_queue_on().
217 * Smp functions above are typically synchronous so they
218 * better run first since some other CPUs may be busy waiting
219 * for them.
220 */
221 irq_work_run();
213} 222}
214 223
215/* 224/*