Commit b1873300 authored by Luciano Coelho's avatar Luciano Coelho Committed by Emmanuel Grumbach
Browse files

iwlwifi: mvm: re-enable ps when monitor interfaces are removed



If a monitor interface is added and then removed, we don't reset the
mvm->ps_disabled flag, so we never re-enable power saving.  Fix that
and rearrange the code a bit.

Additionally, fix a small indentation mistake in the
iwl_mvm_power_set_pm() function declaration.

Signed-off-by: default avatarLuciano Coelho <luciano.coelho@intel.com>
Reviewed-by: default avatarJohannes Berg <johannes.berg@intel.com>
Signed-off-by: default avatarEmmanuel Grumbach <emmanuel.grumbach@intel.com>
parent 228670b2
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -776,6 +776,7 @@ static void iwl_mvm_restart_cleanup(struct iwl_mvm *mvm)
	iwl_trans_stop_device(mvm->trans);

	mvm->scan_status = IWL_MVM_SCAN_NONE;
	mvm->ps_disabled = false;

	/* just in case one was running */
	ieee80211_remain_on_channel_expired(mvm->hw);
+16 −14
Original line number Diff line number Diff line
@@ -566,8 +566,7 @@ static void iwl_mvm_power_iterator(void *_data, u8 *mac,
	}
}

static void
iwl_mvm_power_set_pm(struct iwl_mvm *mvm,
static void iwl_mvm_power_set_pm(struct iwl_mvm *mvm,
				 struct iwl_power_vifs *vifs)
{
	struct iwl_mvm_vif *bss_mvmvif = NULL;
@@ -830,7 +829,7 @@ int iwl_mvm_power_update_mac(struct iwl_mvm *mvm)
	struct iwl_power_vifs vifs = {
		.mvm = mvm,
	};
	bool ba_enable;
	bool ba_enable, disable_ps;
	int ret;

	lockdep_assert_held(&mvm->mutex);
@@ -838,15 +837,18 @@ int iwl_mvm_power_update_mac(struct iwl_mvm *mvm)
	iwl_mvm_power_set_pm(mvm, &vifs);

	/* disable PS if CAM */
	if (iwlmvm_mod_params.power_scheme == IWL_POWER_SCHEME_CAM) {
		mvm->ps_disabled = true;
	} else {
	/* don't update device power state unless we add / remove monitor */
		if (vifs.monitor_vif) {
			if (vifs.monitor_active)
				mvm->ps_disabled = true;
	disable_ps = (iwlmvm_mod_params.power_scheme == IWL_POWER_SCHEME_CAM);
	/* ...or if there is an active monitor vif */
	disable_ps |= (vifs.monitor_vif && vifs.monitor_active);

	/* update device power state if it has changed */
	if (mvm->ps_disabled != disable_ps) {
		bool old_ps_disabled = mvm->ps_disabled;

		mvm->ps_disabled = disable_ps;
		ret = iwl_mvm_power_update_device(mvm);
			if (ret)
		if (ret) {
			mvm->ps_disabled = old_ps_disabled;
			return ret;
		}
	}