Commit 6bf2dafa authored by Eric W. Biederman's avatar Eric W. Biederman Committed by Andi Kleen

[PATCH] x86-64: Use irq_domain in ioapic_retrigger_irq

Thanks to YH Lu for spotting this.  It appears I missed this function when I
refactored allocate_irq_vector and introduced irq_domain, with the result that
all retriggered irqs would go to cpu 0 even if we were not prepared to receive
them there.

While reviewing YH's patch I also noticed that this function was missing
locking, and since I am now reading two values from two diffrent arrays that
looks like a race we might be able to hit in the real world.

Cc: Yinghai Lu <yinghai.lu@amd.com>
Signed-off-by: default avatarEric W. Biederman <ebiederm@xmission.com>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarAndi Kleen <ak@suse.de>
parent a1bae672
...@@ -1255,12 +1255,15 @@ static int ioapic_retrigger_irq(unsigned int irq) ...@@ -1255,12 +1255,15 @@ static int ioapic_retrigger_irq(unsigned int irq)
{ {
cpumask_t mask; cpumask_t mask;
unsigned vector; unsigned vector;
unsigned long flags;
spin_lock_irqsave(&vector_lock, flags);
vector = irq_vector[irq]; vector = irq_vector[irq];
cpus_clear(mask); cpus_clear(mask);
cpu_set(vector >> 8, mask); cpu_set(first_cpu(irq_domain[irq]), mask);
send_IPI_mask(mask, vector & 0xff); send_IPI_mask(mask, vector);
spin_unlock_irqrestore(&vector_lock, flags);
return 1; return 1;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment