projects
/
openwrt
/
staging
/
blogic.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
| inline |
side by side
(parent:
c63b196
)
[S390] vdso: fix per cpu area allocation
author
Heiko Carstens
<
[email protected]
>
Fri, 24 Jul 2009 10:39:51 +0000
(12:39 +0200)
committer
Martin Schwidefsky
<
[email protected]
>
Fri, 24 Jul 2009 10:41:01 +0000
(12:41 +0200)
vdso per cpu area allocation in smp_prepare_cpus() happens with GFP_KERNEL
but irqs disabled. Triggers this one:
Badness at kernel/lockdep.c:2280
Modules linked in:
CPU: 0 Not tainted 2.6.30 #2
Process swapper (pid: 1, task:
000000003fe88000
, ksp:
000000003fe87eb8
)
Krnl PSW :
0400c00180000000
0000000000083360
(lockdep_trace_alloc+0xec/0xf8)
[...]
Call Trace:
([<
00000000000832b6
>] lockdep_trace_alloc+0x42/0xf8)
[<
00000000000b1880
>] __alloc_pages_internal+0x3e8/0x5c4
[<
00000000000b1b4a
>] __get_free_pages+0x3a/0xb0
[<
0000000000026546
>] vdso_alloc_per_cpu+0x6a/0x18c
[<
00000000005eff82
>] smp_prepare_cpus+0x322/0x594
[<
00000000005e8232
>] kernel_init+0x76/0x398
[<
000000000001bb1e
>] kernel_thread_starter+0x6/0xc
[<
000000000001bb18
>] kernel_thread_starter+0x0/0xc
Fix this by moving the allocation out of the irqs disabled section.
Reported-by: Christian Borntraeger <
[email protected]
>
Signed-off-by: Heiko Carstens <
[email protected]
>
Signed-off-by: Martin Schwidefsky <
[email protected]
>
arch/s390/kernel/smp.c
patch
|
blob
|
history
diff --git
a/arch/s390/kernel/smp.c
b/arch/s390/kernel/smp.c
index 2270730f535451f647aeea1e51abdc36ac8af542..be2cae083406206c949330ee1a267fb7136a969e 100644
(file)
--- a/
arch/s390/kernel/smp.c
+++ b/
arch/s390/kernel/smp.c
@@
-687,13
+687,14
@@
void __init smp_prepare_cpus(unsigned int max_cpus)
#ifndef CONFIG_64BIT
if (MACHINE_HAS_IEEE)
lowcore->extended_save_area_addr = (u32) save_area;
-#else
- if (vdso_alloc_per_cpu(smp_processor_id(), lowcore))
- BUG();
#endif
set_prefix((u32)(unsigned long) lowcore);
local_mcck_enable();
local_irq_enable();
+#ifdef CONFIG_64BIT
+ if (vdso_alloc_per_cpu(smp_processor_id(), &S390_lowcore))
+ BUG();
+#endif
for_each_possible_cpu(cpu)
if (cpu != smp_processor_id())
smp_create_idle(cpu);