diff options
author | Ingo Molnar <mingo@kernel.org> | 2014-06-18 12:47:03 -0400 |
---|---|---|
committer | Ingo Molnar <mingo@kernel.org> | 2014-06-18 12:47:03 -0400 |
commit | d490b3e2c23369c6adfa183d18d9a24ced247797 (patch) | |
tree | 3355c2173228ad1986299c84d22d40ce24764390 /kernel/smp.c | |
parent | ebe06187bf2aec10d537ce4595e416035367d703 (diff) | |
parent | 3882ec643997757824cd5f25180cd8a787b9dbe1 (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.c | 9 |
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 | /* |