]> git.baikalelectronics.ru Git - kernel.git/commit
[PATCH] i386 boottime for_each_cpu broken
authorZwane Mwaikambo <zwane@arm.linux.org.uk>
Sat, 3 Sep 2005 22:56:51 +0000 (15:56 -0700)
committerLinus Torvalds <torvalds@evo.osdl.org>
Mon, 5 Sep 2005 07:06:13 +0000 (00:06 -0700)
commit885301342d5636406a38f626a78d2a95c865ef31
tree090c471fdb44d8fe88c52e95be0e8e43e31fcd5a
parent47351e1c3965e9edd6ea513d89c529065cbb0c78
[PATCH] i386 boottime for_each_cpu broken

for_each_cpu walks through all processors in cpu_possible_map, which is
defined as cpu_callout_map on i386 and isn't initialised until all
processors have been booted. This breaks things which do for_each_cpu
iterations early during boot. So, define cpu_possible_map as a bitmap with
NR_CPUS bits populated. This was triggered by a patch i'm working on which
does alloc_percpu before bringing up secondary processors.

From: Alexander Nyberg <alexn@telia.com>

i386-boottime-for_each_cpu-broken.patch
i386-boottime-for_each_cpu-broken-fix.patch

The SMP version of __alloc_percpu checks the cpu_possible_map before
allocating memory for a certain cpu.  With the above patches the BSP cpuid
is never set in cpu_possible_map which breaks CONFIG_SMP on uniprocessor
machines (as soon as someone tries to dereference something allocated via
__alloc_percpu, which in fact is never allocated since the cpu is not set
in cpu_possible_map).

Signed-off-by: Zwane Mwaikambo <zwane@arm.linux.org.uk>
Signed-off-by: Alexander Nyberg <alexn@telia.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
arch/i386/kernel/mpparse.c
arch/i386/kernel/smpboot.c
arch/i386/mach-voyager/voyager_smp.c
include/asm-i386/smp.h