projects
/
GitHub
/
MotorolaMobilityLLC
/
kernel-slsi.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
| inline |
side by side
(parent:
fb3bbd6
)
x86: disable preemption in native_smp_prepare_cpus
author
Ingo Molnar
<mingo@elte.hu>
Mon, 12 May 2008 13:44:38 +0000
(15:44 +0200)
committer
Thomas Gleixner
<tglx@linutronix.de>
Wed, 4 Jun 2008 11:11:46 +0000
(13:11 +0200)
Priit Laes reported the following warning:
Call Trace:
[<
ffffffff8022f1e1
>] warn_on_slowpath+0x51/0x63
[<
ffffffff80282e48
>] sys_ioctl+0x2d/0x5d
[<
ffffffff805185ff
>] _spin_lock+0xe/0x24
[<
ffffffff80227459
>] task_rq_lock+0x3d/0x73
[<
ffffffff805133c3
>] set_cpu_sibling_map+0x336/0x350
[<
ffffffff8021c1b8
>] read_apic_id+0x30/0x62
[<
ffffffff806d921d
>] verify_local_APIC+0x90/0x138
[<
ffffffff806d84b5
>] native_smp_prepare_cpus+0x1f9/0x305
[<
ffffffff806ce7b1
>] kernel_init+0x59/0x2d9
[<
ffffffff80518a26
>] _spin_unlock_irq+0x11/0x2b
[<
ffffffff8020bf48
>] child_rip+0xa/0x12
[<
ffffffff806ce758
>] kernel_init+0x0/0x2d9
[<
ffffffff8020bf3e
>] child_rip+0x0/0x12
fix this by generally disabling preemption in native_smp_prepare_cpus().
Reported-and-bisected-by: Priit Laes <plaes@plaes.org>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
arch/x86/kernel/smpboot.c
patch
|
blob
|
blame
|
history
diff --git
a/arch/x86/kernel/smpboot.c
b/arch/x86/kernel/smpboot.c
index 38988491c6222e99c6bb7772eb09ee0cc81fb270..56078d61c79315847ee3a2e761184846b9e1345f 100644
(file)
--- a/
arch/x86/kernel/smpboot.c
+++ b/
arch/x86/kernel/smpboot.c
@@
-1190,6
+1190,7
@@
static void __init smp_cpu_index_default(void)
*/
void __init native_smp_prepare_cpus(unsigned int max_cpus)
{
+ preempt_disable();
nmi_watchdog_default();
smp_cpu_index_default();
current_cpu_data = boot_cpu_data;
@@
-1206,7
+1207,7
@@
void __init native_smp_prepare_cpus(unsigned int max_cpus)
if (smp_sanity_check(max_cpus) < 0) {
printk(KERN_INFO "SMP disabled\n");
disable_smp();
-
return
;
+
goto out
;
}
preempt_disable();
@@
-1246,6
+1247,8
@@
void __init native_smp_prepare_cpus(unsigned int max_cpus)
printk(KERN_INFO "CPU%d: ", 0);
print_cpu_info(&cpu_data(0));
setup_boot_clock();
+out:
+ preempt_enable();
}
/*
* Early setup to make printk work.