aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/irqchip/irq-metag-ext.c
diff options
context:
space:
mode:
authorJames Hogan <james.hogan@imgtec.com>2014-02-25 22:05:35 +0000
committerJames Hogan <james.hogan@imgtec.com>2014-02-25 22:35:06 +0000
commitf229006ec6beabf7b844653d92fa61f025fe3dcf (patch)
tree2c255147f33bdde95fe16d56ccda2343446d6883 /drivers/irqchip/irq-metag-ext.c
parentasm-generic: add sched_setattr/sched_getattr syscalls (diff)
downloadlinux-dev-f229006ec6beabf7b844653d92fa61f025fe3dcf.tar.xz
linux-dev-f229006ec6beabf7b844653d92fa61f025fe3dcf.zip
irq-metag*: stop set_affinity vectoring to offline cpus
Fix irq_set_affinity callbacks in the Meta IRQ chip drivers to AND cpu_online_mask into the cpumask when picking a CPU to vector the interrupt to. As Thomas pointed out, the /proc/irq/$N/smp_affinity interface doesn't filter out offline CPUs, so without this patch if you offline CPU0 and set an IRQ affinity to 0x3 it vectors the interrupt onto CPU0 even though it is offline. Reported-by: Thomas Gleixner <tglx@linutronix.de> Signed-off-by: James Hogan <james.hogan@imgtec.com> Cc: Thomas Gleixner <tglx@linutronix.de> Cc: linux-metag@vger.kernel.org Cc: stable@vger.kernel.org
Diffstat (limited to 'drivers/irqchip/irq-metag-ext.c')
-rw-r--r--drivers/irqchip/irq-metag-ext.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/drivers/irqchip/irq-metag-ext.c b/drivers/irqchip/irq-metag-ext.c
index 92c41ab4dbfd..2cb474ad8809 100644
--- a/drivers/irqchip/irq-metag-ext.c
+++ b/drivers/irqchip/irq-metag-ext.c
@@ -515,7 +515,7 @@ static int meta_intc_set_affinity(struct irq_data *data,
* one cpu (the interrupt code doesn't support it), so we just
* pick the first cpu we find in 'cpumask'.
*/
- cpu = cpumask_any(cpumask);
+ cpu = cpumask_any_and(cpumask, cpu_online_mask);
thread = cpu_2_hwthread_id[cpu];
metag_out32(TBI_TRIG_VEC(TBID_SIGNUM_TR2(thread)), vec_addr);