Messages in this thread Patch in this message | | | From | Glauber Costa <> | Subject | [PATCH 2/2] make work have a static address in do_boot_cpu() | Date | Thu, 21 Feb 2008 17:40:56 -0300 |
| |
This patch makes the work field in create_idle have a static address. Otherwise, being a stack variable, it can boild down the lockdep system.
Signed-off-by: Glauber Costa <gcosta@redhat.com> --- arch/x86/kernel/smpboot_64.c | 13 +++++++------ 1 files changed, 7 insertions(+), 6 deletions(-)
diff --git a/arch/x86/kernel/smpboot_64.c b/arch/x86/kernel/smpboot_64.c index f15b774..d79b7a8 100644 --- a/arch/x86/kernel/smpboot_64.c +++ b/arch/x86/kernel/smpboot_64.c @@ -545,6 +545,7 @@ static void __cpuinit do_fork_idle(struc complete(&c_idle->done); } +static DEFINE_PER_CPU(struct create_idle, cpu_idle); /* * Boot one CPU. */ @@ -553,12 +554,12 @@ static int __cpuinit do_boot_cpu(int cpu unsigned long boot_error; int timeout; unsigned long start_rip; - struct create_idle create_idle = { - .work = __WORK_INITIALIZER(create_idle.work, do_fork_idle), - .cpu = cpu, - .done = COMPLETION_INITIALIZER_ONSTACK(create_idle.done), - }; - struct create_idle *c_idle = &create_idle; + struct create_idle *c_idle = &per_cpu(cpu_idle, cpu); + struct work_struct *c_idle_work = &c_idle->work; + + INIT_WORK(c_idle_work, do_fork_idle); + c_idle->cpu = cpu; + init_completion(&c_idle->done); /* allocate memory for gdts of secondary cpus. Hotplug is considered */ if (!cpu_gdt_descr[cpu].address && -- 1.4.2
| |