aboutsummaryrefslogtreecommitdiff
path: root/arch/x86_64/kernel/smp.c
diff options
context:
space:
mode:
authorAndi Kleen <ak@suse.de>2006-11-14 16:57:46 +0100
committerAndi Kleen <andi@basil.nowhere.org>2006-11-14 16:57:46 +0100
commit8c131af1db510793f87dc43edbc8950a35370df3 (patch)
tree6d28e2cb1a645ecced3c9973b2573a0c2cdbdb48 /arch/x86_64/kernel/smp.c
parentfa18f477d0987c011cce047a7c3cd1284f547a14 (diff)
[PATCH] x86-64: Fix vgetcpu when CONFIG_HOTPLUG_CPU is disabled
The vgetcpu per CPU initialization previously relied on CPU hotplug events for all CPUs to initialize the per CPU state. That only worked only on kernels with CONFIG_HOTPLUG_CPU enabled. On the others some CPUs didn't get their state initialized properly and vgetcpu wouldn't work. Change the initialization sequence to instead run in a normal initcall (which runs after the normal CPU bootup) and initialize all running CPUs there. Later hotplug CPUs are still handled with an hotplug notifier. This actually simplifies the code somewhat. Signed-off-by: Andi Kleen <ak@suse.de>
Diffstat (limited to 'arch/x86_64/kernel/smp.c')
-rw-r--r--arch/x86_64/kernel/smp.c3
1 files changed, 1 insertions, 2 deletions
diff --git a/arch/x86_64/kernel/smp.c b/arch/x86_64/kernel/smp.c
index 4f67697f503..9f74c883568 100644
--- a/arch/x86_64/kernel/smp.c
+++ b/arch/x86_64/kernel/smp.c
@@ -376,9 +376,8 @@ int smp_call_function_single (int cpu, void (*func) (void *info), void *info,
/* prevent preemption and reschedule on another processor */
int me = get_cpu();
if (cpu == me) {
- WARN_ON(1);
put_cpu();
- return -EBUSY;
+ return 0;
}
spin_lock_bh(&call_lock);
__smp_call_function_single(cpu, func, info, nonatomic, wait);