2012-04-13 11:07:58

by Rajkumar Manoharan

[permalink] [raw]
Subject: [PATCH] cfg80211: increse bss expire time

The background scan completion takes more time when the station is
having heavy uplink traffic. The scan state machine decides to fall
back to home channel on every off-channel visit when there are pending
frames in tx queue. bgscan completion took ~30sec on dual band US
regulatory card.

scan period = (20 active channels * probe timeout) +
(12 passive channels * passive probe timeout) +
(32 * timeout on home channel) +
(32 * flush timeout)

Signed-off-by: Rajkumar Manoharan <[email protected]>
---
net/wireless/scan.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/net/wireless/scan.c b/net/wireless/scan.c
index fdbcfe6..1442bb6 100644
--- a/net/wireless/scan.c
+++ b/net/wireless/scan.c
@@ -18,7 +18,7 @@
#include "nl80211.h"
#include "wext-compat.h"

-#define IEEE80211_SCAN_RESULT_EXPIRE (15 * HZ)
+#define IEEE80211_SCAN_RESULT_EXPIRE (30 * HZ)

void ___cfg80211_scan_done(struct cfg80211_registered_device *rdev, bool leak)
{
--
1.7.10



2012-04-18 01:57:22

by Johannes Berg

[permalink] [raw]
Subject: Re: [PATCH] cfg80211: increse bss expire time

I see that the patch was merged, but I'll comment anyway.

On Fri, 2012-04-13 at 16:38 +0530, Rajkumar Manoharan wrote:
> The background scan completion takes more time when the station is
> having heavy uplink traffic. The scan state machine decides to fall
> back to home channel on every off-channel visit when there are pending
> frames in tx queue. bgscan completion took ~30sec on dual band US
> regulatory card.
>
> scan period = (20 active channels * probe timeout) +
> (12 passive channels * passive probe timeout) +
> (32 * timeout on home channel) +
> (32 * flush timeout)


That formula seems a bit useless :-)

> Signed-off-by: Rajkumar Manoharan <[email protected]>
> ---
> net/wireless/scan.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/net/wireless/scan.c b/net/wireless/scan.c
> index fdbcfe6..1442bb6 100644
> --- a/net/wireless/scan.c
> +++ b/net/wireless/scan.c
> @@ -18,7 +18,7 @@
> #include "nl80211.h"
> #include "wext-compat.h"
>
> -#define IEEE80211_SCAN_RESULT_EXPIRE (15 * HZ)
> +#define IEEE80211_SCAN_RESULT_EXPIRE (30 * HZ)

I'm not sure we'll ever manage to cover the entire scanning time unless
we bump this REALLY high. I'd much rather see us measuring the duration
of the scan, say per hardware, and not expire for that long. Of course
the maximum of all measurements, and take new ones every time, or
something like that. Also maybe avoid expiring while a scan is in
process.

johannes