* [PATCH 0/2] wifi: ath11k: use RCU when accessing struct inet6_dev::ac_list @ 2024-04-11 16:55 Kalle Valo 2024-04-11 16:55 ` [PATCH 1/2] " Kalle Valo 2024-04-11 16:55 ` [PATCH 2/2] wifi: ath11k: ath11k_mac_op_ipv6_changed(): use list_for_each_entry() Kalle Valo 0 siblings, 2 replies; 7+ messages in thread From: Kalle Valo @ 2024-04-11 16:55 UTC (permalink / raw) To: ath11k; +Cc: linux-wireless From: Kalle Valo <quic_kvalo@quicinc.com> Fix a recently introduced sparse warning in ath11k_mac_op_ipv6_changed() and switch to use list_for_each_entry() in the same function. My plan is to get first patch to wireless tree and the second patch ath-next (once the first patch is there). Please review. Kalle Valo (2): wifi: ath11k: use RCU when accessing struct inet6_dev::ac_list wifi: ath11k: ath11k_mac_op_ipv6_changed(): use list_for_each_entry() drivers/net/wireless/ath/ath11k/mac.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) base-commit: 363e7193eaf258fe7f04e8db560bd8a282a12cd9 -- 2.39.2 ^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH 1/2] wifi: ath11k: use RCU when accessing struct inet6_dev::ac_list 2024-04-11 16:55 [PATCH 0/2] wifi: ath11k: use RCU when accessing struct inet6_dev::ac_list Kalle Valo @ 2024-04-11 16:55 ` Kalle Valo 2024-04-11 18:06 ` Jeff Johnson 2024-04-16 15:25 ` Kalle Valo 2024-04-11 16:55 ` [PATCH 2/2] wifi: ath11k: ath11k_mac_op_ipv6_changed(): use list_for_each_entry() Kalle Valo 1 sibling, 2 replies; 7+ messages in thread From: Kalle Valo @ 2024-04-11 16:55 UTC (permalink / raw) To: ath11k; +Cc: linux-wireless From: Kalle Valo <quic_kvalo@quicinc.com> Commit c3718936ec47 ("ipv6: anycast: complete RCU handling of struct ifacaddr6") converted struct inet6_dev::ac_list to use RCU but missed that ath11k also accesses this list. Now sparse warns: drivers/net/wireless/ath/ath11k/mac.c:9145:21: warning: incorrect type in assignment (different address spaces) drivers/net/wireless/ath/ath11k/mac.c:9145:21: expected struct ifacaddr6 *ifaca6 drivers/net/wireless/ath/ath11k/mac.c:9145:21: got struct ifacaddr6 [noderef] __rcu *ac_list drivers/net/wireless/ath/ath11k/mac.c:9145:53: warning: incorrect type in assignment (different address spaces) drivers/net/wireless/ath/ath11k/mac.c:9145:53: expected struct ifacaddr6 *ifaca6 drivers/net/wireless/ath/ath11k/mac.c:9145:53: got struct ifacaddr6 [noderef] __rcu *aca_next Fix it by using rtnl_dereference(). Also add a note that read_lock_bh() calls rcu_read_lock() which I was not aware of. Tested-on: WCN6855 hw2.0 PCI WLAN.HSP.1.1-03125-QCAHSPSWPL_V1_V2_SILICONZ_LITE-3.6510.37 Fixes: c3718936ec47 ("ipv6: anycast: complete RCU handling of struct ifacaddr6") Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com> --- drivers/net/wireless/ath/ath11k/mac.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/drivers/net/wireless/ath/ath11k/mac.c b/drivers/net/wireless/ath/ath11k/mac.c index c32be587000d..4fdd56cd30a1 100644 --- a/drivers/net/wireless/ath/ath11k/mac.c +++ b/drivers/net/wireless/ath/ath11k/mac.c @@ -9112,6 +9112,7 @@ static void ath11k_mac_op_ipv6_changed(struct ieee80211_hw *hw, offload = &arvif->arp_ns_offload; count = 0; + /* Note: read_lock_bh() calls rcu_read_lock() */ read_lock_bh(&idev->lock); memset(offload->ipv6_addr, 0, sizeof(offload->ipv6_addr)); @@ -9142,7 +9143,8 @@ static void ath11k_mac_op_ipv6_changed(struct ieee80211_hw *hw, } /* get anycast address */ - for (ifaca6 = idev->ac_list; ifaca6; ifaca6 = ifaca6->aca_next) { + for (ifaca6 = rcu_dereference(idev->ac_list); ifaca6; + ifaca6 = rcu_dereference(ifaca6->aca_next)) { if (count >= ATH11K_IPV6_MAX_COUNT) goto generate; -- 2.39.2 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH 1/2] wifi: ath11k: use RCU when accessing struct inet6_dev::ac_list 2024-04-11 16:55 ` [PATCH 1/2] " Kalle Valo @ 2024-04-11 18:06 ` Jeff Johnson 2024-04-16 15:25 ` Kalle Valo 1 sibling, 0 replies; 7+ messages in thread From: Jeff Johnson @ 2024-04-11 18:06 UTC (permalink / raw) To: Kalle Valo, ath11k; +Cc: linux-wireless On 4/11/2024 9:55 AM, Kalle Valo wrote: > From: Kalle Valo <quic_kvalo@quicinc.com> > > Commit c3718936ec47 ("ipv6: anycast: complete RCU handling of struct > ifacaddr6") converted struct inet6_dev::ac_list to use RCU but missed that > ath11k also accesses this list. Now sparse warns: > > drivers/net/wireless/ath/ath11k/mac.c:9145:21: warning: incorrect type in assignment (different address spaces) > drivers/net/wireless/ath/ath11k/mac.c:9145:21: expected struct ifacaddr6 *ifaca6 > drivers/net/wireless/ath/ath11k/mac.c:9145:21: got struct ifacaddr6 [noderef] __rcu *ac_list > drivers/net/wireless/ath/ath11k/mac.c:9145:53: warning: incorrect type in assignment (different address spaces) > drivers/net/wireless/ath/ath11k/mac.c:9145:53: expected struct ifacaddr6 *ifaca6 > drivers/net/wireless/ath/ath11k/mac.c:9145:53: got struct ifacaddr6 [noderef] __rcu *aca_next > > Fix it by using rtnl_dereference(). Also add a note that read_lock_bh() calls > rcu_read_lock() which I was not aware of. > > Tested-on: WCN6855 hw2.0 PCI WLAN.HSP.1.1-03125-QCAHSPSWPL_V1_V2_SILICONZ_LITE-3.6510.37 > > Fixes: c3718936ec47 ("ipv6: anycast: complete RCU handling of struct ifacaddr6") > Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com> Acked-by: Jeff Johnson <quic_jjohnson@quicinc.com> ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH 1/2] wifi: ath11k: use RCU when accessing struct inet6_dev::ac_list 2024-04-11 16:55 ` [PATCH 1/2] " Kalle Valo 2024-04-11 18:06 ` Jeff Johnson @ 2024-04-16 15:25 ` Kalle Valo 1 sibling, 0 replies; 7+ messages in thread From: Kalle Valo @ 2024-04-16 15:25 UTC (permalink / raw) To: Kalle Valo; +Cc: ath11k, linux-wireless Kalle Valo <kvalo@kernel.org> wrote: > From: Kalle Valo <quic_kvalo@quicinc.com> > > Commit c3718936ec47 ("ipv6: anycast: complete RCU handling of struct > ifacaddr6") converted struct inet6_dev::ac_list to use RCU but missed that > ath11k also accesses this list. Now sparse warns: > > drivers/net/wireless/ath/ath11k/mac.c:9145:21: warning: incorrect type in assignment (different address spaces) > drivers/net/wireless/ath/ath11k/mac.c:9145:21: expected struct ifacaddr6 *ifaca6 > drivers/net/wireless/ath/ath11k/mac.c:9145:21: got struct ifacaddr6 [noderef] __rcu *ac_list > drivers/net/wireless/ath/ath11k/mac.c:9145:53: warning: incorrect type in assignment (different address spaces) > drivers/net/wireless/ath/ath11k/mac.c:9145:53: expected struct ifacaddr6 *ifaca6 > drivers/net/wireless/ath/ath11k/mac.c:9145:53: got struct ifacaddr6 [noderef] __rcu *aca_next > > Fix it by using rtnl_dereference(). Also add a note that read_lock_bh() calls > rcu_read_lock() which I was not aware of. > > Tested-on: WCN6855 hw2.0 PCI WLAN.HSP.1.1-03125-QCAHSPSWPL_V1_V2_SILICONZ_LITE-3.6510.37 > > Fixes: c3718936ec47 ("ipv6: anycast: complete RCU handling of struct ifacaddr6") > Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com> > Acked-by: Jeff Johnson <quic_jjohnson@quicinc.com> Patch applied to wireless.git, thanks. feafe59c8975 wifi: ath11k: use RCU when accessing struct inet6_dev::ac_list -- https://patchwork.kernel.org/project/linux-wireless/patch/20240411165516.4070649-2-kvalo@kernel.org/ https://wireless.wiki.kernel.org/en/developers/documentation/submittingpatches ^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH 2/2] wifi: ath11k: ath11k_mac_op_ipv6_changed(): use list_for_each_entry() 2024-04-11 16:55 [PATCH 0/2] wifi: ath11k: use RCU when accessing struct inet6_dev::ac_list Kalle Valo 2024-04-11 16:55 ` [PATCH 1/2] " Kalle Valo @ 2024-04-11 16:55 ` Kalle Valo 2024-04-11 18:06 ` Jeff Johnson 2024-05-03 13:06 ` Kalle Valo 1 sibling, 2 replies; 7+ messages in thread From: Kalle Valo @ 2024-04-11 16:55 UTC (permalink / raw) To: ath11k; +Cc: linux-wireless From: Kalle Valo <quic_kvalo@quicinc.com> Simplify the loop by using list_for_each_entry(). No functional changes. Tested-on: WCN6855 hw2.0 PCI WLAN.HSP.1.1-03125-QCAHSPSWPL_V1_V2_SILICONZ_LITE-3.6510.37 Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com> --- drivers/net/wireless/ath/ath11k/mac.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/drivers/net/wireless/ath/ath11k/mac.c b/drivers/net/wireless/ath/ath11k/mac.c index 4fdd56cd30a1..4ff8dd0d157b 100644 --- a/drivers/net/wireless/ath/ath11k/mac.c +++ b/drivers/net/wireless/ath/ath11k/mac.c @@ -9104,7 +9104,6 @@ static void ath11k_mac_op_ipv6_changed(struct ieee80211_hw *hw, struct ath11k_vif *arvif = ath11k_vif_to_arvif(vif); struct inet6_ifaddr *ifa6; struct ifacaddr6 *ifaca6; - struct list_head *p; u32 count, scope; ath11k_dbg(ar->ab, ATH11K_DBG_MAC, "op ipv6 changed\n"); @@ -9120,11 +9119,10 @@ static void ath11k_mac_op_ipv6_changed(struct ieee80211_hw *hw, memcpy(offload->mac_addr, vif->addr, ETH_ALEN); /* get unicast address */ - list_for_each(p, &idev->addr_list) { + list_for_each_entry(ifa6, &idev->addr_list, if_list) { if (count >= ATH11K_IPV6_MAX_COUNT) goto generate; - ifa6 = list_entry(p, struct inet6_ifaddr, if_list); if (ifa6->flags & IFA_F_DADFAILED) continue; scope = ipv6_addr_src_scope(&ifa6->addr); -- 2.39.2 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH 2/2] wifi: ath11k: ath11k_mac_op_ipv6_changed(): use list_for_each_entry() 2024-04-11 16:55 ` [PATCH 2/2] wifi: ath11k: ath11k_mac_op_ipv6_changed(): use list_for_each_entry() Kalle Valo @ 2024-04-11 18:06 ` Jeff Johnson 2024-05-03 13:06 ` Kalle Valo 1 sibling, 0 replies; 7+ messages in thread From: Jeff Johnson @ 2024-04-11 18:06 UTC (permalink / raw) To: Kalle Valo, ath11k; +Cc: linux-wireless On 4/11/2024 9:55 AM, Kalle Valo wrote: > From: Kalle Valo <quic_kvalo@quicinc.com> > > Simplify the loop by using list_for_each_entry(). No functional changes. > > Tested-on: WCN6855 hw2.0 PCI WLAN.HSP.1.1-03125-QCAHSPSWPL_V1_V2_SILICONZ_LITE-3.6510.37 > > Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com> Acked-by: Jeff Johnson <quic_jjohnson@quicinc.com> ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH 2/2] wifi: ath11k: ath11k_mac_op_ipv6_changed(): use list_for_each_entry() 2024-04-11 16:55 ` [PATCH 2/2] wifi: ath11k: ath11k_mac_op_ipv6_changed(): use list_for_each_entry() Kalle Valo 2024-04-11 18:06 ` Jeff Johnson @ 2024-05-03 13:06 ` Kalle Valo 1 sibling, 0 replies; 7+ messages in thread From: Kalle Valo @ 2024-05-03 13:06 UTC (permalink / raw) To: Kalle Valo; +Cc: ath11k, linux-wireless Kalle Valo <kvalo@kernel.org> wrote: > Simplify the loop by using list_for_each_entry(). No functional changes. > > Tested-on: WCN6855 hw2.0 PCI WLAN.HSP.1.1-03125-QCAHSPSWPL_V1_V2_SILICONZ_LITE-3.6510.37 > > Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com> > Acked-by: Jeff Johnson <quic_jjohnson@quicinc.com> Patch applied to ath-next branch of ath.git, thanks. f41c7cab8727 wifi: ath11k: ath11k_mac_op_ipv6_changed(): use list_for_each_entry() -- https://patchwork.kernel.org/project/linux-wireless/patch/20240411165516.4070649-3-kvalo@kernel.org/ https://wireless.wiki.kernel.org/en/developers/documentation/submittingpatches ^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2024-05-03 13:06 UTC | newest] Thread overview: 7+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2024-04-11 16:55 [PATCH 0/2] wifi: ath11k: use RCU when accessing struct inet6_dev::ac_list Kalle Valo 2024-04-11 16:55 ` [PATCH 1/2] " Kalle Valo 2024-04-11 18:06 ` Jeff Johnson 2024-04-16 15:25 ` Kalle Valo 2024-04-11 16:55 ` [PATCH 2/2] wifi: ath11k: ath11k_mac_op_ipv6_changed(): use list_for_each_entry() Kalle Valo 2024-04-11 18:06 ` Jeff Johnson 2024-05-03 13:06 ` Kalle Valo
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox