• Strashko, Grygorii's avatar
    irqchip/keystone: Fix "scheduling while atomic" on rt · ca40b2d0
    Strashko, Grygorii authored
    
    [ Upstream commit 2f884e6e ]
    
    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 <gry...
    ca40b2d0
irq-keystone.c 6.03 KB