net80211: introduce two extra ieee80211_notify_scan_done()

We have multiple problems with scanning currently, one being that
an initial scan restarts itself and we are unable to start another
scan.  wpa_supplicant in that case never shows scan results.
Starting wpa_cli you may see: <3>CTRL-EVENT-SCAN-FAILED ret=-1 retry=1
messages.
Add two extra calls to ieee80211_notify_scan_done() at the end of scans
(before possible restarts).  That will get wpa_supplicant to get
scan results and possibly start associating to a BSSID and get us out
of scan.  This is kind-of a bandaid but on short notice may help to
improve the situation for some.

Based on analysis by:	enweiwu
Submitted by:		enweiwu (initial version)
Sponsored by:		The FreeBSD Foundation
MFC after:		3 days
Tested by:		cy, (others I cannot find email/PR for anymore)
Reviewed by:		cy
Differential Revision: https://reviews.freebsd.org/D38661
This commit is contained in:
Bjoern A. Zeeb 2023-09-21 11:51:23 +00:00
parent af6aaa9005
commit 3f382eb23b

View File

@ -388,9 +388,10 @@ ieee80211_swscan_bg_scan(const struct ieee80211_scanner *scan,
* scan_start method to populate it.
*/
ss->ss_next = 0;
if (ss->ss_last != 0)
if (ss->ss_last != 0) {
ieee80211_notify_scan_done(vap);
ss->ss_ops->scan_restart(ss, vap);
else {
} else {
ss->ss_ops->scan_start(ss, vap);
#ifdef IEEE80211_DEBUG
if (ieee80211_msg_scan(vap))
@ -857,6 +858,7 @@ scan_end(struct ieee80211_scan_state *ss, int scandone)
else
vap->iv_stats.is_scan_passive++;
ieee80211_notify_scan_done(vap);
ss->ss_ops->scan_restart(ss, vap); /* XXX? */
ieee80211_runtask(ic, &ss_priv->ss_scan_start);
IEEE80211_UNLOCK(ic);