at76_usb driver doesn't enable transmit queue very often -- in fact the only place where queues are being started is tx callback handler. This patch adds calls to ieee80211_start_queues to proper places, so the card will not hang in state with queues stopped. Signed-off-by: Milan Plzik <milan.plzik@xxxxxxxxx> --- drivers/net/wireless/at76_usb.c | 14 +++++++++++--- 1 files changed, 11 insertions(+), 3 deletions(-) diff --git a/drivers/net/wireless/at76_usb.c b/drivers/net/wireless/at76_usb.c index dc6edb3..13ea9ca 100644 --- a/drivers/net/wireless/at76_usb.c +++ b/drivers/net/wireless/at76_usb.c @@ -1910,8 +1910,13 @@ static void at76_dwork_hw_scan(struct work_struct *work) ieee80211_scan_completed(priv->hw); - if (is_valid_ether_addr(priv->bssid)) + if (is_valid_ether_addr(priv->bssid)) { + ieee80211_start_queues(priv->hw); at76_join(priv); + } else + ieee80211_stop_queues(priv->hw); + + ieee80211_start_queues(priv->hw); // CHECKME: ieee80211_wake_queues(priv->hw); @@ -1974,10 +1979,13 @@ static int at76_config(struct ieee80211_hw *hw, struct ieee80211_conf *conf) priv->channel = conf->channel->hw_value; - if (is_valid_ether_addr(priv->bssid)) + if (is_valid_ether_addr(priv->bssid)) { at76_join(priv); - else + ieee80211_start_queues(priv->hw); + } else { + ieee80211_stop_queues(priv->hw); at76_start_monitor(priv); + }; mutex_unlock(&priv->mtx); -- To unsubscribe from this list: send the line "unsubscribe linux-wireless" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html