mirror of
https://github.com/followmsi/android_kernel_google_msm.git
synced 2024-11-06 23:17:41 +00:00
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: Amerigo 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: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
b8cb464e4a
commit
351f8f8e64
5 changed files with 22 additions and 29 deletions
|
@ -203,6 +203,7 @@ endmenu
|
|||
config SMP
|
||||
bool "Symmetric multi-processing support"
|
||||
default y
|
||||
select USE_GENERIC_SMP_HELPERS
|
||||
depends on MN10300_PROC_MN2WS0038 || MN10300_PROC_MN2WS0050
|
||||
---help---
|
||||
This enables support for systems with more than one CPU. If you have
|
||||
|
@ -226,11 +227,6 @@ config NR_CPUS
|
|||
depends on SMP
|
||||
default "2"
|
||||
|
||||
config USE_GENERIC_SMP_HELPERS
|
||||
bool
|
||||
depends on SMP
|
||||
default y
|
||||
|
||||
source "kernel/Kconfig.preempt"
|
||||
|
||||
config MN10300_CURRENT_IN_E2
|
||||
|
|
|
@ -65,6 +65,7 @@ config X86
|
|||
select HAVE_SPARSE_IRQ
|
||||
select GENERIC_IRQ_PROBE
|
||||
select GENERIC_PENDING_IRQ if SMP
|
||||
select USE_GENERIC_SMP_HELPERS if SMP
|
||||
|
||||
config INSTRUCTION_DECODER
|
||||
def_bool (KPROBES || PERF_EVENTS)
|
||||
|
@ -203,10 +204,6 @@ config HAVE_INTEL_TXT
|
|||
def_bool y
|
||||
depends on EXPERIMENTAL && DMAR && ACPI
|
||||
|
||||
config USE_GENERIC_SMP_HELPERS
|
||||
def_bool y
|
||||
depends on SMP
|
||||
|
||||
config X86_32_SMP
|
||||
def_bool y
|
||||
depends on X86_32 && SMP
|
||||
|
|
|
@ -43,7 +43,7 @@ obj-$(CONFIG_RT_MUTEXES) += rtmutex.o
|
|||
obj-$(CONFIG_DEBUG_RT_MUTEXES) += rtmutex-debug.o
|
||||
obj-$(CONFIG_RT_MUTEX_TESTER) += rtmutex-tester.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)
|
||||
obj-y += up.o
|
||||
endif
|
||||
|
|
19
kernel/smp.c
19
kernel/smp.c
|
@ -13,6 +13,7 @@
|
|||
#include <linux/smp.h>
|
||||
#include <linux/cpu.h>
|
||||
|
||||
#ifdef CONFIG_USE_GENERIC_SMP_HELPERS
|
||||
static struct {
|
||||
struct list_head queue;
|
||||
raw_spinlock_t lock;
|
||||
|
@ -529,3 +530,21 @@ void ipi_call_unlock_irq(void)
|
|||
{
|
||||
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)
|
|||
}
|
||||
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
|
||||
* GCC does not inline them incorrectly. ]
|
||||
|
|
Loading…
Reference in a new issue