Fix bind_irq_vector() destination
authorKeir Fraser <keir.fraser@citrix.com>
Thu, 26 Aug 2010 10:16:14 +0000 (11:16 +0100)
committerKeir Fraser <keir.fraser@citrix.com>
Thu, 26 Aug 2010 10:16:14 +0000 (11:16 +0100)
The "mask" covered all online cpus in the "domain". It should be used
as destination later, instead of using "domain" directly.

Signed-off-by: Sheng Yang <sheng@linux.intel.com>
xen/arch/x86/irq.c

index 40c86b74fac780d9c1236ae506c20afba8fcfb5a..a6bb226eb3aa6ac91ea13ae0a5d3ce1adb950195 100644 (file)
@@ -86,14 +86,14 @@ static int __bind_irq_vector(int irq, int vector, cpumask_t domain)
     cpus_and(mask, domain, cpu_online_map);
     if (cpus_empty(mask))
         return -EINVAL;
-    if ((cfg->vector == vector) && cpus_equal(cfg->domain, domain))
+    if ((cfg->vector == vector) && cpus_equal(cfg->domain, mask))
         return 0;
     if (cfg->vector != IRQ_VECTOR_UNASSIGNED) 
         return -EBUSY;
     for_each_cpu_mask(cpu, mask)
         per_cpu(vector_irq, cpu)[vector] = irq;
     cfg->vector = vector;
-    cfg->domain = domain;
+    cfg->domain = mask;
     irq_status[irq] = IRQ_USED;
     if (IO_APIC_IRQ(irq))
         irq_vector[irq] = vector;