[PATCH v3] wifi: ath12k: assign device id from the WSI index
Benoit Masson
yahoo at perenite.com
Mon Sep 28 14:33:22 PDT 2026
Devices of a hardware group are added to ag->ab[] in PCI probe
completion order (ab->device_id = ag->num_probed++), which is not
stable across boots. The wiphy radio array is built from ag->ab[] and
the wiphy device is taken from its first entry, so the wiphy sysfs
path and the mapping of radio indices to bands change on every boot.
Persisted wireless configurations reference radios by index (e.g.
OpenWrt/hostapd "radio0"), so such a configuration attaches to a
random band at each boot. This affects any multi-chip group with
single-band radios, e.g. TP-Link Archer BE800 (three QCN9274/QCN9224
radios in one group).
Store each ab in ag->ab[] at its wsi_info.index, which is derived from
the device tree WSI ring and is therefore deterministic.
ag->num_probed remains the group device counter. The unassign path is
unchanged, it already indexes ag->ab[] by ab->device_id.
Suggested-by: Rameshkumar Sundaram <rameshkumar.sundaram at oss.qualcomm.com>
Fixes: 6f245ea0ec6c ("wifi: ath12k: introduce device group abstraction")
Cc: stable at vger.kernel.org # 6.14+
Signed-off-by: Benoit Masson <yahoo at perenite.com>
---
Changes in v3:
- Expand the commit message with the problem statement (why this
matters for stable).
- No code change since v2.
Changes in v2:
- Set ab->device_id from wsi_info.index in ath12k_core_hw_group_assign()
instead of reordering pdev_map[] in ath12k_mac_allocate(), as suggested
by Rameshkumar. mac.c is no longer modified.
drivers/net/wireless/ath/ath12k/core.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/drivers/net/wireless/ath/ath12k/core.c b/drivers/net/wireless/ath/ath12k/core.c
index 99bf5cf..6505255 100644
--- a/drivers/net/wireless/ath/ath12k/core.c
+++ b/drivers/net/wireless/ath/ath12k/core.c
@@ -2029,7 +2029,8 @@ exit:
goto invalid_group;
}
- ab->device_id = ag->num_probed++;
+ ag->num_probed++;
+ ab->device_id = wsi->index;
ag->ab[ab->device_id] = ab;
ab->ag = ag;
--
2.46.0
More information about the ath12k
mailing list