diff options
Diffstat (limited to 'kernel/smp.c')
-rw-r--r-- | kernel/smp.c | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/kernel/smp.c b/kernel/smp.c index 12ed8b013e2d..4ec30e069987 100644 --- a/kernel/smp.c +++ b/kernel/smp.c | |||
@@ -13,6 +13,7 @@ | |||
13 | #include <linux/smp.h> | 13 | #include <linux/smp.h> |
14 | #include <linux/cpu.h> | 14 | #include <linux/cpu.h> |
15 | 15 | ||
16 | #ifdef CONFIG_USE_GENERIC_SMP_HELPERS | ||
16 | static struct { | 17 | static struct { |
17 | struct list_head queue; | 18 | struct list_head queue; |
18 | raw_spinlock_t lock; | 19 | raw_spinlock_t lock; |
@@ -529,3 +530,21 @@ void ipi_call_unlock_irq(void) | |||
529 | { | 530 | { |
530 | raw_spin_unlock_irq(&call_function.lock); | 531 | raw_spin_unlock_irq(&call_function.lock); |
531 | } | 532 | } |
533 | #endif /* USE_GENERIC_SMP_HELPERS */ | ||
534 | |||
535 | /* | ||
536 | * Call a function on all processors | ||
537 | */ | ||
538 | int on_each_cpu(void (*func) (void *info), void *info, int wait) | ||
539 | { | ||
540 | int ret = 0; | ||
541 | |||
542 | preempt_disable(); | ||
543 | ret = smp_call_function(func, info, wait); | ||
544 | local_irq_disable(); | ||
545 | func(info); | ||
546 | local_irq_enable(); | ||
547 | preempt_enable(); | ||
548 | return ret; | ||
549 | } | ||
550 | EXPORT_SYMBOL(on_each_cpu); | ||