wifi: rtw89: add wiphy_lock() to work that isn't held wiphy_lock() yet
authorPing-Ke Shih <pkshih@realtek.com>
Wed, 22 Jan 2025 06:03:01 +0000 (14:03 +0800)
committerPing-Ke Shih <pkshih@realtek.com>
Mon, 3 Feb 2025 02:22:55 +0000 (10:22 +0800)
To ensure where are protected by driver mutex can also be protected by
wiphy_lock(), so afterward we can remove driver mutex safely.

Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
Link: https://patch.msgid.link/20250122060310.31976-2-pkshih@realtek.com
drivers/net/wireless/realtek/rtw89/regd.c
drivers/net/wireless/realtek/rtw89/ser.c

index 5b9d3b78c24e2b556b1a36475fda4bbd533c4a98..46f5c7eb16830c48139d78bc57400b2a66aad1e0 100644 (file)
@@ -744,6 +744,7 @@ void rtw89_regd_notifier(struct wiphy *wiphy, struct regulatory_request *request
        struct ieee80211_hw *hw = wiphy_to_ieee80211_hw(wiphy);
        struct rtw89_dev *rtwdev = hw->priv;
 
+       wiphy_lock(wiphy);
        mutex_lock(&rtwdev->mutex);
        rtw89_leave_ps_mode(rtwdev);
 
@@ -761,6 +762,7 @@ void rtw89_regd_notifier(struct wiphy *wiphy, struct regulatory_request *request
 
 exit:
        mutex_unlock(&rtwdev->mutex);
+       wiphy_unlock(wiphy);
 }
 
 /* Maximum Transmit Power field (@raw) can be EIRP or PSD.
index 26a944d3b67270169358feed0eb18e12de678d5e..d0c8584308c06ef97a2043b346150971a8497b9b 100644 (file)
@@ -156,9 +156,11 @@ static void ser_state_run(struct rtw89_ser *ser, u8 evt)
        rtw89_debug(rtwdev, RTW89_DBG_SER, "ser: %s receive %s\n",
                    ser_st_name(ser), ser_ev_name(ser, evt));
 
+       wiphy_lock(rtwdev->hw->wiphy);
        mutex_lock(&rtwdev->mutex);
        rtw89_leave_lps(rtwdev);
        mutex_unlock(&rtwdev->mutex);
+       wiphy_unlock(rtwdev->hw->wiphy);
 
        ser->st_tbl[ser->state].st_func(ser, evt);
 }
@@ -708,9 +710,11 @@ static void ser_l2_reset_st_hdl(struct rtw89_ser *ser, u8 evt)
 
        switch (evt) {
        case SER_EV_STATE_IN:
+               wiphy_lock(rtwdev->hw->wiphy);
                mutex_lock(&rtwdev->mutex);
                ser_l2_reset_st_pre_hdl(ser);
                mutex_unlock(&rtwdev->mutex);
+               wiphy_unlock(rtwdev->hw->wiphy);
 
                ieee80211_restart_hw(rtwdev->hw);
                ser_set_alarm(ser, SER_RECFG_TIMEOUT, SER_EV_L2_RECFG_TIMEOUT);