From: Michal Kazior <michal.kazior@tieto.com>
To: ath10k@lists.infradead.org
Cc: linux-wireless@vger.kernel.org, Michal Kazior <michal.kazior@tieto.com>
Subject: [PATCH v3 2/2] ath10k: fix inconsistent survey reports
Date: Fri, 22 May 2015 10:18:13 +0200 [thread overview]
Message-ID: <1432282693-4553-2-git-send-email-michal.kazior@tieto.com> (raw)
In-Reply-To: <1432282693-4553-1-git-send-email-michal.kazior@tieto.com>
In some cases some channel survey data was
reported incorrect.
Channel info events were expected to come in pairs
without and with COMPLETE flag set respectively
for each channel visit during scan.
However there are deviations from this rule:
* last scan chan info and first (next) scan chan
info both have COMPLETE flag set. This was
either programmed with the intent of providing BSS
cycle count info or this is an artefact of
firmware scan state machine. Either way this is
useless due to short wraparound time and no
overflow counters,
* some channels are completed twice, e.g. I've
seen chan info for freq 2462 come twice many
times during scan. This may be some artefact of
firmware scan state machine, e.g. during band
switching.
Data provided in either of the above is now
ignored and not reported to avoid confusing the
user.
Survey dumps now include only data gathered during
scan channel visits that can be computed
correctly.
This should help make hostapd ACS more reliable.
Reported-by: Srinivasa Duvvuri <sduvvuri@chromium.org>
Signed-off-by: Michal Kazior <michal.kazior@tieto.com>
---
Notes:
v3:
* result of patch split up
* rename the var so it matches more tightly with it's purpose
* improve commit log
drivers/net/wireless/ath/ath10k/core.h | 8 ++++++++
drivers/net/wireless/ath/ath10k/wmi.c | 16 ++++++++++++----
2 files changed, 20 insertions(+), 4 deletions(-)
diff --git a/drivers/net/wireless/ath/ath10k/core.h b/drivers/net/wireless/ath/ath10k/core.h
index fb403972b1c5..d2978292b26c 100644
--- a/drivers/net/wireless/ath/ath10k/core.h
+++ b/drivers/net/wireless/ath/ath10k/core.h
@@ -696,6 +696,14 @@ struct ath10k {
u32 survey_last_cycle_count;
struct survey_info survey[ATH10K_NUM_CHANS];
+ /* Channel info events are expected to come in pairs without and with
+ * COMPLETE flag set respectively for each channel visit during scan.
+ *
+ * However there are deviations from this rule. This flag is used to
+ * avoid reporting garbage data.
+ */
+ bool ch_info_can_report_cc;
+
struct dfs_pattern_detector *dfs_detector;
unsigned long tx_paused; /* see ATH10K_TX_PAUSE_ */
diff --git a/drivers/net/wireless/ath/ath10k/wmi.c b/drivers/net/wireless/ath/ath10k/wmi.c
index 52ed48b7e5f9..7485cc517802 100644
--- a/drivers/net/wireless/ath/ath10k/wmi.c
+++ b/drivers/net/wireless/ath/ath10k/wmi.c
@@ -1636,10 +1636,6 @@ void ath10k_wmi_event_chan_info(struct ath10k *ar, struct sk_buff *skb)
}
if (cmd_flags & WMI_CHAN_INFO_FLAG_COMPLETE) {
- /* During scanning chan info is reported twice for each
- * visited channel. The reported cycle count is global
- * and per-channel cycle count must be calculated */
-
/* Worst case wraparound time is approx 24 seconds (2**31 /
* 88MHz). Since scan channel visit times are max 5 seconds
* (offchannel case) it is guaranteed there's been at most 1
@@ -1660,6 +1656,18 @@ void ath10k_wmi_event_chan_info(struct ath10k *ar, struct sk_buff *skb)
survey->filled = SURVEY_INFO_TIME |
SURVEY_INFO_TIME_BUSY |
SURVEY_INFO_NOISE_DBM;
+
+ if (!ar->ch_info_can_report_cc) {
+ /* Survey times can't be relied upon now but noise
+ * floor is still correct though.
+ */
+ survey->filled &= ~(SURVEY_INFO_TIME |
+ SURVEY_INFO_TIME_BUSY);
+ }
+
+ ar->ch_info_can_report_cc = false;
+ } else {
+ ar->ch_info_can_report_cc = true;
}
ar->survey_last_rx_clear_count = rx_clear_count;
--
2.1.4
next prev parent reply other threads:[~2015-05-22 8:18 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <CA+BoTQ=V1psOoaL1WG7vSUjSLhPnQqBUODjeB3NyWt-pMtmNFA@mail.gmail.com>
2015-05-22 8:18 ` [PATCH v3 1/2] ath10k: handle cycle counter wraparound Michal Kazior
2015-05-22 8:18 ` Michal Kazior [this message]
2015-05-22 11:36 ` Kalle Valo
2015-05-22 11:56 ` Michal Kazior
2015-05-22 12:00 ` Michal Kazior
2015-05-22 12:12 ` Kalle Valo
[not found] ` <CACZoB6-+AUWN6gBqnwgJY101jfjBkDukLYNNffbe2bWNidjJ0Q@mail.gmail.com>
2015-05-25 8:23 ` Michal Kazior
2015-05-25 12:06 ` [PATCH v4 1/3] ath10k: move cycle_count macro Michal Kazior
2015-05-25 12:06 ` [PATCH v4 2/3] ath10k: handle cycle counter wraparound Michal Kazior
2015-05-25 12:06 ` [PATCH v4 3/3] ath10k: fix inconsistent survey reports Michal Kazior
2015-05-29 14:41 ` [PATCH v4 1/3] ath10k: move cycle_count macro Kalle Valo
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1432282693-4553-2-git-send-email-michal.kazior@tieto.com \
--to=michal.kazior@tieto.com \
--cc=ath10k@lists.infradead.org \
--cc=linux-wireless@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).