]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
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)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 4 Jun 2025 12:40:17 +0000 (14:40 +0200)
[ Upstream commit ebfc9199df05d37b67f4d1b7ee997193f3d2e7c8 ]

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
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/net/wireless/realtek/rtw89/regd.c
drivers/net/wireless/realtek/rtw89/ser.c

index 6e5a740b128f027ca4dfeefcaf133e3cad3a6dca..2d31193fcc87d657559c7ab2ce6f08e1de146472 100644 (file)
@@ -334,6 +334,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);
 
@@ -350,4 +351,5 @@ void rtw89_regd_notifier(struct wiphy *wiphy, struct regulatory_request *request
 
 exit:
        mutex_unlock(&rtwdev->mutex);
+       wiphy_unlock(wiphy);
 }
index afb1b41e1a9a51b5e999f41bc661ed2b249bc4c3..f5dacdc4d11ab668d0def1aa0f4d33cb310f250f 100644 (file)
@@ -153,9 +153,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);
 }
@@ -624,9 +626,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);