diff options
author | Daniel Thompson <daniel.thompson@linaro.org> | 2014-11-26 10:51:52 +0000 |
---|---|---|
committer | Daniel Thompson <daniel.thompson@linaro.org> | 2015-06-26 14:25:49 +0100 |
commit | 239efe40ba5688ba384ca6e7fa3167d19f904e0c (patch) | |
tree | f68b6442b18dcd707cecb5ae7f6cfba650c99158 /firmware | |
parent | d74f1bb1ecaae06209b57723c4ea29c708f9a7f8 (diff) |
irqchip: gic: Make gic_raise_softirq FIQ-safe
It is currently possible for FIQ handlers to re-enter gic_raise_softirq()
and lock up.
gic_raise_softirq()
lock(x);
-~-> FIQ
handle_fiq()
gic_raise_softirq()
lock(x); <-- Lockup
arch/arm/ uses IPIs to implement arch_irq_work_raise(), thus this issue
renders it difficult for FIQ handlers to safely defer work to less
restrictive calling contexts.
This patch fixes the problem by converting the cpu_map_migration_lock
into a rwlock making it safe to re-enter the function.
Note that having made it safe to re-enter gic_raise_softirq() we no
longer need to mask interrupts during gic_raise_softirq() because the
b.L migration is always performed from task context.
Signed-off-by: Daniel Thompson <daniel.thompson@linaro.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Jason Cooper <jason@lakedaemon.net>
Cc: Russell King <linux@arm.linux.org.uk>
Cc: Marc Zyngier <marc.zyngier@arm.com>
Acked-by: Nicolas Pitre <nicolas.pitre@linaro.org>
Diffstat (limited to 'firmware')
0 files changed, 0 insertions, 0 deletions