aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/mn10300/Kconfig6
-rw-r--r--arch/x86/Kconfig5
-rw-r--r--kernel/Makefile2
-rw-r--r--kernel/smp.c19
-rw-r--r--kernel/softirq.c19
5 files changed, 22 insertions, 29 deletions
diff --git a/arch/mn10300/Kconfig b/arch/mn10300/Kconfig
index 41ba38513c89..8ed41cf2b08d 100644
--- a/arch/mn10300/Kconfig
+++ b/arch/mn10300/Kconfig
@@ -203,6 +203,7 @@ endmenu
203config SMP 203config SMP
204 bool "Symmetric multi-processing support" 204 bool "Symmetric multi-processing support"
205 default y 205 default y
206 select USE_GENERIC_SMP_HELPERS
206 depends on MN10300_PROC_MN2WS0038 || MN10300_PROC_MN2WS0050 207 depends on MN10300_PROC_MN2WS0038 || MN10300_PROC_MN2WS0050
207 ---help--- 208 ---help---
208 This enables support for systems with more than one CPU. If you have 209 This enables support for systems with more than one CPU. If you have
@@ -226,11 +227,6 @@ config NR_CPUS
226 depends on SMP 227 depends on SMP
227 default "2" 228 default "2"
228 229
229config USE_GENERIC_SMP_HELPERS
230 bool
231 depends on SMP
232 default y
233
234source "kernel/Kconfig.preempt" 230source "kernel/Kconfig.preempt"
235 231
236config MN10300_CURRENT_IN_E2 232config MN10300_CURRENT_IN_E2
diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig
index b6fccb07123e..8734db3c5830 100644
--- a/arch/x86/Kconfig
+++ b/arch/x86/Kconfig
@@ -65,6 +65,7 @@ config X86
65 select HAVE_SPARSE_IRQ 65 select HAVE_SPARSE_IRQ
66 select GENERIC_IRQ_PROBE 66 select GENERIC_IRQ_PROBE
67 select GENERIC_PENDING_IRQ if SMP 67 select GENERIC_PENDING_IRQ if SMP
68 select USE_GENERIC_SMP_HELPERS if SMP
68 69
69config INSTRUCTION_DECODER 70config INSTRUCTION_DECODER
70 def_bool (KPROBES || PERF_EVENTS) 71 def_bool (KPROBES || PERF_EVENTS)
@@ -203,10 +204,6 @@ config HAVE_INTEL_TXT
203 def_bool y 204 def_bool y
204 depends on EXPERIMENTAL && DMAR && ACPI 205 depends on EXPERIMENTAL && DMAR && ACPI
205 206
206config USE_GENERIC_SMP_HELPERS
207 def_bool y
208 depends on SMP
209
210config X86_32_SMP 207config X86_32_SMP
211 def_bool y 208 def_bool y
212 depends on X86_32 && SMP 209 depends on X86_32 && SMP
diff --git a/kernel/Makefile b/kernel/Makefile
index 5669f71dfdd5..353d3fe8ba33 100644
--- a/kernel/Makefile
+++ b/kernel/Makefile
@@ -43,7 +43,7 @@ obj-$(CONFIG_RT_MUTEXES) += rtmutex.o
43obj-$(CONFIG_DEBUG_RT_MUTEXES) += rtmutex-debug.o 43obj-$(CONFIG_DEBUG_RT_MUTEXES) += rtmutex-debug.o
44obj-$(CONFIG_RT_MUTEX_TESTER) += rtmutex-tester.o 44obj-$(CONFIG_RT_MUTEX_TESTER) += rtmutex-tester.o
45obj-$(CONFIG_GENERIC_ISA_DMA) += dma.o 45obj-$(CONFIG_GENERIC_ISA_DMA) += dma.o
46obj-$(CONFIG_USE_GENERIC_SMP_HELPERS) += smp.o 46obj-$(CONFIG_SMP) += smp.o
47ifneq ($(CONFIG_SMP),y) 47ifneq ($(CONFIG_SMP),y)
48obj-y += up.o 48obj-y += up.o
49endif 49endif
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
16static struct { 17static 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 */
538int 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}
550EXPORT_SYMBOL(on_each_cpu);
diff --git a/kernel/softirq.c b/kernel/softirq.c
index 0823778f87fc..68eb5efec388 100644
--- a/kernel/softirq.c
+++ b/kernel/softirq.c
@@ -885,25 +885,6 @@ static __init int spawn_ksoftirqd(void)
885} 885}
886early_initcall(spawn_ksoftirqd); 886early_initcall(spawn_ksoftirqd);
887 887
888#ifdef CONFIG_SMP
889/*
890 * Call a function on all processors
891 */
892int on_each_cpu(void (*func) (void *info), void *info, int wait)
893{
894 int ret = 0;
895
896 preempt_disable();
897 ret = smp_call_function(func, info, wait);
898 local_irq_disable();
899 func(info);
900 local_irq_enable();
901 preempt_enable();
902 return ret;
903}
904EXPORT_SYMBOL(on_each_cpu);
905#endif
906
907/* 888/*
908 * [ These __weak aliases are kept in a separate compilation unit, so that 889 * [ These __weak aliases are kept in a separate compilation unit, so that
909 * GCC does not inline them incorrectly. ] 890 * GCC does not inline them incorrectly. ]