On Tue, Apr 17, 2018 at 07:32:57AM -0600, Kofi Agor wrote: > Some minor changes to our patch: > > 1. We (Craig Matsuura) found that disabling/enable the txtasklet worked > better than tearing down and recreating the txtasklet each time. It also > resolved a kernel oops we were experiencing. > 2. Cleaned up the patch a bit and gave credit to the developers > 3. There's a companion patch along with the txqueue patch that I forgot > to add when I submitted the txqueue patch the first time. It resolves an > rtnl deadlock during device unregistration. This should resolve the ifdown > issue you were experiencing. I can see few problems with this patch (except that it's messy and hard to read): - it does not detect HW hung and does not reset the HW when needed as watchdog is supposed to do - it waits only 100ms for TX status for each entry what is not enough, when then TX status will show up, we will get "Got TX status for an empty queue" error, but more importantly we do not feed rate control algorithm with proper data - it push TX status to upper layers without filling it properly (what confuses rc algorithm even more) via rt2x00lib_txdone_nomatch() instead of rt2x00lib_txdone_noinfo(), which is intended for case when we have no status information. Patch can help on situation when hardware do not provide TX status for each sent frame, but there is much better way to handle this problem, see usb version of the driver i.e. rt2800usb_work_txdone(). Cheers Stanislaw