Message ID | 20240821153728.2121600-5-kvalo@kernel.org (mailing list archive) |
---|---|
State | RFC |
Delegated to: | Kalle Valo |
Headers | show |
Series | wifi: ath12k: switch to using wiphy_lock() | expand |
On 8/21/2024 11:37 PM, Kalle Valo wrote: > From: Kalle Valo <quic_kvalo@quicinc.com> > > As ath12k is now converted to use wiphy lock we can convert > ath12k_sta_rc_update_wk() to use wiphy_work_queue(). This is just for > consistency. > > Tested-on: WCN7850 hw2.0 PCI WLAN.HMT.1.0.c5-00481-QCAHMTSWPL_V1.0_V2.0_SILICONZ-3 > > Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com> > --- > drivers/net/wireless/ath/ath12k/core.h | 2 +- > drivers/net/wireless/ath/ath12k/mac.c | 17 +++++++++-------- > 2 files changed, 10 insertions(+), 9 deletions(-) > > diff --git a/drivers/net/wireless/ath/ath12k/core.h b/drivers/net/wireless/ath/ath12k/core.h > index 7fad2150d9bd..cc28185be650 100644 > --- a/drivers/net/wireless/ath/ath12k/core.h > +++ b/drivers/net/wireless/ath/ath12k/core.h > @@ -445,7 +445,7 @@ struct ath12k_sta { > u32 smps; > enum hal_pn_type pn_type; > > - struct work_struct update_wk; > + struct wiphy_work update_wk; > struct rate_info txrate; > struct rate_info last_txrate; > u64 rx_duration; > diff --git a/drivers/net/wireless/ath/ath12k/mac.c b/drivers/net/wireless/ath/ath12k/mac.c > index 80db9004cdd7..8bf7b026f8e4 100644 > --- a/drivers/net/wireless/ath/ath12k/mac.c > +++ b/drivers/net/wireless/ath/ath12k/mac.c > @@ -4258,9 +4258,9 @@ static int ath12k_station_disassoc(struct ath12k *ar, > return 0; > } > > -static void ath12k_sta_rc_update_wk(struct work_struct *wk) > +static void ath12k_sta_rc_update_wk(struct wiphy *wiphy, struct wiphy_work *work) > { > - struct ath12k *ar; > + struct ath12k *ar = wiphy_priv(wiphy); wiphy_priv() returns pointer to ieee80211_local, not ath12k. > struct ath12k_vif *arvif; > struct ath12k_sta *arsta; > struct ieee80211_sta *sta; > @@ -4274,10 +4274,11 @@ static void ath12k_sta_rc_update_wk(struct work_struct *wk) > struct ath12k_wmi_peer_assoc_arg peer_arg; > enum wmi_phy_mode peer_phymode; > > - arsta = container_of(wk, struct ath12k_sta, update_wk); > + lockdep_assert_wiphy(wiphy); > + > + arsta = container_of(work, struct ath12k_sta, update_wk); > sta = container_of((void *)arsta, struct ieee80211_sta, drv_priv); > arvif = arsta->arvif; > - ar = arvif->ar; > > if (WARN_ON(ath12k_mac_vif_chan(arvif->vif, &def))) > return; > @@ -4571,7 +4572,7 @@ static int ath12k_mac_op_sta_state(struct ieee80211_hw *hw, > /* cancel must be done outside the mutex to avoid deadlock */ > if ((old_state == IEEE80211_STA_NONE && > new_state == IEEE80211_STA_NOTEXIST)) > - cancel_work_sync(&arsta->update_wk); > + wiphy_work_cancel(hw->wiphy, &arsta->update_wk); > > ar = ath12k_get_ar_by_vif(hw, vif); > if (!ar) { > @@ -4585,7 +4586,7 @@ static int ath12k_mac_op_sta_state(struct ieee80211_hw *hw, > new_state == IEEE80211_STA_NONE) { > memset(arsta, 0, sizeof(*arsta)); > arsta->arvif = arvif; > - INIT_WORK(&arsta->update_wk, ath12k_sta_rc_update_wk); > + wiphy_work_init(&arsta->update_wk, ath12k_sta_rc_update_wk); > > ret = ath12k_mac_station_add(ar, vif, sta); > if (ret) > @@ -4792,7 +4793,7 @@ static void ath12k_mac_op_sta_rc_update(struct ieee80211_hw *hw, > > spin_unlock_bh(&ar->data_lock); > > - ieee80211_queue_work(hw, &arsta->update_wk); > + wiphy_work_queue(hw->wiphy, &arsta->update_wk); > } > > static int ath12k_conf_tx_uapsd(struct ath12k_vif *arvif, > @@ -8065,7 +8066,7 @@ static void ath12k_mac_set_bitrate_mask_iter(void *data, > arsta->changed |= IEEE80211_RC_SUPP_RATES_CHANGED; > spin_unlock_bh(&ar->data_lock); > > - ieee80211_queue_work(ath12k_ar_to_hw(ar), &arsta->update_wk); > + wiphy_work_queue(ath12k_ar_to_hw(ar)->wiphy, &arsta->update_wk); > } > > static void ath12k_mac_disable_peer_fixed_rate(void *data,
Baochen Qiang <quic_bqiang@quicinc.com> writes: > On 8/21/2024 11:37 PM, Kalle Valo wrote: >> From: Kalle Valo <quic_kvalo@quicinc.com> >> >> As ath12k is now converted to use wiphy lock we can convert >> ath12k_sta_rc_update_wk() to use wiphy_work_queue(). This is just for >> consistency. >> >> Tested-on: WCN7850 hw2.0 PCI WLAN.HMT.1.0.c5-00481-QCAHMTSWPL_V1.0_V2.0_SILICONZ-3 >> >> Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com> >> --- >> drivers/net/wireless/ath/ath12k/core.h | 2 +- >> drivers/net/wireless/ath/ath12k/mac.c | 17 +++++++++-------- >> 2 files changed, 10 insertions(+), 9 deletions(-) >> >> diff --git a/drivers/net/wireless/ath/ath12k/core.h b/drivers/net/wireless/ath/ath12k/core.h >> index 7fad2150d9bd..cc28185be650 100644 >> --- a/drivers/net/wireless/ath/ath12k/core.h >> +++ b/drivers/net/wireless/ath/ath12k/core.h >> @@ -445,7 +445,7 @@ struct ath12k_sta { >> u32 smps; >> enum hal_pn_type pn_type; >> >> - struct work_struct update_wk; >> + struct wiphy_work update_wk; >> struct rate_info txrate; >> struct rate_info last_txrate; >> u64 rx_duration; >> diff --git a/drivers/net/wireless/ath/ath12k/mac.c b/drivers/net/wireless/ath/ath12k/mac.c >> index 80db9004cdd7..8bf7b026f8e4 100644 >> --- a/drivers/net/wireless/ath/ath12k/mac.c >> +++ b/drivers/net/wireless/ath/ath12k/mac.c >> @@ -4258,9 +4258,9 @@ static int ath12k_station_disassoc(struct ath12k *ar, >> return 0; >> } >> >> -static void ath12k_sta_rc_update_wk(struct work_struct *wk) >> +static void ath12k_sta_rc_update_wk(struct wiphy *wiphy, struct wiphy_work *work) >> { >> - struct ath12k *ar; >> + struct ath12k *ar = wiphy_priv(wiphy); > > wiphy_priv() returns pointer to ieee80211_local, not ath12k. Yikes! Great find, thanks for the thorough review. Will fix in v2.
diff --git a/drivers/net/wireless/ath/ath12k/core.h b/drivers/net/wireless/ath/ath12k/core.h index 7fad2150d9bd..cc28185be650 100644 --- a/drivers/net/wireless/ath/ath12k/core.h +++ b/drivers/net/wireless/ath/ath12k/core.h @@ -445,7 +445,7 @@ struct ath12k_sta { u32 smps; enum hal_pn_type pn_type; - struct work_struct update_wk; + struct wiphy_work update_wk; struct rate_info txrate; struct rate_info last_txrate; u64 rx_duration; diff --git a/drivers/net/wireless/ath/ath12k/mac.c b/drivers/net/wireless/ath/ath12k/mac.c index 80db9004cdd7..8bf7b026f8e4 100644 --- a/drivers/net/wireless/ath/ath12k/mac.c +++ b/drivers/net/wireless/ath/ath12k/mac.c @@ -4258,9 +4258,9 @@ static int ath12k_station_disassoc(struct ath12k *ar, return 0; } -static void ath12k_sta_rc_update_wk(struct work_struct *wk) +static void ath12k_sta_rc_update_wk(struct wiphy *wiphy, struct wiphy_work *work) { - struct ath12k *ar; + struct ath12k *ar = wiphy_priv(wiphy); struct ath12k_vif *arvif; struct ath12k_sta *arsta; struct ieee80211_sta *sta; @@ -4274,10 +4274,11 @@ static void ath12k_sta_rc_update_wk(struct work_struct *wk) struct ath12k_wmi_peer_assoc_arg peer_arg; enum wmi_phy_mode peer_phymode; - arsta = container_of(wk, struct ath12k_sta, update_wk); + lockdep_assert_wiphy(wiphy); + + arsta = container_of(work, struct ath12k_sta, update_wk); sta = container_of((void *)arsta, struct ieee80211_sta, drv_priv); arvif = arsta->arvif; - ar = arvif->ar; if (WARN_ON(ath12k_mac_vif_chan(arvif->vif, &def))) return; @@ -4571,7 +4572,7 @@ static int ath12k_mac_op_sta_state(struct ieee80211_hw *hw, /* cancel must be done outside the mutex to avoid deadlock */ if ((old_state == IEEE80211_STA_NONE && new_state == IEEE80211_STA_NOTEXIST)) - cancel_work_sync(&arsta->update_wk); + wiphy_work_cancel(hw->wiphy, &arsta->update_wk); ar = ath12k_get_ar_by_vif(hw, vif); if (!ar) { @@ -4585,7 +4586,7 @@ static int ath12k_mac_op_sta_state(struct ieee80211_hw *hw, new_state == IEEE80211_STA_NONE) { memset(arsta, 0, sizeof(*arsta)); arsta->arvif = arvif; - INIT_WORK(&arsta->update_wk, ath12k_sta_rc_update_wk); + wiphy_work_init(&arsta->update_wk, ath12k_sta_rc_update_wk); ret = ath12k_mac_station_add(ar, vif, sta); if (ret) @@ -4792,7 +4793,7 @@ static void ath12k_mac_op_sta_rc_update(struct ieee80211_hw *hw, spin_unlock_bh(&ar->data_lock); - ieee80211_queue_work(hw, &arsta->update_wk); + wiphy_work_queue(hw->wiphy, &arsta->update_wk); } static int ath12k_conf_tx_uapsd(struct ath12k_vif *arvif, @@ -8065,7 +8066,7 @@ static void ath12k_mac_set_bitrate_mask_iter(void *data, arsta->changed |= IEEE80211_RC_SUPP_RATES_CHANGED; spin_unlock_bh(&ar->data_lock); - ieee80211_queue_work(ath12k_ar_to_hw(ar), &arsta->update_wk); + wiphy_work_queue(ath12k_ar_to_hw(ar)->wiphy, &arsta->update_wk); } static void ath12k_mac_disable_peer_fixed_rate(void *data,