diff options
-rw-r--r-- | package/mac80211/patches/550-queue_stop_fix.patch | 62 |
1 files changed, 60 insertions, 2 deletions
diff --git a/package/mac80211/patches/550-queue_stop_fix.patch b/package/mac80211/patches/550-queue_stop_fix.patch index 44b4719a2a..8625fe38ba 100644 --- a/package/mac80211/patches/550-queue_stop_fix.patch +++ b/package/mac80211/patches/550-queue_stop_fix.patch @@ -15,6 +15,24 @@ /** * DOC: Interface list locking +@@ -314,7 +316,7 @@ static int ieee80211_open(struct net_dev + if (sdata->vif.type == NL80211_IFTYPE_STATION) + ieee80211_queue_work(&local->hw, &sdata->u.mgd.work); + +- netif_start_queue(dev); ++ netif_tx_start_all_queues(dev); + + return 0; + err_del_interface: +@@ -343,7 +345,7 @@ static int ieee80211_stop(struct net_dev + /* + * Stop TX on this interface first. + */ +- netif_stop_queue(dev); ++ netif_tx_stop_all_queues(dev); + + /* + * Now delete all active aggregation sessions. @@ -644,6 +646,37 @@ static void ieee80211_teardown_sdata(str WARN_ON(flushed); } @@ -57,7 +75,7 @@ .ndo_set_multicast_list = ieee80211_set_multicast_list, .ndo_change_mtu = ieee80211_change_mtu, .ndo_set_mac_address = eth_mac_addr, -+ .ndo_select_queue = ieee80211_monitor_select_queue, ++ .ndo_select_queue = ieee80211_netdev_select_queue, }; static const struct net_device_ops ieee80211_monitorif_ops = { @@ -237,7 +255,7 @@ - if (0 /* injected */) { - /* use AC from radiotap */ + if (!sta && ra && !is_multicast_ether_addr(ra)) { -+ sta = sta_info_get(sdata, ra); ++ sta = sta_info_get(sdata->local, ra); + if (sta) + sta_flags = get_sta_flags(sta); } @@ -320,3 +338,43 @@ + #endif /* _WME_H */ +--- a/net/mac80211/mlme.c ++++ b/net/mac80211/mlme.c +@@ -934,7 +934,7 @@ static void ieee80211_set_associated(str + ieee80211_recalc_ps(local, -1); + mutex_unlock(&local->iflist_mtx); + +- netif_start_queue(sdata->dev); ++ netif_tx_start_all_queues(sdata->dev); + netif_carrier_on(sdata->dev); + } + +@@ -1066,7 +1066,7 @@ static void ieee80211_set_disassoc(struc + * time -- we don't want the scan code to enable queues. + */ + +- netif_stop_queue(sdata->dev); ++ netif_tx_stop_all_queues(sdata->dev); + netif_carrier_off(sdata->dev); + + rcu_read_lock(); +--- a/net/mac80211/scan.c ++++ b/net/mac80211/scan.c +@@ -399,7 +399,7 @@ static int ieee80211_start_sw_scan(struc + * are handled in the scan state machine + */ + if (sdata->vif.type != NL80211_IFTYPE_STATION) +- netif_stop_queue(sdata->dev); ++ netif_tx_stop_all_queues(sdata->dev); + } + mutex_unlock(&local->iflist_mtx); + +@@ -563,7 +563,7 @@ static void ieee80211_scan_state_leave_o + continue; + + if (sdata->vif.type == NL80211_IFTYPE_STATION) { +- netif_stop_queue(sdata->dev); ++ netif_tx_stop_all_queues(sdata->dev); + if (sdata->u.mgd.associated) + ieee80211_scan_ps_enable(sdata); + } |