diff options
author | Johannes Berg <johannes.berg@intel.com> | 2012-03-02 09:56:59 -0500 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2012-03-05 15:53:46 -0500 |
commit | 3abead59fcdeb56df8b83288a2f5edbe6423b0bb (patch) | |
tree | dd9ee248d46e9a7fe6e583507bebc93015b8e4d6 /net/mac80211/mlme.c | |
parent | 293702a3fb75832613e2af097bdc3ac8ef775b33 (diff) |
mac80211: combine QoS with other BSS changes
When associating and particularly when disassociating
there's no need to notify the driver about changes
with multiple calls to bss_info_changed, we should
combine the QoS enabling/disabling into the same call
as otherwise the driver could get confused about QoS
suddenly getting disabled while connected.
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'net/mac80211/mlme.c')
-rw-r--r-- | net/mac80211/mlme.c | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/net/mac80211/mlme.c b/net/mac80211/mlme.c index 7190da4f2138..92c5eb124d6f 100644 --- a/net/mac80211/mlme.c +++ b/net/mac80211/mlme.c | |||
@@ -1277,7 +1277,6 @@ static void ieee80211_sta_wmm_params(struct ieee80211_local *local, | |||
1277 | 1277 | ||
1278 | /* enable WMM or activate new settings */ | 1278 | /* enable WMM or activate new settings */ |
1279 | sdata->vif.bss_conf.qos = true; | 1279 | sdata->vif.bss_conf.qos = true; |
1280 | ieee80211_bss_info_change_notify(sdata, BSS_CHANGED_QOS); | ||
1281 | } | 1280 | } |
1282 | 1281 | ||
1283 | static u32 ieee80211_handle_bss_capability(struct ieee80211_sub_if_data *sdata, | 1282 | static u32 ieee80211_handle_bss_capability(struct ieee80211_sub_if_data *sdata, |
@@ -1455,8 +1454,6 @@ static void ieee80211_set_disassoc(struct ieee80211_sub_if_data *sdata, | |||
1455 | changed |= BSS_CHANGED_ASSOC; | 1454 | changed |= BSS_CHANGED_ASSOC; |
1456 | sdata->vif.bss_conf.assoc = false; | 1455 | sdata->vif.bss_conf.assoc = false; |
1457 | 1456 | ||
1458 | ieee80211_set_wmm_default(sdata); | ||
1459 | |||
1460 | /* channel(_type) changes are handled by ieee80211_hw_config */ | 1457 | /* channel(_type) changes are handled by ieee80211_hw_config */ |
1461 | WARN_ON(!ieee80211_set_channel_type(local, sdata, NL80211_CHAN_NO_HT)); | 1458 | WARN_ON(!ieee80211_set_channel_type(local, sdata, NL80211_CHAN_NO_HT)); |
1462 | 1459 | ||
@@ -1484,10 +1481,16 @@ static void ieee80211_set_disassoc(struct ieee80211_sub_if_data *sdata, | |||
1484 | changed |= BSS_CHANGED_ARP_FILTER; | 1481 | changed |= BSS_CHANGED_ARP_FILTER; |
1485 | } | 1482 | } |
1486 | 1483 | ||
1484 | sdata->vif.bss_conf.qos = false; | ||
1485 | changed |= BSS_CHANGED_QOS; | ||
1486 | |||
1487 | /* The BSSID (not really interesting) and HT changed */ | 1487 | /* The BSSID (not really interesting) and HT changed */ |
1488 | changed |= BSS_CHANGED_BSSID | BSS_CHANGED_HT; | 1488 | changed |= BSS_CHANGED_BSSID | BSS_CHANGED_HT; |
1489 | ieee80211_bss_info_change_notify(sdata, changed); | 1489 | ieee80211_bss_info_change_notify(sdata, changed); |
1490 | 1490 | ||
1491 | /* disassociated - set to defaults now */ | ||
1492 | ieee80211_set_wmm_default(sdata, false); | ||
1493 | |||
1491 | del_timer_sync(&sdata->u.mgd.conn_mon_timer); | 1494 | del_timer_sync(&sdata->u.mgd.conn_mon_timer); |
1492 | del_timer_sync(&sdata->u.mgd.bcn_mon_timer); | 1495 | del_timer_sync(&sdata->u.mgd.bcn_mon_timer); |
1493 | del_timer_sync(&sdata->u.mgd.timer); | 1496 | del_timer_sync(&sdata->u.mgd.timer); |
@@ -2155,7 +2158,8 @@ static bool ieee80211_assoc_success(struct ieee80211_sub_if_data *sdata, | |||
2155 | ieee80211_sta_wmm_params(local, sdata, elems.wmm_param, | 2158 | ieee80211_sta_wmm_params(local, sdata, elems.wmm_param, |
2156 | elems.wmm_param_len); | 2159 | elems.wmm_param_len); |
2157 | else | 2160 | else |
2158 | ieee80211_set_wmm_default(sdata); | 2161 | ieee80211_set_wmm_default(sdata, false); |
2162 | changed |= BSS_CHANGED_QOS; | ||
2159 | 2163 | ||
2160 | if (elems.ht_info_elem && elems.wmm_param && | 2164 | if (elems.ht_info_elem && elems.wmm_param && |
2161 | (sdata->local->hw.queues >= 4) && | 2165 | (sdata->local->hw.queues >= 4) && |