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

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
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -751,7 +751,8 @@ static void ieee80211_set_associated(struct ieee80211_sub_if_data *sdata,
	bss_info_changed |= BSS_CHANGED_BASIC_RATES;
	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)
			mod_timer(&local->dynamic_ps_timer, jiffies +
				  msecs_to_jiffies(local->dynamic_ps_timeout));
+5 −4
Original line number Diff line number Diff line
@@ -865,9 +865,9 @@ static int ieee80211_ioctl_siwpower(struct net_device *dev,
	local->powersave = ps;
	local->dynamic_ps_timeout = timeout;

	if (sdata->u.sta.flags & IEEE80211_STA_ASSOCIATED) {
	if (!(local->hw.flags & IEEE80211_HW_NO_STACK_DYNAMIC_PS) &&
		    local->dynamic_ps_timeout > 0)
			(sdata->u.sta.flags & IEEE80211_STA_ASSOCIATED)) {
		if (local->dynamic_ps_timeout > 0)
			mod_timer(&local->dynamic_ps_timer, jiffies +
				  msecs_to_jiffies(local->dynamic_ps_timeout));
		else {
@@ -875,8 +875,9 @@ static int ieee80211_ioctl_siwpower(struct net_device *dev,
				conf->flags |= IEEE80211_CONF_PS;
			else
				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;