xen/arm: Enable cpu_hotplug.c
authorStefano Stabellini <stefano.stabellini@eu.citrix.com>
Thu, 22 Oct 2015 16:20:46 +0000 (16:20 +0000)
committerDavid Vrabel <david.vrabel@citrix.com>
Fri, 23 Oct 2015 13:20:47 +0000 (14:20 +0100)
Build cpu_hotplug for ARM and ARM64 guests.

Rename arch_(un)register_cpu to xen_(un)register_cpu and provide an
empty implementation on ARM and ARM64. On x86 just call
arch_(un)register_cpu as we are already doing.

Initialize cpu_hotplug on ARM.

Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
Reviewed-by: Julien Grall <julien.grall@citrix.com>
Reviewed-by: Boris Ostrovsky <boris.ostrovsky@oracle.com>
arch/arm/include/asm/xen/hypervisor.h
arch/x86/include/asm/xen/hypervisor.h
arch/x86/xen/enlighten.c
drivers/xen/Makefile
drivers/xen/cpu_hotplug.c

index 04ff8e7b37dfd914e8319b0727aa3e8682efa0dc..95251512e2c4cbffa40c61443a659607b90e81bd 100644 (file)
@@ -26,4 +26,14 @@ void __init xen_early_init(void);
 static inline void xen_early_init(void) { return; }
 #endif
 
+#ifdef CONFIG_HOTPLUG_CPU
+static inline void xen_arch_register_cpu(int num)
+{
+}
+
+static inline void xen_arch_unregister_cpu(int num)
+{
+}
+#endif
+
 #endif /* _ASM_ARM_XEN_HYPERVISOR_H */
index d866959e5685a49dd3c455bdb7610ff5d83df544..8b2d4bea996273e1a72ee78aaa1a2b6358ccd189 100644 (file)
@@ -57,4 +57,9 @@ static inline bool xen_x2apic_para_available(void)
 }
 #endif
 
+#ifdef CONFIG_HOTPLUG_CPU
+void xen_arch_register_cpu(int num);
+void xen_arch_unregister_cpu(int num);
+#endif
+
 #endif /* _ASM_X86_XEN_HYPERVISOR_H */
index 993b7a71386d53f79befa7a302ede2fdcbed6bd4..5774800ff583ca33916e365e408b057d982a8384 100644 (file)
@@ -75,6 +75,7 @@
 #include <asm/mwait.h>
 #include <asm/pci_x86.h>
 #include <asm/pat.h>
+#include <asm/cpu.h>
 
 #ifdef CONFIG_ACPI
 #include <linux/acpi.h>
@@ -1899,3 +1900,17 @@ const struct hypervisor_x86 x86_hyper_xen = {
        .set_cpu_features       = xen_set_cpu_features,
 };
 EXPORT_SYMBOL(x86_hyper_xen);
+
+#ifdef CONFIG_HOTPLUG_CPU
+void xen_arch_register_cpu(int num)
+{
+       arch_register_cpu(num);
+}
+EXPORT_SYMBOL(xen_arch_register_cpu);
+
+void xen_arch_unregister_cpu(int num)
+{
+       arch_unregister_cpu(num);
+}
+EXPORT_SYMBOL(xen_arch_unregister_cpu);
+#endif
index e293bc507cbcb20edbcdc0d3a0807c403de530b3..aa8a7f71f3106569b25b9959fcdedf9a8e057527 100644 (file)
@@ -1,6 +1,4 @@
-ifeq ($(filter y, $(CONFIG_ARM) $(CONFIG_ARM64)),)
 obj-$(CONFIG_HOTPLUG_CPU)              += cpu_hotplug.o
-endif
 obj-$(CONFIG_X86)                      += fallback.o
 obj-y  += grant-table.o features.o balloon.o manage.o preempt.o
 obj-y  += events/
index cc6513a176b0b07ea25990a8470f3d8ee907f507..43de1f51b53f50863c05b79e235d24233aaa33ad 100644 (file)
@@ -11,7 +11,7 @@
 static void enable_hotplug_cpu(int cpu)
 {
        if (!cpu_present(cpu))
-               arch_register_cpu(cpu);
+               xen_arch_register_cpu(cpu);
 
        set_cpu_present(cpu, true);
 }
@@ -19,7 +19,7 @@ static void enable_hotplug_cpu(int cpu)
 static void disable_hotplug_cpu(int cpu)
 {
        if (cpu_present(cpu))
-               arch_unregister_cpu(cpu);
+               xen_arch_unregister_cpu(cpu);
 
        set_cpu_present(cpu, false);
 }
@@ -102,7 +102,11 @@ static int __init setup_vcpu_hotplug_event(void)
        static struct notifier_block xsn_cpu = {
                .notifier_call = setup_cpu_watcher };
 
+#ifdef CONFIG_X86
        if (!xen_pv_domain())
+#else
+       if (!xen_domain())
+#endif
                return -ENODEV;
 
        register_xenstore_notifier(&xsn_cpu);