On Thu, Mar 17, 2016 at 04:26:22PM +0100, Vishal Thanki wrote:
> On Thu, Mar 17, 2016 at 03:56:43PM +0100, Stanislaw Gruszka wrote:
> > On Thu, Mar 17, 2016 at 12:55:59PM +0100, Vishal Thanki wrote:
> > > @@ -840,6 +857,8 @@ void rt2x00usb_disconnect(struct usb_interface 
> > > *usb_intf)
> > >   struct ieee80211_hw *hw = usb_get_intfdata(usb_intf);
> > >   struct rt2x00_dev *rt2x00dev = hw->priv;
> > >  
> > > + usb_kill_anchored_urbs(rt2x00dev->anchor);
> > 
> > Driver can still submit urb's after that. This should be placed
> > after we disable radio and flush queues and race conditions with
> > hrtimer rt2800usb_tx_sta_fifo_timeout() should be handled.
> > 
> 
> I think rt2x00usb_uninitialize() is a good place which gets called from
> rt2x00lib_remove_dev() and is called after the radio is disabled,
> timer is stopped, workqueue is destroyed and tasklets are killed. Please
> let me know if there is a better suggestion.

Since rt2800usb_tx_sta_fifo_read_completed() can queue txdone_work
to rt2x00dev->workqueue, killing urb's should be done before destroying
workqueue (and also before free kfifo).

Stanislaw
--
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to