Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| db4ea70fb5 |
+15
-2
@@ -22,9 +22,17 @@
|
|||||||
* After this many consecutive WSM scan rejections from firmware, stop
|
* After this many consecutive WSM scan rejections from firmware, stop
|
||||||
* issuing new scans for BES2600_SCAN_BACKOFF_JIFFIES and let the state
|
* issuing new scans for BES2600_SCAN_BACKOFF_JIFFIES and let the state
|
||||||
* that's rejecting them (coex window, firmware-internal busy) clear.
|
* that's rejecting them (coex window, firmware-internal busy) clear.
|
||||||
|
*
|
||||||
|
* The backoff has to be at least as long as the natural mac80211 scan-
|
||||||
|
* retry cadence, otherwise the next attempt lands outside the window
|
||||||
|
* and bypasses the defer guard. Observed in the wild on PineTab2:
|
||||||
|
* roam-evaluation bursts at ~12 s cadence, idle background scans at
|
||||||
|
* ~5 min cadence. 30 s catches the burst and leaves the slow case
|
||||||
|
* alone (the firmware-policy state has had minutes to clear by then
|
||||||
|
* anyway).
|
||||||
*/
|
*/
|
||||||
#define BES2600_SCAN_REJECT_THRESHOLD 3
|
#define BES2600_SCAN_REJECT_THRESHOLD 3
|
||||||
#define BES2600_SCAN_BACKOFF_JIFFIES (10 * HZ)
|
#define BES2600_SCAN_BACKOFF_JIFFIES (30 * HZ)
|
||||||
|
|
||||||
static void bes2600_scan_restart_delayed(struct bes2600_vif *priv);
|
static void bes2600_scan_restart_delayed(struct bes2600_vif *priv);
|
||||||
|
|
||||||
@@ -40,7 +48,9 @@ static void bes2600_scan_restart_delayed(struct bes2600_vif *priv);
|
|||||||
* 2. We already saw >= BES2600_SCAN_REJECT_THRESHOLD consecutive
|
* 2. We already saw >= BES2600_SCAN_REJECT_THRESHOLD consecutive
|
||||||
* rejections on recent scan attempts and the backoff window has
|
* rejections on recent scan attempts and the backoff window has
|
||||||
* not yet elapsed. Whatever was rejecting them is likely still
|
* not yet elapsed. Whatever was rejecting them is likely still
|
||||||
* rejecting them; give it time.
|
* rejecting them; give it time. If the backoff has elapsed without
|
||||||
|
* a fresh reject refreshing it, the burst is over and we reset the
|
||||||
|
* count so an isolated reject doesn't immediately re-trip.
|
||||||
*
|
*
|
||||||
* Returns true if the caller should abandon the scan iteration.
|
* Returns true if the caller should abandon the scan iteration.
|
||||||
*/
|
*/
|
||||||
@@ -51,6 +61,9 @@ static bool bes2600_scan_should_defer(struct bes2600_common *hw_priv)
|
|||||||
return true;
|
return true;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
if (time_after(jiffies, hw_priv->scan.backoff_until))
|
||||||
|
hw_priv->scan.reject_count = 0;
|
||||||
|
|
||||||
if (hw_priv->scan.reject_count >= BES2600_SCAN_REJECT_THRESHOLD &&
|
if (hw_priv->scan.reject_count >= BES2600_SCAN_REJECT_THRESHOLD &&
|
||||||
time_before(jiffies, hw_priv->scan.backoff_until))
|
time_before(jiffies, hw_priv->scan.backoff_until))
|
||||||
return true;
|
return true;
|
||||||
|
|||||||
Reference in New Issue
Block a user