Skip to contentSkip to conversation

wifi: ath12k: assign device id from the WSI index

PATCH Applied Benoit Masson 3 participants 3 messages Sep 28 – Oct 26

Subsystems (2)
lore
Share & tools
lore
#0 lore raw

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.

Fixes 6f245ea0ec6c ("wifi: ath12k: introduce device group abstraction")

---
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
index 99bf5cf..6505255 100644
@@ -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
Reviewed-by on v3 1/1
#1 lore raw
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_probed remains the group device counter. The unassign path is unchanged, it already indexes ag->ab[] by ab->device_id.

Quoted 4 lines
Fixes 6f245ea0ec6c ("wifi: ath12k: introduce device group abstraction")
Applied
#2 lore raw
In reply to Benoit Masson
Quoted 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]>