powerpc/pseries/xics: Use cpu_possible_mask rather than cpu_all_mask
authorNishanth Aravamudan <nacc@us.ibm.com>
Fri, 1 Oct 2010 11:26:18 +0000 (11:26 +0000)
committerBenjamin Herrenschmidt <benh@kernel.crashing.org>
Wed, 13 Oct 2010 05:19:22 +0000 (16:19 +1100)
Current firmware only allows us to send IRQs to the first processor or
all processors. We currently check to see if the passed in mask is equal
to the all_mask, but the firmware is only considering whether the
request is for the equivalent of the possible_mask. Thus, we think the
request is for some subset of CPUs and only assign IRQs to the first CPU
(on systems without irqbalance running) as evidenced by
/proc/interrupts. By using possible_mask instead, we account for this
and proper interleaving of interrupts occurs.

Signed-off-by: Nishanth Aravamudan <nacc@us.ibm.com>
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
arch/powerpc/platforms/pseries/xics.c

index 93834b0..7c1e342 100644 (file)
@@ -178,7 +178,7 @@ static int get_irq_server(unsigned int virq, const struct cpumask *cpumask,
        if (!distribute_irqs)
                return default_server;
 
-       if (!cpumask_equal(cpumask, cpu_all_mask)) {
+       if (!cpumask_subset(cpu_possible_mask, cpumask)) {
                int server = cpumask_first_and(cpu_online_mask, cpumask);
 
                if (server < nr_cpu_ids)