]> xenbits.xensource.com Git - people/royger/linux-2.6.18-xen.git/commitdiff
xen: add missing kobject_uevent() invocations for CPU hotplug code
authorKeir Fraser <keir@xen.org>
Tue, 11 Jan 2011 15:11:23 +0000 (15:11 +0000)
committerKeir Fraser <keir@xen.org>
Tue, 11 Jan 2011 15:11:23 +0000 (15:11 +0000)
Their counterparts in drivers/base/cpu.c:store_online() got added
around 2.6.12.

Signed-off-by: Jan Beulich <jbeulich@novell.com>
drivers/xen/core/cpu_hotplug.c

index 45014c082bf0e5890a7cd59466a2d79f5fc56fdb..4cae277780f6791c7e54dbad11f59cb4cb7f78ff 100644 (file)
@@ -1,6 +1,7 @@
 #include <linux/init.h>
 #include <linux/kernel.h>
 #include <linux/sched.h>
+#include <linux/kobject.h>
 #include <linux/notifier.h>
 #include <linux/cpu.h>
 #include <xen/cpu_hotplug.h>
@@ -24,7 +25,7 @@ static int local_cpu_hotplug_request(void)
        return (current->mm != NULL);
 }
 
-static void vcpu_hotplug(unsigned int cpu)
+static void vcpu_hotplug(unsigned int cpu, struct sys_device *dev)
 {
        int err;
        char dir[32], state[32];
@@ -41,10 +42,12 @@ static void vcpu_hotplug(unsigned int cpu)
 
        if (strcmp(state, "online") == 0) {
                cpu_set(cpu, xenbus_allowed_cpumask);
-               (void)cpu_up(cpu);
+               if (!cpu_up(cpu) && dev)
+                       kobject_uevent(&dev->kobj, KOBJ_ONLINE);
        } else if (strcmp(state, "offline") == 0) {
                cpu_clear(cpu, xenbus_allowed_cpumask);
-               (void)cpu_down(cpu);
+               if (!cpu_down(cpu) && dev)
+                       kobject_uevent(&dev->kobj, KOBJ_OFFLINE);
        } else {
                printk(KERN_ERR "XENBUS: unknown state(%s) on CPU%d\n",
                       state, cpu);
@@ -60,7 +63,7 @@ static void handle_vcpu_hotplug_event(
 
        if ((cpustr = strstr(node, "cpu/")) != NULL) {
                sscanf(cpustr, "cpu/%u", &cpu);
-               vcpu_hotplug(cpu);
+               vcpu_hotplug(cpu, get_cpu_sysdev(cpu));
        }
 }
 
@@ -93,7 +96,7 @@ static int setup_cpu_watcher(struct notifier_block *notifier,
 
        if (!is_initial_xendomain()) {
                for_each_possible_cpu(i)
-                       vcpu_hotplug(i);
+                       vcpu_hotplug(i, get_cpu_sysdev(i));
                printk(KERN_INFO "Brought up %ld CPUs\n",
                       (long)num_online_cpus());
        }
@@ -132,7 +135,7 @@ int smp_suspend(void)
                        printk(KERN_CRIT "Failed to take all CPUs "
                               "down: %d.\n", err);
                        for_each_possible_cpu(cpu)
-                               vcpu_hotplug(cpu);
+                               vcpu_hotplug(cpu, NULL);
                        return err;
                }
        }
@@ -147,7 +150,7 @@ void smp_resume(void)
        for_each_possible_cpu(cpu) {
                if (cpu == 0)
                        continue;
-               vcpu_hotplug(cpu);
+               vcpu_hotplug(cpu, NULL);
        }
 }