Skip to content

Commit

Permalink
wifi: ath12k: modify ath12k_get_arvif_iter() for MLO
Browse files Browse the repository at this point in the history
Currently ath12k_get_arvif_iter() takes input ahvif's deflink to check if it
matches with given radio (ar) but in case MLO there could be multiple links
affiliated with ahvif, hence iterate through the links of the ahvif and find
the right arvif that belongs to the given radio.

Tested-on: QCN9274 hw2.0 PCI WLAN.WBE.1.0.1-00029-QCAHKSWPL_SILICONZ-1
Tested-on: WCN7850 hw2.0 PCI WLAN.HMT.1.0.c5-00481-QCAHMTSWPL_V1.0_V2.0_SILICONZ-3

Signed-off-by: Rameshkumar Sundaram <quic_ramess@quicinc.com>
Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
Link: https://patch.msgid.link/20241015171416.518022-7-kvalo@kernel.org
Signed-off-by: Jeff Johnson <quic_jjohnson@quicinc.com>
  • Loading branch information
Rameshkumar Sundaram authored and Jeff Johnson committed Oct 16, 2024
1 parent abaadb9 commit 94a2712
Showing 1 changed file with 15 additions and 4 deletions.
19 changes: 15 additions & 4 deletions drivers/net/wireless/ath/ath12k/mac.c
Original file line number Diff line number Diff line change
Expand Up @@ -547,11 +547,22 @@ static void ath12k_get_arvif_iter(void *data, u8 *mac,
{
struct ath12k_vif_iter *arvif_iter = data;
struct ath12k_vif *ahvif = ath12k_vif_to_ahvif(vif);
struct ath12k_link_vif *arvif = &ahvif->deflink;
unsigned long links_map = ahvif->links_map;
struct ath12k_link_vif *arvif;
u8 link_id;

for_each_set_bit(link_id, &links_map, IEEE80211_MLD_MAX_NUM_LINKS) {
arvif = rcu_dereference(ahvif->link[link_id]);

if (WARN_ON(!arvif))
continue;

if (arvif->vdev_id == arvif_iter->vdev_id &&
arvif->ar == arvif_iter->ar)
arvif_iter->arvif = arvif;
if (arvif->vdev_id == arvif_iter->vdev_id &&
arvif->ar == arvif_iter->ar) {
arvif_iter->arvif = arvif;
break;
}
}
}

struct ath12k_link_vif *ath12k_mac_get_arvif(struct ath12k *ar, u32 vdev_id)
Expand Down

0 comments on commit 94a2712

Please sign in to comment.