32 lines
1.1 KiB
Diff
32 lines
1.1 KiB
Diff
|
# HG changeset patch
|
||
|
# User Keir Fraser <keir.fraser@citrix.com>
|
||
|
# Date 1282817774 -3600
|
||
|
# Node ID 3eb5127e46365242401e37df292fbe290fa0a974
|
||
|
# Parent eccfdeb41b803d07bcb4f7fa912a8341fdb19162
|
||
|
Fix bind_irq_vector() destination
|
||
|
|
||
|
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>
|
||
|
|
||
|
--- a/xen/arch/x86/irq.c
|
||
|
+++ b/xen/arch/x86/irq.c
|
||
|
@@ -88,14 +88,14 @@ static int __bind_irq_vector(int irq, in
|
||
|
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;
|