irqchip: gicv3-its: Fix unsafe locking reported by lockdep
authorMarc Zyngier <marc.zyngier@arm.com>
Fri, 6 Mar 2015 16:37:43 +0000 (16:37 +0000)
committerJason Cooper <jason@lakedaemon.net>
Sun, 8 Mar 2015 05:33:00 +0000 (05:33 +0000)
commit3e39e8f56c1c67cdd1e8f06da0d6b7c831818c76
treeb7332e00d00a4e1f1a13b01b8da7237b644e5eb0
parente8137f4f5088d763ced1db82d3974336b76e1bd2
irqchip: gicv3-its: Fix unsafe locking reported by lockdep

When compiled with CONFIG_LOCKDEP, the kernel shouts badly, saying
that my locking is unsafe. I'm afraid the kernel is right:

       CPU0                    CPU1
       ----                    ----
  lock(&its->lock);
                               local_irq_disable();
                               lock(&irq_desc_lock_class);
                               lock(&its->lock);
  <Interrupt>
    lock(&irq_desc_lock_class);

 *** DEADLOCK ***

The fix is to always take its->lock with interrupts disabled.

Reported-by: Will Deacon <will.deacon@arm.com>
Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
Link: https://lkml.kernel.org/r/1425659870-11832-5-git-send-email-marc.zyngier@arm.com
Signed-off-by: Jason Cooper <jason@lakedaemon.net>
drivers/irqchip/irq-gic-v3-its.c