mac80211: schedule the actual switch of the station before CSA count 0
authorLuciano Coelho <luciano.coelho@intel.com>
Tue, 28 Oct 2014 11:33:05 +0000 (13:33 +0200)
committerJohannes Berg <johannes.berg@intel.com>
Wed, 29 Oct 2014 15:37:54 +0000 (16:37 +0100)
Due to the time it takes to process the beacon that started the CSA
process, we may be late for the switch if we try to reach exactly
beacon 0.  To avoid that, use count - 1 when calculating the switch time.

Cc: stable@vger.kernel.org
Reported-by: Jouni Malinen <j@w1.fi>
Signed-off-by: Luciano Coelho <luciano.coelho@intel.com>
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
net/mac80211/mlme.c

index 08f51c6d0953a4cd670de5b203fbf87ff1589f6c..93af0f1c9d991a52d82cbc58bcd842415b22a04a 100644 (file)
@@ -1168,7 +1168,8 @@ ieee80211_sta_process_chanswitch(struct ieee80211_sub_if_data *sdata,
                ieee80211_queue_work(&local->hw, &ifmgd->chswitch_work);
        else
                mod_timer(&ifmgd->chswitch_timer,
-                         TU_TO_EXP_TIME(csa_ie.count * cbss->beacon_interval));
+                         TU_TO_EXP_TIME((csa_ie.count - 1) *
+                                        cbss->beacon_interval));
 }
 
 static bool