Hi Brian, > > @@ -644,6 +644,9 @@ static void mwifiex_usb_disconnect(struct > usb_interface *intf) > > MWIFIEX_FUNC_SHUTDOWN); > > } > > > > + if (adapter->workqueue) > > + flush_workqueue(adapter->workqueue); > > This seems like a bad fix. I'm fairly sure there's another race in here > somewhere, and at a minimum, this is fragile code. Ok. Did you mean there can be some RX work pending at this point, which can cause a similar race for rx URBs? > > Instead, can't you just move the mwifiex_usb_free() into a .cleanup_if() > or .unregister_dev() callback? That's what your other drivers (PCIe and > SDIO) use to clean up old buffers and stop bus activity; those are > called after the appropriate synchronization points; and I'm pretty sure > I've already audited those to be more or less safe. Ok. Yes, this is a better fix for this issue. I will revert the earlier fix and upstream this version. > > Brian > > > + > > mwifiex_usb_free(card); > > > > mwifiex_dbg(adapter, FATAL, > > -- > > 1.9.1 > > Thanks, Ganapathi