aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJuuso Oikarinen <juuso.oikarinen@nokia.com>2010-04-20 06:15:56 -0400
committerJohn W. Linville <linville@tuxdriver.com>2010-04-20 11:52:40 -0400
commit7bdfcaaff5de368a88a4f784f7283b66c17d051d (patch)
treef871cfa0a3aeb06f184e884a084b944b0c92480f
parent58b5190e740241b33fcd901855436aa5d0c5e087 (diff)
mac80211: Fix ieee80211_sta_conn_mon_timer with hw connection monitoring
When IEEE80211_HW_CONNECTION_MONITOR is configured by the driver, starting of ieee80211_sta_conn_mon_timer should be prevented, as it is then not needed. This is currently partially the case. As it seems, when a probe-response is received from the AP the timer is still restarted, thus restarting the host based connection keep-alive mechanism. These probe-responses happen at least when scanning while associated. Fix this by preventing starting of the ieee80211_sta_conn_mon_timer in the ieee80211_rx_mgmt_probe_resp function. Signed-off-by: Juuso Oikarinen <juuso.oikarinen@nokia.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
-rw-r--r--net/mac80211/mlme.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/net/mac80211/mlme.c b/net/mac80211/mlme.c
index d11a54c289a2..d811e3fa1d75 100644
--- a/net/mac80211/mlme.c
+++ b/net/mac80211/mlme.c
@@ -1330,12 +1330,17 @@ static void ieee80211_rx_mgmt_probe_resp(struct ieee80211_sub_if_data *sdata,
1330 mutex_lock(&sdata->local->iflist_mtx); 1330 mutex_lock(&sdata->local->iflist_mtx);
1331 ieee80211_recalc_ps(sdata->local, -1); 1331 ieee80211_recalc_ps(sdata->local, -1);
1332 mutex_unlock(&sdata->local->iflist_mtx); 1332 mutex_unlock(&sdata->local->iflist_mtx);
1333
1334 if (sdata->local->hw.flags & IEEE80211_HW_CONNECTION_MONITOR)
1335 return;
1336
1333 /* 1337 /*
1334 * We've received a probe response, but are not sure whether 1338 * We've received a probe response, but are not sure whether
1335 * we have or will be receiving any beacons or data, so let's 1339 * we have or will be receiving any beacons or data, so let's
1336 * schedule the timers again, just in case. 1340 * schedule the timers again, just in case.
1337 */ 1341 */
1338 mod_beacon_timer(sdata); 1342 mod_beacon_timer(sdata);
1343
1339 mod_timer(&ifmgd->conn_mon_timer, 1344 mod_timer(&ifmgd->conn_mon_timer,
1340 round_jiffies_up(jiffies + 1345 round_jiffies_up(jiffies +
1341 IEEE80211_CONNECTION_IDLE_TIME)); 1346 IEEE80211_CONNECTION_IDLE_TIME));