From: Suresh Siddha on
Workqueues are now initialized as part of the early_initcall(). So
they are available for use during cold boot process aswell.

Signed-off-by: Suresh Siddha <suresh.b.siddha(a)intel.com>
---
arch/ia64/kernel/smpboot.c | 15 ++++++---------
arch/x86/kernel/smpboot.c | 8 ++------
2 files changed, 8 insertions(+), 15 deletions(-)

Index: linux-next/arch/x86/kernel/smpboot.c
===================================================================
--- linux-next.orig/arch/x86/kernel/smpboot.c
+++ linux-next/arch/x86/kernel/smpboot.c
@@ -735,12 +735,8 @@ static int __cpuinit do_boot_cpu(int api
goto do_rest;
}

- if (!keventd_up())
- c_idle.work.func(&c_idle.work);
- else {
- schedule_work(&c_idle.work);
- wait_for_completion(&c_idle.done);
- }
+ schedule_work(&c_idle.work);
+ wait_for_completion(&c_idle.done);

if (IS_ERR(c_idle.idle)) {
printk("failed fork for CPU %d\n", cpu);
Index: linux-next/arch/ia64/kernel/smpboot.c
===================================================================
--- linux-next.orig/arch/ia64/kernel/smpboot.c
+++ linux-next/arch/ia64/kernel/smpboot.c
@@ -510,21 +510,18 @@ do_boot_cpu (int sapicid, int cpu)
.done = COMPLETION_INITIALIZER(c_idle.done),
};

+ /*
+ * We can't use kernel_thread since we must avoid to
+ * reschedule the child.
+ */
c_idle.idle = get_idle_for_cpu(cpu);
if (c_idle.idle) {
init_idle(c_idle.idle, cpu);
goto do_rest;
}

- /*
- * We can't use kernel_thread since we must avoid to reschedule the child.
- */
- if (!keventd_up())
- c_idle.work.func(&c_idle.work);
- else {
- schedule_work(&c_idle.work);
- wait_for_completion(&c_idle.done);
- }
+ schedule_work(&c_idle.work);
+ wait_for_completion(&c_idle.done);

if (IS_ERR(c_idle.idle))
panic("failed fork for CPU %d", cpu);


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