wifi: ath12k: assign device id from the WSI index
Subsystems (2)
PATCH v3 1/1 wifi: ath12k: assign device id from the WSI index
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.
---
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(-)
drivers/net/wireless/ath/ath12k/core.c +2 -1
@@ -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;
Signature · 1 line
2.46.0
Quoted 17 lines · Benoit Masson
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_probedremains the group device counter. The unassign path is unchanged, it already indexes ag->ab[] byab->device_id.
Quoted 4 lines
Suggested-by Rameshkumar Sundaram <[email protected]>Fixes 6f245ea0ec6c ("wifi: ath12k: introduce device group abstraction")Cc [email protected] # 6.14+Signed-off-by Benoit Masson <[email protected]>
Jeff Johnson
AppliedQuoted 6 lines · Benoit Masson
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.
Quoted 7 lines
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).
[...]
Applied, thanks!
[1/1] wifi: ath12k: assign device id from the WSI index
commit: 81986a81f09fae73926c7c44863b335880269c90
Best regards,
Signature · 1 line
Jeff Johnson <[email protected]>