On Thu, Nov 03, 2016 at 09:15:04AM -0700, Dmitry Torokhov wrote: > On Thu, Nov 03, 2016 at 08:34:06AM +0000, Xinming Hu wrote: > > > -----Original Message----- > > > From: linux-wireless-owner@xxxxxxxxxxxxxxx > > > [mailto:linux-wireless-owner@xxxxxxxxxxxxxxx] On Behalf Of Dmitry Torokhov > > > > > > Instead please remove call to mwifiex_shutdown_drv() in the main routine > > > and "if (adapter->mwifiex_processing)" check here. > > > > > > > mwifiex_main_process will be used from interrupt or workqueue. > > Now we have disabled interrupt and flush workqueue, so > > mwifiex_main_process won't be scheduled in the future. > > But mwifiex_main_process might just running in context of last > > interrupt, so we need wait current main_process complete in > > mwifiex_shutdown_drv. > > synchronize_irq() is your friend then. Hmm, that sounds right, but IIUC, the "interrupt context" is actually only used for SDIO, and for SDIO, the driver doesn't actually have access to the IRQ number. The MMC/SDIO layer has some extra abstraction around the IRQ. So this may be more difficult than it appears. Do we need a sdio_synchronize_irq() API? Brian