Message ID | 20180726135948.29160-1-sven@narfation.org (mailing list archive) |
---|---|
State | Accepted |
Commit | 3f259111583801013cb605bb4414aa529adccf1c |
Delegated to: | Kalle Valo |
Headers | show |
Series | [RESENT] ath10k: Prevent active scans on potential unusable channels | expand |
Sven Eckelmann <sven@narfation.org> wrote: > The QCA4019 hw1.0 firmware 10.4-3.2.1-00050 and 10.4-3.5.3-00053 (and most > likely all other) seem to ignore the WMI_CHAN_FLAG_DFS flag during the > scan. This results in transmission (probe requests) on channels which are > not "available" for transmissions. > > Since the firmware is closed source and nothing can be done from our side > to fix the problem in it, the driver has to work around this problem. The > WMI_CHAN_FLAG_PASSIVE seems to be interpreted by the firmware to not > scan actively on a channel unless an AP was detected on it. Simple probe > requests will then be transmitted by the STA on the channel. > > ath10k must therefore also use this flag when it queues a radar channel for > scanning. This should reduce the chance of an active scan when the channel > might be "unusable" for transmissions. > > Fixes: e8a50f8ba44b ("ath10k: introduce DFS implementation") > Signed-off-by: Sven Eckelmann <sven.eckelmann@openmesh.com> > Signed-off-by: Kalle Valo <kvalo@codeaurora.org> Patch applied to ath-next branch of ath.git, thanks. 3f2591115838 ath10k: prevent active scans on potential unusable channels
diff --git a/drivers/net/wireless/ath/ath10k/mac.c b/drivers/net/wireless/ath/ath10k/mac.c index 95243b48a179..76e9c6eaa051 100644 --- a/drivers/net/wireless/ath/ath10k/mac.c +++ b/drivers/net/wireless/ath/ath10k/mac.c @@ -3085,6 +3085,13 @@ static int ath10k_update_channel_list(struct ath10k *ar) passive = channel->flags & IEEE80211_CHAN_NO_IR; ch->passive = passive; + /* the firmware is ignoring the "radar" flag of the + * channel and is scanning actively using Probe Requests + * on "Radar detection"/DFS channels which are not + * marked as "available" + */ + ch->passive |= ch->chan_radar; + ch->freq = channel->center_freq; ch->band_center_freq1 = channel->center_freq; ch->min_power = 0;