Merge branch 'stable/xen-pcifront-0.8.2' of git://git.kernel.org/pub/scm/linux/kernel...
[GitHub/mt8127/android_kernel_alcatel_ttab.git] / arch / x86 / xen / smp.c
index f4d01003146581c1f58cf4835ed989de7854def5..72a4c79590459f58c6532b89dd74112654cb7608 100644 (file)
@@ -28,6 +28,7 @@
 #include <asm/xen/interface.h>
 #include <asm/xen/hypercall.h>
 
+#include <xen/xen.h>
 #include <xen/page.h>
 #include <xen/events.h>
 
@@ -156,11 +157,35 @@ static void __init xen_fill_possible_map(void)
 {
        int i, rc;
 
+       if (xen_initial_domain())
+               return;
+
+       for (i = 0; i < nr_cpu_ids; i++) {
+               rc = HYPERVISOR_vcpu_op(VCPUOP_is_up, i, NULL);
+               if (rc >= 0) {
+                       num_processors++;
+                       set_cpu_possible(i, true);
+               }
+       }
+}
+
+static void __init xen_filter_cpu_maps(void)
+{
+       int i, rc;
+
+       if (!xen_initial_domain())
+               return;
+
+       num_processors = 0;
+       disabled_cpus = 0;
        for (i = 0; i < nr_cpu_ids; i++) {
                rc = HYPERVISOR_vcpu_op(VCPUOP_is_up, i, NULL);
                if (rc >= 0) {
                        num_processors++;
                        set_cpu_possible(i, true);
+               } else {
+                       set_cpu_possible(i, false);
+                       set_cpu_present(i, false);
                }
        }
 }
@@ -174,6 +199,7 @@ static void __init xen_smp_prepare_boot_cpu(void)
           old memory can be recycled */
        make_lowmem_page_readwrite(xen_initial_gdt);
 
+       xen_filter_cpu_maps();
        xen_setup_vcpu_info_placement();
 }