diff options
author | Johannes Berg <johannes@sipsolutions.net> | 2009-07-30 15:43:55 -0400 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2009-08-04 16:44:18 -0400 |
commit | 056508dcb6890586745aa937e779f00fde05531b (patch) | |
tree | 978a3f9281c4a5a5e70a463e43f4e428ba2b7f32 | |
parent | b7cfc5b35eed2fe8a5c45793e6e52ef0edddc824 (diff) |
mac80211: fix powersave
Some of the recent MLME rework I did broke powersave
because the ps_sdata isn't assigned at the right time,
and the work item wasn't removed from the list before
calling ieee80211_recalc_ps(). To be more specific,
this broke the case where you'd enabled PS before
associating, either automatically or with iwconfig.
Signed-off-by: Johannes Berg <johannes@sipsolutions.net>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
-rw-r--r-- | net/mac80211/mlme.c | 13 |
1 files changed, 6 insertions, 7 deletions
diff --git a/net/mac80211/mlme.c b/net/mac80211/mlme.c index 0779ba150b26..2d5edfda867a 100644 --- a/net/mac80211/mlme.c +++ b/net/mac80211/mlme.c | |||
@@ -916,12 +916,9 @@ static void ieee80211_set_associated(struct ieee80211_sub_if_data *sdata, | |||
916 | 916 | ||
917 | ieee80211_bss_info_change_notify(sdata, bss_info_changed); | 917 | ieee80211_bss_info_change_notify(sdata, bss_info_changed); |
918 | 918 | ||
919 | /* will be same as sdata */ | 919 | mutex_lock(&local->iflist_mtx); |
920 | if (local->ps_sdata) { | 920 | ieee80211_recalc_ps(local, -1); |
921 | mutex_lock(&local->iflist_mtx); | 921 | mutex_unlock(&local->iflist_mtx); |
922 | ieee80211_recalc_ps(local, -1); | ||
923 | mutex_unlock(&local->iflist_mtx); | ||
924 | } | ||
925 | 922 | ||
926 | netif_tx_start_all_queues(sdata->dev); | 923 | netif_tx_start_all_queues(sdata->dev); |
927 | netif_carrier_on(sdata->dev); | 924 | netif_carrier_on(sdata->dev); |
@@ -1569,6 +1566,9 @@ ieee80211_rx_mgmt_assoc_resp(struct ieee80211_sub_if_data *sdata, | |||
1569 | wk->bss->cbss.bssid, | 1566 | wk->bss->cbss.bssid, |
1570 | ap_ht_cap_flags); | 1567 | ap_ht_cap_flags); |
1571 | 1568 | ||
1569 | /* delete work item -- must be before set_associated for PS */ | ||
1570 | list_del(&wk->list); | ||
1571 | |||
1572 | /* set AID and assoc capability, | 1572 | /* set AID and assoc capability, |
1573 | * ieee80211_set_associated() will tell the driver */ | 1573 | * ieee80211_set_associated() will tell the driver */ |
1574 | bss_conf->aid = aid; | 1574 | bss_conf->aid = aid; |
@@ -1582,7 +1582,6 @@ ieee80211_rx_mgmt_assoc_resp(struct ieee80211_sub_if_data *sdata, | |||
1582 | ieee80211_sta_rx_notify(sdata, (struct ieee80211_hdr *)mgmt); | 1582 | ieee80211_sta_rx_notify(sdata, (struct ieee80211_hdr *)mgmt); |
1583 | mod_beacon_timer(sdata); | 1583 | mod_beacon_timer(sdata); |
1584 | 1584 | ||
1585 | list_del(&wk->list); | ||
1586 | kfree(wk); | 1585 | kfree(wk); |
1587 | return RX_MGMT_CFG80211_ASSOC; | 1586 | return RX_MGMT_CFG80211_ASSOC; |
1588 | } | 1587 | } |