diff options
author | Thomas Gleixner <tglx@linutronix.de> | 2014-03-04 20:43:41 +0000 |
---|---|---|
committer | Thomas Gleixner <tglx@linutronix.de> | 2014-04-28 21:27:15 +0200 |
commit | 8cc3cfc5ccf1680b7c88f874912b6bec2797b76b (patch) | |
tree | 33658295928340d76ca4ce6c30f488c49c7f8043 /drivers/irqchip/irq-crossbar.c | |
parent | 62a08ae2a5763aabeee98264605236b001503e0c (diff) | |
download | lwn-8cc3cfc5ccf1680b7c88f874912b6bec2797b76b.tar.gz lwn-8cc3cfc5ccf1680b7c88f874912b6bec2797b76b.zip |
irqchip: armanda: Sanitize set_irq_affinity()
The set_irq_affinity() function has two issues:
1) It has no protection against selecting an offline cpu from the
given mask.
2) It pointlessly restricts the affinity masks to have a single cpu
set. This collides with the irq migration code of arm.
irq affinity is set to core 3
core 3 goes offline
migration code sets mask to cpu_online_mask and calls the
irq_set_affinity() callback of the irq_chip which fails due to bit
0,1,2 set.
So instead of doing silly for_each_cpu() loops just pick any bit of
the mask which intersects with the online mask.
Get rid of fiddling with the default_irq_affinity as well.
[ Gregory: Fixed the access to the routing register ]
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Acked-by: Gregory CLEMENT <gregory.clement@free-electrons.com>
Tested-by: Gregory CLEMENT <gregory.clement@free-electrons.com>
Cc: Jason Cooper <jason@lakedaemon.net>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Ingo Molnar <mingo@elte.hu>
Link: http://lkml.kernel.org/r/20140304203101.088889302@linutronix.de
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Diffstat (limited to 'drivers/irqchip/irq-crossbar.c')
0 files changed, 0 insertions, 0 deletions