mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-07 11:33:58 -04:00
wifi: ath12k: convert struct ath12k_sta::update_wk to use struct wiphy_work
For preparation to switch ath12k to use wiphy_lock() we can convert ath12k_sta_rc_update_wk() to use wiphy_work_queue() for consistency. To avoid any deadlocks do the struct ath12k_sta::update_wk conversion before switching to using wiphy_lock() throughout the driver. 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> Link: https://patch.msgid.link/20241007165932.78081-3-kvalo@kernel.org Signed-off-by: Jeff Johnson <quic_jjohnson@quicinc.com>
This commit is contained in:
@@ -451,7 +451,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;
|
||||
|
||||
@@ -4273,7 +4273,7 @@ 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 *wk)
|
||||
{
|
||||
struct ath12k *ar;
|
||||
struct ath12k_vif *arvif;
|
||||
@@ -4289,6 +4289,8 @@ 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;
|
||||
|
||||
lockdep_assert_wiphy(wiphy);
|
||||
|
||||
arsta = container_of(wk, struct ath12k_sta, update_wk);
|
||||
sta = container_of((void *)arsta, struct ieee80211_sta, drv_priv);
|
||||
arvif = arsta->arvif;
|
||||
@@ -4586,7 +4588,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) {
|
||||
@@ -4600,7 +4602,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)
|
||||
@@ -4811,7 +4813,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,
|
||||
@@ -8113,7 +8115,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,
|
||||
|
||||
Reference in New Issue
Block a user