x86: use cpumask_any() in mask-to-APIC-ID conversions
authorJan Beulich <jbeulich@suse.com>
Fri, 23 Aug 2013 13:04:17 +0000 (15:04 +0200)
committerJan Beulich <jbeulich@suse.com>
Fri, 23 Aug 2013 13:04:17 +0000 (15:04 +0200)
This is to avoid picking CPU0 for almost any such operation, resulting
in very uneven distribution of interrupt load.

Signed-off-by: Jan Beulich <jbeulich@suse.com>
Acked-by: Keir Fraser <keir@xen.org>
xen/arch/x86/genapic/delivery.c
xen/arch/x86/genapic/x2apic.c

index cdab3338af216ab57e8ee8271ed5a4c041933858..94eb8572d6056945cc3ebdca0a70da89dcc45396 100644 (file)
@@ -67,5 +67,5 @@ const cpumask_t *vector_allocation_cpumask_phys(int cpu)
 unsigned int cpu_mask_to_apicid_phys(const cpumask_t *cpumask)
 {
        /* As we are using single CPU as destination, pick only one CPU here */
-       return cpu_physical_id(cpumask_first(cpumask));
+       return cpu_physical_id(cpumask_any(cpumask));
 }
index d4c91495ace894a459fbb4801e60ce99fd4049d6..b2cab030ff729a4cb77b93dfac9ba27a49f5b216 100644 (file)
@@ -81,7 +81,7 @@ static const cpumask_t *vector_allocation_cpumask_x2apic_cluster(int cpu)
 
 static unsigned int cpu_mask_to_apicid_x2apic_cluster(const cpumask_t *cpumask)
 {
-    unsigned int cpu = cpumask_first(cpumask);
+    unsigned int cpu = cpumask_any(cpumask);
     unsigned int dest = per_cpu(cpu_2_logical_apicid, cpu);
     const cpumask_t *cluster_cpus = per_cpu(cluster_cpus, cpu);