]> git.baikalelectronics.ru Git - kernel.git/commit
irqchip/keystone: Fix "scheduling while atomic" on rt
authorStrashko, Grygorii <grygorii.strashko@ti.com>
Thu, 8 Dec 2016 23:33:10 +0000 (17:33 -0600)
committerJason Cooper <jason@lakedaemon.net>
Sat, 31 Dec 2016 18:41:45 +0000 (18:41 +0000)
commitc9aa6f35d76ce9f4db40d0a9f8ea6aaee386285c
tree3cfc3afc1b2ab7947e20af088cfbf5735b24fd2e
parent8910d3073683e1a698dc9e02fca852eb33d353e1
irqchip/keystone: Fix "scheduling while atomic" on rt

The below call chain generates "scheduling while atomic" backtrace and
causes system crash when Keystone 2 IRQ chip driver is used with RT-kernel:

gic_handle_irq()
 |-__handle_domain_irq()
  |-generic_handle_irq()
   |-keystone_irq_handler()
    |-regmap_read()
     |-regmap_lock_spinlock()
      |-rt_spin_lock()

The reason is that Keystone driver dispatches IRQ using chained IRQ handler
and accesses I/O memory through syscon->regmap(mmio) which is implemented
as fast_io regmap and uses regular spinlocks for synchronization, but
spinlocks transformed to rt_mutexes on RT.

Hence, convert Keystone 2 IRQ driver to use generic irq handler instead of
chained IRQ handler. This way it will be compatible with RT kernel where it
will be forced thread IRQ handler while in non-RT kernel it still will be
executed in HW IRQ context.

Cc: Suman Anna <s-anna@ti.com>
Signed-off-by: Grygorii Strashko <grygorii.strashko@ti.com>
Tested-by: Suman Anna <s-anna@ti.com>
Link: https://lkml.kernel.org/r/20161208233310.10329-1-grygorii.strashko@ti.com
Signed-off-by: Jason Cooper <jason@lakedaemon.net>
drivers/irqchip/irq-keystone.c