Commit 869717fb authored by Vivek Natarajan's avatar Vivek Natarajan Committed by John W. Linville

mac80211: A couple of fixes to dynamic power save.

a) hw_config() should not be called from siwpower() for the drivers which do not support
   dynamic powersave.
b) IEEE80211_HW_NO_STACK_DYNAMIC_PS needs to be verified in set_associated() also before
   enabling the power save timers.
Signed-off-by: default avatarVivek Natarajan <vnatarajan@atheros.com>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent d063ed0f
...@@ -751,7 +751,8 @@ static void ieee80211_set_associated(struct ieee80211_sub_if_data *sdata, ...@@ -751,7 +751,8 @@ static void ieee80211_set_associated(struct ieee80211_sub_if_data *sdata,
bss_info_changed |= BSS_CHANGED_BASIC_RATES; bss_info_changed |= BSS_CHANGED_BASIC_RATES;
ieee80211_bss_info_change_notify(sdata, bss_info_changed); ieee80211_bss_info_change_notify(sdata, bss_info_changed);
if (local->powersave) { if (local->powersave &&
!(local->hw.flags & IEEE80211_HW_NO_STACK_DYNAMIC_PS)) {
if (local->dynamic_ps_timeout > 0) if (local->dynamic_ps_timeout > 0)
mod_timer(&local->dynamic_ps_timer, jiffies + mod_timer(&local->dynamic_ps_timer, jiffies +
msecs_to_jiffies(local->dynamic_ps_timeout)); msecs_to_jiffies(local->dynamic_ps_timeout));
......
...@@ -865,9 +865,9 @@ static int ieee80211_ioctl_siwpower(struct net_device *dev, ...@@ -865,9 +865,9 @@ static int ieee80211_ioctl_siwpower(struct net_device *dev,
local->powersave = ps; local->powersave = ps;
local->dynamic_ps_timeout = timeout; local->dynamic_ps_timeout = timeout;
if (sdata->u.sta.flags & IEEE80211_STA_ASSOCIATED) { if (!(local->hw.flags & IEEE80211_HW_NO_STACK_DYNAMIC_PS) &&
if (!(local->hw.flags & IEEE80211_HW_NO_STACK_DYNAMIC_PS) && (sdata->u.sta.flags & IEEE80211_STA_ASSOCIATED)) {
local->dynamic_ps_timeout > 0) if (local->dynamic_ps_timeout > 0)
mod_timer(&local->dynamic_ps_timer, jiffies + mod_timer(&local->dynamic_ps_timer, jiffies +
msecs_to_jiffies(local->dynamic_ps_timeout)); msecs_to_jiffies(local->dynamic_ps_timeout));
else { else {
...@@ -875,8 +875,9 @@ static int ieee80211_ioctl_siwpower(struct net_device *dev, ...@@ -875,8 +875,9 @@ static int ieee80211_ioctl_siwpower(struct net_device *dev,
conf->flags |= IEEE80211_CONF_PS; conf->flags |= IEEE80211_CONF_PS;
else else
conf->flags &= ~IEEE80211_CONF_PS; conf->flags &= ~IEEE80211_CONF_PS;
ret = ieee80211_hw_config(local,
IEEE80211_CONF_CHANGE_PS);
} }
ret = ieee80211_hw_config(local, IEEE80211_CONF_CHANGE_PS);
} }
return ret; return ret;
......
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