[PATCH v1 1/2] wpa_supplicant: avoid redundant rescan when 6 GHz was already covered

Vignesh Raman vignesh.raman at collabora.com
Fri Aug 14 01:32:50 PDT 2026


On suspend/resume, a regulatory domain change enabling 6 GHz
unconditionally forces a rescan before associating, even when the
scan that just completed already covered 6 GHz. This causes a
redundant full scan.

Check whether the last scan covered 6 GHz, and only force the rescan
when it did not.

Signed-off-by: Vignesh Raman <vignesh.raman at collabora.com>
---
 wpa_supplicant/events.c           | 18 +++++++++++++++++-
 wpa_supplicant/wpa_supplicant_i.h |  1 +
 2 files changed, 18 insertions(+), 1 deletion(-)

diff --git a/wpa_supplicant/events.c b/wpa_supplicant/events.c
index fdd822354..6928156a0 100644
--- a/wpa_supplicant/events.c
+++ b/wpa_supplicant/events.c
@@ -6054,7 +6054,9 @@ void wpa_supplicant_update_channel_list(struct wpa_supplicant *wpa_s,
 			wpa_dbg(ifs, MSG_INFO,
 				"Channel list changed: 6 GHz was enabled");
 
-			ifs->crossed_6ghz_dom = true;
+			/* Only force a rescan if the 6 GHz band has not been scanned yet. */
+			if (!ifs->last_scan_covered_6ghz)
+				ifs->crossed_6ghz_dom = true;
 		}
 	}
 
@@ -7051,6 +7053,20 @@ void wpa_supplicant_event(void *ctx, enum wpa_event_type event,
 			break;
 		}
 
+		if (!(data && data->scan_info.external_scan)) {
+			unsigned int i;
+
+			wpa_s->last_scan_covered_6ghz = false;
+			if (data && data->scan_info.freqs) {
+				for (i = 0; i < data->scan_info.num_freqs; i++) {
+					if (is_6ghz_freq(data->scan_info.freqs[i])) {
+						wpa_s->last_scan_covered_6ghz = true;
+						break;
+					}
+				}
+			}
+		}
+
 		if (!(data && data->scan_info.external_scan) &&
 		    os_reltime_initialized(&wpa_s->scan_start_time)) {
 			struct os_reltime now, diff;
diff --git a/wpa_supplicant/wpa_supplicant_i.h b/wpa_supplicant/wpa_supplicant_i.h
index 062a11b54..dffd6a150 100644
--- a/wpa_supplicant/wpa_supplicant_i.h
+++ b/wpa_supplicant/wpa_supplicant_i.h
@@ -1695,6 +1695,7 @@ struct wpa_supplicant {
 
 	bool is_6ghz_enabled;
 	bool crossed_6ghz_dom;
+	bool last_scan_covered_6ghz;
 	bool last_scan_all_chan;
 	bool last_scan_non_coloc_6ghz;
 	bool support_6ghz;
-- 
2.47.3




More information about the Hostap mailing list