|
@@ -1918,8 +1918,24 @@ static void ieee80211_rx_mgmt_beacon(struct ieee80211_sub_if_data *sdata,
|
|
|
|
|
|
rcu_read_unlock();
|
|
rcu_read_unlock();
|
|
|
|
|
|
|
|
+ /*
|
|
|
|
+ * Whenever the AP announces the HT mode change that can be
|
|
|
|
+ * 40MHz intolerant or etc., it would be safer to stop tx
|
|
|
|
+ * queues before doing hw config to avoid buffer overflow.
|
|
|
|
+ */
|
|
|
|
+ ieee80211_stop_queues_by_reason(&sdata->local->hw,
|
|
|
|
+ IEEE80211_QUEUE_STOP_REASON_CHTYPE_CHANGE);
|
|
|
|
+
|
|
|
|
+ /* flush out all packets */
|
|
|
|
+ synchronize_net();
|
|
|
|
+
|
|
|
|
+ drv_flush(local, false);
|
|
|
|
+
|
|
changed |= ieee80211_enable_ht(sdata, elems.ht_info_elem,
|
|
changed |= ieee80211_enable_ht(sdata, elems.ht_info_elem,
|
|
bssid, ap_ht_cap_flags);
|
|
bssid, ap_ht_cap_flags);
|
|
|
|
+
|
|
|
|
+ ieee80211_wake_queues_by_reason(&sdata->local->hw,
|
|
|
|
+ IEEE80211_QUEUE_STOP_REASON_CHTYPE_CHANGE);
|
|
}
|
|
}
|
|
|
|
|
|
/* Note: country IE parsing is done for us by cfg80211 */
|
|
/* Note: country IE parsing is done for us by cfg80211 */
|