On 2021-09-14 21:25, Linus Lüssing wrote: > From: Linus Lüssing <ll@xxxxxxxxxxxxxxxxxx> > > There is a small risk of the ath9k hw interrupts being reenabled in the > following way: > > 1) ath_reset_internal() > ... > -> disable_irq() > ... > <- returns > > 2) ath9k_tasklet() > ... > -> ath9k_hw_resume_interrupts() > ... > > 1) ath_reset_internal() continued: > -> tasklet_disable(&sc->intr_tq); (= ath9k_tasklet() off) > > By first disabling the ath9k interrupt there is a small window > afterwards which allows ath9k hw interrupts being reenabled through > the ath9k_tasklet() before we disable this tasklet in > ath_reset_internal(). Leading to having the ath9k hw interrupts enabled > during the reset, which we should avoid. I don't see a way in which interrupts can be re-enabled through the tasklet. disable_irq disables the entire PCI IRQ (not through ath9k hw registers), and they will only be re-enabled by the corresponding enable_irq call. - Felix