]> git.proxmox.com Git - mirror_ubuntu-jammy-kernel.git/commitdiff
iwlwifi: mvm: Fix channel switch in case of count <= 1
authorIlan Peer <ilan.peer@intel.com>
Tue, 8 Aug 2017 11:56:58 +0000 (14:56 +0300)
committerLuca Coelho <luciano.coelho@intel.com>
Fri, 18 Aug 2017 13:16:11 +0000 (16:16 +0300)
The code did not consider the case that the channel switch counter
is <= 1, which would result with an inaccurate calculation of the
time event apply time.

As the specification states that in case of counter == 0 the switch
occurs at any time after the reception the frame, and for counter == 1
the switch would happens before the next TBTT, schedule the time
event immediately.

Signed-off-by: Ilan Peer <ilan.peer@intel.com>
Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c

index 01143c491e53f07562d88ac6c2309b216df19f98..cfabe302c9c7aa34bd5039fb791e5755327763e3 100644 (file)
@@ -3875,11 +3875,16 @@ static int iwl_mvm_pre_channel_switch(struct ieee80211_hw *hw,
 
                /* Schedule the time event to a bit before beacon 1,
                 * to make sure we're in the new channel when the
-                * GO/AP arrives.
+                * GO/AP arrives. In case count <= 1 immediately schedule the
+                * TE (this might result with some packet loss or connection
+                * loss).
                 */
-               apply_time = chsw->device_timestamp +
-                       ((vif->bss_conf.beacon_int * (chsw->count - 1) -
-                         IWL_MVM_CHANNEL_SWITCH_TIME_CLIENT) * 1024);
+               if (chsw->count <= 1)
+                       apply_time = 0;
+               else
+                       apply_time = chsw->device_timestamp +
+                               ((vif->bss_conf.beacon_int * (chsw->count - 1) -
+                                 IWL_MVM_CHANNEL_SWITCH_TIME_CLIENT) * 1024);
 
                if (chsw->block_tx)
                        iwl_mvm_csa_client_absent(mvm, vif);