|
@@ -27,7 +27,7 @@
|
|
|
|
|
|
#define IEEE80211_PROBE_DELAY (HZ / 33)
|
|
|
#define IEEE80211_CHANNEL_TIME (HZ / 33)
|
|
|
-#define IEEE80211_PASSIVE_CHANNEL_TIME (HZ / 8)
|
|
|
+#define IEEE80211_PASSIVE_CHANNEL_TIME (HZ / 9)
|
|
|
|
|
|
void ieee80211_rx_bss_put(struct ieee80211_local *local,
|
|
|
struct ieee80211_bss *bss)
|
|
@@ -535,8 +535,6 @@ static void ieee80211_scan_state_decision(struct ieee80211_local *local,
|
|
|
bool associated = false;
|
|
|
bool tx_empty = true;
|
|
|
bool bad_latency;
|
|
|
- bool listen_int_exceeded;
|
|
|
- unsigned long min_beacon_int = 0;
|
|
|
struct ieee80211_sub_if_data *sdata;
|
|
|
struct ieee80211_channel *next_chan;
|
|
|
enum mac80211_scan_state next_scan_state;
|
|
@@ -555,11 +553,6 @@ static void ieee80211_scan_state_decision(struct ieee80211_local *local,
|
|
|
if (sdata->u.mgd.associated) {
|
|
|
associated = true;
|
|
|
|
|
|
- if (sdata->vif.bss_conf.beacon_int <
|
|
|
- min_beacon_int || min_beacon_int == 0)
|
|
|
- min_beacon_int =
|
|
|
- sdata->vif.bss_conf.beacon_int;
|
|
|
-
|
|
|
if (!qdisc_all_tx_empty(sdata->dev)) {
|
|
|
tx_empty = false;
|
|
|
break;
|
|
@@ -576,34 +569,19 @@ static void ieee80211_scan_state_decision(struct ieee80211_local *local,
|
|
|
* see if we can scan another channel without interfering
|
|
|
* with the current traffic situation.
|
|
|
*
|
|
|
- * Since we don't know if the AP has pending frames for us
|
|
|
- * we can only check for our tx queues and use the current
|
|
|
- * pm_qos requirements for rx. Hence, if no tx traffic occurs
|
|
|
- * at all we will scan as many channels in a row as the pm_qos
|
|
|
- * latency allows us to. Additionally we also check for the
|
|
|
- * currently negotiated listen interval to prevent losing
|
|
|
- * frames unnecessarily.
|
|
|
- *
|
|
|
- * Otherwise switch back to the operating channel.
|
|
|
+ * Keep good latency, do not stay off-channel more than 125 ms.
|
|
|
*/
|
|
|
|
|
|
bad_latency = time_after(jiffies +
|
|
|
- ieee80211_scan_get_channel_time(next_chan),
|
|
|
- local->leave_oper_channel_time +
|
|
|
- usecs_to_jiffies(pm_qos_request(PM_QOS_NETWORK_LATENCY)));
|
|
|
-
|
|
|
- listen_int_exceeded = time_after(jiffies +
|
|
|
- ieee80211_scan_get_channel_time(next_chan),
|
|
|
- local->leave_oper_channel_time +
|
|
|
- usecs_to_jiffies(min_beacon_int * 1024) *
|
|
|
- local->hw.conf.listen_interval);
|
|
|
+ ieee80211_scan_get_channel_time(next_chan),
|
|
|
+ local->leave_oper_channel_time + HZ / 8);
|
|
|
|
|
|
if (associated && !tx_empty) {
|
|
|
if (local->scan_req->flags & NL80211_SCAN_FLAG_LOW_PRIORITY)
|
|
|
next_scan_state = SCAN_ABORT;
|
|
|
else
|
|
|
next_scan_state = SCAN_SUSPEND;
|
|
|
- } else if (associated && (bad_latency || listen_int_exceeded)) {
|
|
|
+ } else if (associated && bad_latency) {
|
|
|
next_scan_state = SCAN_SUSPEND;
|
|
|
} else {
|
|
|
next_scan_state = SCAN_SET_CHANNEL;
|