On Wed, Jun 03, 2026 at 03:05:04PM +0200, Sebastian Andrzej Siewior wrote: >sashiko complained about possible teardown problem. The scenario > > CPU 0 CPU 1 > imx_mu_isr() imx_mu_shutdown() > imx_mu_xcr_rmw(priv, IMX_MU_RCR, 0, > IMX_MU_xCR_RIEn(priv->dcfg->type, cp->idx)); > imx_mu_specific_rx() > imx_mu_xcr_rmw(priv, IMX_MU_RCR, IMX_MU_xCR_RIEn(priv->dcfg->type, 0), > 0); > free_irq() > >The RX event remains enabled because in this short window the RX event >was disabled in ->shutdown() while the interrupt was active and then >enabled again by the ISR while ->shutdown waited in free_irq(). > >This race requires timing and if happens can be problematic on shared >handlers if the "removed" channel triggers an interrupt. In this case >the irq-core will shutdown the interrupt with the "nobody cared" >message. > >Introduce imx_mu_con_priv::shutdown to signal that the channel is >shutting down. This flag is set with the lock held (by >imx_mu_xcr_clr_shut()). The unmask side uses imx_mu_xcr_set_act() which >only enables the event if the channel has not been shutdown and >serialises on the same lock. > >Signed-off-by: Sebastian Andrzej Siewior <[email protected]>
Reviewed-by: Peng Fan <[email protected]>

