Commit 351f8f8e authored by Amerigo Wang's avatar Amerigo Wang Committed by Linus Torvalds

kernel: clean up USE_GENERIC_SMP_HELPERS

For arch which needs USE_GENERIC_SMP_HELPERS, it has to select
USE_GENERIC_SMP_HELPERS, rather than leaving a choice to user, since they
don't provide their own implementions.

Also, move on_each_cpu() to kernel/smp.c, it is strange to put it in
kernel/softirq.c.

For arch which doesn't use USE_GENERIC_SMP_HELPERS, e.g.  blackfin, only
on_each_cpu() is compiled.
Signed-off-by: default avatarAmerigo Wang <amwang@redhat.com>
Cc: David Howells <dhowells@redhat.com>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Ingo Molnar <mingo@elte.hu>
Cc: "H. Peter Anvin" <hpa@zytor.com>
Cc: Yinghai Lu <yinghai@kernel.org>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Randy Dunlap <randy.dunlap@oracle.com>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent b8cb464e
...@@ -203,6 +203,7 @@ endmenu ...@@ -203,6 +203,7 @@ endmenu
config SMP config SMP
bool "Symmetric multi-processing support" bool "Symmetric multi-processing support"
default y default y
select USE_GENERIC_SMP_HELPERS
depends on MN10300_PROC_MN2WS0038 || MN10300_PROC_MN2WS0050 depends on MN10300_PROC_MN2WS0038 || MN10300_PROC_MN2WS0050
---help--- ---help---
This enables support for systems with more than one CPU. If you have This enables support for systems with more than one CPU. If you have
...@@ -226,11 +227,6 @@ config NR_CPUS ...@@ -226,11 +227,6 @@ config NR_CPUS
depends on SMP depends on SMP
default "2" default "2"
config USE_GENERIC_SMP_HELPERS
bool
depends on SMP
default y
source "kernel/Kconfig.preempt" source "kernel/Kconfig.preempt"
config MN10300_CURRENT_IN_E2 config MN10300_CURRENT_IN_E2
......
...@@ -65,6 +65,7 @@ config X86 ...@@ -65,6 +65,7 @@ config X86
select HAVE_SPARSE_IRQ select HAVE_SPARSE_IRQ
select GENERIC_IRQ_PROBE select GENERIC_IRQ_PROBE
select GENERIC_PENDING_IRQ if SMP select GENERIC_PENDING_IRQ if SMP
select USE_GENERIC_SMP_HELPERS if SMP
config INSTRUCTION_DECODER config INSTRUCTION_DECODER
def_bool (KPROBES || PERF_EVENTS) def_bool (KPROBES || PERF_EVENTS)
...@@ -203,10 +204,6 @@ config HAVE_INTEL_TXT ...@@ -203,10 +204,6 @@ config HAVE_INTEL_TXT
def_bool y def_bool y
depends on EXPERIMENTAL && DMAR && ACPI depends on EXPERIMENTAL && DMAR && ACPI
config USE_GENERIC_SMP_HELPERS
def_bool y
depends on SMP
config X86_32_SMP config X86_32_SMP
def_bool y def_bool y
depends on X86_32 && SMP depends on X86_32 && SMP
......
...@@ -43,7 +43,7 @@ obj-$(CONFIG_RT_MUTEXES) += rtmutex.o ...@@ -43,7 +43,7 @@ obj-$(CONFIG_RT_MUTEXES) += rtmutex.o
obj-$(CONFIG_DEBUG_RT_MUTEXES) += rtmutex-debug.o obj-$(CONFIG_DEBUG_RT_MUTEXES) += rtmutex-debug.o
obj-$(CONFIG_RT_MUTEX_TESTER) += rtmutex-tester.o obj-$(CONFIG_RT_MUTEX_TESTER) += rtmutex-tester.o
obj-$(CONFIG_GENERIC_ISA_DMA) += dma.o obj-$(CONFIG_GENERIC_ISA_DMA) += dma.o
obj-$(CONFIG_USE_GENERIC_SMP_HELPERS) += smp.o obj-$(CONFIG_SMP) += smp.o
ifneq ($(CONFIG_SMP),y) ifneq ($(CONFIG_SMP),y)
obj-y += up.o obj-y += up.o
endif endif
......
...@@ -13,6 +13,7 @@ ...@@ -13,6 +13,7 @@
#include <linux/smp.h> #include <linux/smp.h>
#include <linux/cpu.h> #include <linux/cpu.h>
#ifdef CONFIG_USE_GENERIC_SMP_HELPERS
static struct { static struct {
struct list_head queue; struct list_head queue;
raw_spinlock_t lock; raw_spinlock_t lock;
...@@ -529,3 +530,21 @@ void ipi_call_unlock_irq(void) ...@@ -529,3 +530,21 @@ void ipi_call_unlock_irq(void)
{ {
raw_spin_unlock_irq(&call_function.lock); raw_spin_unlock_irq(&call_function.lock);
} }
#endif /* USE_GENERIC_SMP_HELPERS */
/*
* Call a function on all processors
*/
int on_each_cpu(void (*func) (void *info), void *info, int wait)
{
int ret = 0;
preempt_disable();
ret = smp_call_function(func, info, wait);
local_irq_disable();
func(info);
local_irq_enable();
preempt_enable();
return ret;
}
EXPORT_SYMBOL(on_each_cpu);
...@@ -885,25 +885,6 @@ static __init int spawn_ksoftirqd(void) ...@@ -885,25 +885,6 @@ static __init int spawn_ksoftirqd(void)
} }
early_initcall(spawn_ksoftirqd); early_initcall(spawn_ksoftirqd);
#ifdef CONFIG_SMP
/*
* Call a function on all processors
*/
int on_each_cpu(void (*func) (void *info), void *info, int wait)
{
int ret = 0;
preempt_disable();
ret = smp_call_function(func, info, wait);
local_irq_disable();
func(info);
local_irq_enable();
preempt_enable();
return ret;
}
EXPORT_SYMBOL(on_each_cpu);
#endif
/* /*
* [ These __weak aliases are kept in a separate compilation unit, so that * [ These __weak aliases are kept in a separate compilation unit, so that
* GCC does not inline them incorrectly. ] * GCC does not inline them incorrectly. ]
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment