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 <[EMAIL PROTECTED]>
---
 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

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to