aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/linux/smp.h13
-rw-r--r--kernel/Makefile6
-rw-r--r--kernel/up.c18
3 files changed, 26 insertions, 11 deletions
diff --git a/include/linux/smp.h b/include/linux/smp.h
index b82466968101..715196b09d67 100644
--- a/include/linux/smp.h
+++ b/include/linux/smp.h
@@ -24,6 +24,9 @@ struct call_single_data {
24/* total number of cpus in this system (may exceed NR_CPUS) */ 24/* total number of cpus in this system (may exceed NR_CPUS) */
25extern unsigned int total_cpus; 25extern unsigned int total_cpus;
26 26
27int smp_call_function_single(int cpuid, void (*func) (void *info), void *info,
28 int wait);
29
27#ifdef CONFIG_SMP 30#ifdef CONFIG_SMP
28 31
29#include <linux/preempt.h> 32#include <linux/preempt.h>
@@ -79,8 +82,6 @@ smp_call_function_mask(cpumask_t mask, void(*func)(void *info), void *info,
79 return 0; 82 return 0;
80} 83}
81 84
82int smp_call_function_single(int cpuid, void (*func) (void *info), void *info,
83 int wait);
84void __smp_call_function_single(int cpuid, struct call_single_data *data); 85void __smp_call_function_single(int cpuid, struct call_single_data *data);
85 86
86/* 87/*
@@ -140,14 +141,6 @@ static inline int up_smp_call_function(void (*func)(void *), void *info)
140static inline void smp_send_reschedule(int cpu) { } 141static inline void smp_send_reschedule(int cpu) { }
141#define num_booting_cpus() 1 142#define num_booting_cpus() 1
142#define smp_prepare_boot_cpu() do {} while (0) 143#define smp_prepare_boot_cpu() do {} while (0)
143#define smp_call_function_single(cpuid, func, info, wait) \
144({ \
145 WARN_ON(cpuid != 0); \
146 local_irq_disable(); \
147 (func)(info); \
148 local_irq_enable(); \
149 0; \
150})
151#define smp_call_function_mask(mask, func, info, wait) \ 144#define smp_call_function_mask(mask, func, info, wait) \
152 (up_smp_call_function(func, info)) 145 (up_smp_call_function(func, info))
153#define smp_call_function_many(mask, func, info, wait) \ 146#define smp_call_function_many(mask, func, info, wait) \
diff --git a/kernel/Makefile b/kernel/Makefile
index 2921d90ce32f..2aebc4cd7878 100644
--- a/kernel/Makefile
+++ b/kernel/Makefile
@@ -40,7 +40,11 @@ obj-$(CONFIG_RT_MUTEXES) += rtmutex.o
40obj-$(CONFIG_DEBUG_RT_MUTEXES) += rtmutex-debug.o 40obj-$(CONFIG_DEBUG_RT_MUTEXES) += rtmutex-debug.o
41obj-$(CONFIG_RT_MUTEX_TESTER) += rtmutex-tester.o 41obj-$(CONFIG_RT_MUTEX_TESTER) += rtmutex-tester.o
42obj-$(CONFIG_GENERIC_ISA_DMA) += dma.o 42obj-$(CONFIG_GENERIC_ISA_DMA) += dma.o
43obj-$(CONFIG_USE_GENERIC_SMP_HELPERS) += smp.o 43ifeq ($(CONFIG_USE_GENERIC_SMP_HELPERS),y)
44obj-y += smp.o
45else
46obj-y += up.o
47endif
44obj-$(CONFIG_SMP) += spinlock.o 48obj-$(CONFIG_SMP) += spinlock.o
45obj-$(CONFIG_DEBUG_SPINLOCK) += spinlock.o 49obj-$(CONFIG_DEBUG_SPINLOCK) += spinlock.o
46obj-$(CONFIG_PROVE_LOCKING) += spinlock.o 50obj-$(CONFIG_PROVE_LOCKING) += spinlock.o
diff --git a/kernel/up.c b/kernel/up.c
new file mode 100644
index 000000000000..ce62cc9e9f71
--- /dev/null
+++ b/kernel/up.c
@@ -0,0 +1,18 @@
1/*
2 * Uniprocessor-only support functions. The counterpart to kernel/smp.c
3 */
4
5#include <linux/kernel.h>
6#include <linux/module.h>
7#include <linux/smp.h>
8
9int smp_call_function_single(int cpu, void (*func) (void *info), void *info,
10 int wait)
11{
12 WARN_ON(cpuid != 0);
13 local_irq_disable();
14 (func)(info);
15 local_irq_enable();
16 return 0;
17}
18EXPORT_SYMBOL(smp_call_function_single);