# HG changeset patch
# User kaf24@xxxxxxxxxxxxxxxxxxxx
# Node ID 5ed53e973b833850eb2fcba16a361988ea133661
# Parent ae2e13795c639a450ba2133ed7759da9bdffb170
Changeset 7419 introduced a check for DOM0 before setting a bit in the
cpu_present map. This prevents domU SMP kernels without HOTPLUG_CPU
support from booting. Secondary cpus need to be present and online
before init/main.c:do_basic_setup() calls init_workqueues() (which
initializes per-cpu workqueues).
Without this patch, non HOTPLUG_CPU enabled kernels hang when flushing
cpu workqueues as the spinlock in the structure is never initialized (it
has a default value of zero which means the lock has been acquired on
x86).
Signed-off-by: Ryan Harper <ryanh@xxxxxxxxxx>
Signed-off-by: Keir Fraser <keir@xxxxxxxxxxxxx>
diff -r ae2e13795c63 -r 5ed53e973b83
linux-2.6-xen-sparse/arch/xen/kernel/smpboot.c
--- a/linux-2.6-xen-sparse/arch/xen/kernel/smpboot.c Tue Nov 1 18:13:06 2005
+++ b/linux-2.6-xen-sparse/arch/xen/kernel/smpboot.c Tue Nov 1 23:08:01 2005
@@ -236,8 +236,12 @@
make_page_readonly((void *)cpu_gdt_descr[cpu].address);
cpu_set(cpu, cpu_possible_map);
+#ifdef CONFIG_HOTPLUG_CPU
if (xen_start_info->flags & SIF_INITDOMAIN)
cpu_set(cpu, cpu_present_map);
+#else
+ cpu_set(cpu, cpu_present_map);
+#endif
vcpu_prepare(cpu);
}
@@ -265,6 +269,8 @@
cpu_online_map = cpumask_of_cpu(0);
}
+#ifdef CONFIG_HOTPLUG_CPU
+
static void vcpu_hotplug(unsigned int cpu)
{
int err;
@@ -284,11 +290,7 @@
cpu_set(cpu, cpu_present_map);
(void)cpu_up(cpu);
} else if (strcmp(state, "offline") == 0) {
-#ifdef CONFIG_HOTPLUG_CPU
(void)cpu_down(cpu);
-#else
- printk(KERN_INFO "Ignoring CPU%d hotplug request\n", cpu);
-#endif
} else {
printk(KERN_ERR "XENBUS: unknown state(%s) on CPU%d\n",
state, cpu);
@@ -337,8 +339,6 @@
}
subsys_initcall(setup_vcpu_hotplug_event);
-
-#ifdef CONFIG_HOTPLUG_CPU
int __cpu_disable(void)
{
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
|