aboutsummaryrefslogtreecommitdiffstats
path: root/net/mac80211/iface.c
diff options
context:
space:
mode:
Diffstat (limited to 'net/mac80211/iface.c')
-rw-r--r--net/mac80211/iface.c18
1 files changed, 16 insertions, 2 deletions
diff --git a/net/mac80211/iface.c b/net/mac80211/iface.c
index c9e325d2e120..e1cb22c16530 100644
--- a/net/mac80211/iface.c
+++ b/net/mac80211/iface.c
@@ -977,7 +977,11 @@ static void ieee80211_do_stop(struct ieee80211_sub_if_data *sdata,
977 if (sdata->vif.txq) { 977 if (sdata->vif.txq) {
978 struct txq_info *txqi = to_txq_info(sdata->vif.txq); 978 struct txq_info *txqi = to_txq_info(sdata->vif.txq);
979 979
980 spin_lock_bh(&txqi->queue.lock);
980 ieee80211_purge_tx_queue(&local->hw, &txqi->queue); 981 ieee80211_purge_tx_queue(&local->hw, &txqi->queue);
982 txqi->byte_cnt = 0;
983 spin_unlock_bh(&txqi->queue.lock);
984
981 atomic_set(&sdata->txqs_len[txqi->txq.ac], 0); 985 atomic_set(&sdata->txqs_len[txqi->txq.ac], 0);
982 } 986 }
983 987
@@ -1271,6 +1275,16 @@ static void ieee80211_iface_work(struct work_struct *work)
1271 } 1275 }
1272 } 1276 }
1273 mutex_unlock(&local->sta_mtx); 1277 mutex_unlock(&local->sta_mtx);
1278 } else if (ieee80211_is_action(mgmt->frame_control) &&
1279 mgmt->u.action.category == WLAN_CATEGORY_VHT) {
1280 switch (mgmt->u.action.u.vht_group_notif.action_code) {
1281 case WLAN_VHT_ACTION_GROUPID_MGMT:
1282 ieee80211_process_mu_groups(sdata, mgmt);
1283 break;
1284 default:
1285 WARN_ON(1);
1286 break;
1287 }
1274 } else if (ieee80211_is_data_qos(mgmt->frame_control)) { 1288 } else if (ieee80211_is_data_qos(mgmt->frame_control)) {
1275 struct ieee80211_hdr *hdr = (void *)mgmt; 1289 struct ieee80211_hdr *hdr = (void *)mgmt;
1276 /* 1290 /*
@@ -1747,7 +1761,7 @@ int ieee80211_if_add(struct ieee80211_local *local, const char *name,
1747 1761
1748 ret = dev_alloc_name(ndev, ndev->name); 1762 ret = dev_alloc_name(ndev, ndev->name);
1749 if (ret < 0) { 1763 if (ret < 0) {
1750 free_netdev(ndev); 1764 ieee80211_if_free(ndev);
1751 return ret; 1765 return ret;
1752 } 1766 }
1753 1767
@@ -1833,7 +1847,7 @@ int ieee80211_if_add(struct ieee80211_local *local, const char *name,
1833 1847
1834 ret = register_netdevice(ndev); 1848 ret = register_netdevice(ndev);
1835 if (ret) { 1849 if (ret) {
1836 free_netdev(ndev); 1850 ieee80211_if_free(ndev);
1837 return ret; 1851 return ret;
1838 } 1852 }
1839 } 1853 }