x86/apic: Fake primary thread mask for XEN/PV
[sfrench/cifs-2.6.git] / arch / x86 / kernel / apic / apic.c
index 760adac3d1a824bf4a87d89c44f142043fd2cb73..3cdf48493546dde7a831235c88392c604462ace6 100644 (file)
@@ -36,6 +36,8 @@
 #include <linux/smp.h>
 #include <linux/mm.h>
 
+#include <xen/xen.h>
+
 #include <asm/trace/irq_vectors.h>
 #include <asm/irq_remapping.h>
 #include <asm/pc-conf-reg.h>
@@ -2344,6 +2346,15 @@ static int __init smp_init_primary_thread_mask(void)
 {
        unsigned int cpu;
 
+       /*
+        * XEN/PV provides either none or useless topology information.
+        * Pretend that all vCPUs are primary threads.
+        */
+       if (xen_pv_domain()) {
+               cpumask_copy(&__cpu_primary_thread_mask, cpu_possible_mask);
+               return 0;
+       }
+
        for (cpu = 0; cpu < nr_logical_cpuids; cpu++)
                cpu_mark_primary_thread(cpu, cpuid_to_apicid[cpu]);
        return 0;