Commit fe3fa827 authored by Johannes Berg's avatar Johannes Berg Committed by John W. Linville

mac80211: make conf_tx non-atomic

The conf_tx callback currently needs to be atomic, this requirement
is just because it can be called from scanning. This rearranges it
slightly to only update while not scanning (which is fine, we'll be
getting beacons when associated) and thus removes the atomic
requirement.
Signed-off-by: default avatarJohannes Berg <johannes@sipsolutions.net>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent 69e6c010
...@@ -1142,7 +1142,7 @@ enum ieee80211_ampdu_mlme_action { ...@@ -1142,7 +1142,7 @@ enum ieee80211_ampdu_mlme_action {
* of assocaited station or AP. * of assocaited station or AP.
* *
* @conf_tx: Configure TX queue parameters (EDCF (aifs, cw_min, cw_max), * @conf_tx: Configure TX queue parameters (EDCF (aifs, cw_min, cw_max),
* bursting) for a hardware TX queue. Must be atomic. * bursting) for a hardware TX queue.
* *
* @get_tx_stats: Get statistics of the current TX queue status. This is used * @get_tx_stats: Get statistics of the current TX queue status. This is used
* to get number of currently queued packets (queue length), maximum queue * to get number of currently queued packets (queue length), maximum queue
......
...@@ -2872,15 +2872,18 @@ static void ieee80211_rx_mgmt_beacon(struct ieee80211_sub_if_data *sdata, ...@@ -2872,15 +2872,18 @@ static void ieee80211_rx_mgmt_beacon(struct ieee80211_sub_if_data *sdata,
memcmp(ifsta->bssid, mgmt->bssid, ETH_ALEN) != 0) memcmp(ifsta->bssid, mgmt->bssid, ETH_ALEN) != 0)
return; return;
ieee80211_sta_wmm_params(local, ifsta, elems.wmm_param,
elems.wmm_param_len);
/* Do not send changes to driver if we are scanning. This removes /* Do not send changes to driver if we are scanning. This removes
* requirement that driver's bss_info_changed function needs to be * requirement that a driver's bss_info_changed/conf_tx functions
* atomic. */ * need to be atomic.
* This is really ugly code, we should rewrite scanning and make
* all this more understandable for humans.
*/
if (local->sta_sw_scanning || local->sta_hw_scanning) if (local->sta_sw_scanning || local->sta_hw_scanning)
return; return;
ieee80211_sta_wmm_params(local, ifsta, elems.wmm_param,
elems.wmm_param_len);
if (elems.erp_info && elems.erp_info_len >= 1) if (elems.erp_info && elems.erp_info_len >= 1)
changed |= ieee80211_handle_erp_ie(sdata, elems.erp_info[0]); changed |= ieee80211_handle_erp_ie(sdata, elems.erp_info[0]);
else { else {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment