diff options
author | Stanislaw Gruszka <stf_xl@wp.pl> | 2013-10-05 18:15:33 +0200 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2013-10-10 13:49:28 -0400 |
commit | fdbdd25c47ac1db04a161308dfb1060869eba982 (patch) | |
tree | 6dc88a9b1c9e4fbca723c822d99a40339f9cffee /drivers/net/wireless/rt2x00/rt2x00usb.c | |
parent | 733aec6a5bd39ba34ddd0568b7f7394aec2541fb (diff) | |
download | blackbird-op-linux-fdbdd25c47ac1db04a161308dfb1060869eba982.tar.gz blackbird-op-linux-fdbdd25c47ac1db04a161308dfb1060869eba982.zip |
rt2x00: do not pause queue on flush
Pausing queue on flush make no sense since txdone procedure un-pause
queue. Before flush procedure we have to assure queue is stopped,
i.e. on receive path h/w RX is disabled, on transmit path queue is
disabled in mac80211. That conditions are true except one function:
rt2x00usb_watchdog_tx_dma(), so add stop/start queue there.
Note stop/start queue can be racy if we do this from multiple paths,
but currently we stop TX queues only on rt2x00lib_disable_radio(),
which also stop/sync watchdog, hance we have no race condition.
Signed-off-by: Stanislaw Gruszka <stf_xl@wp.pl>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net/wireless/rt2x00/rt2x00usb.c')
-rw-r--r-- | drivers/net/wireless/rt2x00/rt2x00usb.c | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/drivers/net/wireless/rt2x00/rt2x00usb.c b/drivers/net/wireless/rt2x00/rt2x00usb.c index 88289873c0cf..4e121627925d 100644 --- a/drivers/net/wireless/rt2x00/rt2x00usb.c +++ b/drivers/net/wireless/rt2x00/rt2x00usb.c @@ -523,7 +523,9 @@ static void rt2x00usb_watchdog_tx_dma(struct data_queue *queue) rt2x00_warn(queue->rt2x00dev, "TX queue %d DMA timed out, invoke forced forced reset\n", queue->qid); + rt2x00queue_stop_queue(queue); rt2x00queue_flush_queue(queue, true); + rt2x00queue_start_queue(queue); } static int rt2x00usb_dma_timeout(struct data_queue *queue) |