summaryrefslogtreecommitdiff
path: root/drivers/net/wireless/realtek/rtw88/main.c
diff options
context:
space:
mode:
authorYan-Hsuan Chuang <yhchuang@realtek.com>2019-10-02 05:31:22 +0300
committerKalle Valo <kvalo@codeaurora.org>2019-10-02 07:33:44 +0300
commitd3e20fd17d0b6891a3b6f598abad38da2ab6a70f (patch)
tree5e921f8d0282b3f587e7cdc304ba5e245deb7cdc /drivers/net/wireless/realtek/rtw88/main.c
parent5235d63640c60ad5384310bd88ce0a6d8f87179e (diff)
downloadlinux-d3e20fd17d0b6891a3b6f598abad38da2ab6a70f.tar.xz
rtw88: LPS enter/leave should be protected by lock
Protect LPS enter/leave routine with rtwdev->mutex. This helps to synchronize with driver's states correctly. Signed-off-by: Yan-Hsuan Chuang <yhchuang@realtek.com> Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
Diffstat (limited to 'drivers/net/wireless/realtek/rtw88/main.c')
-rw-r--r--drivers/net/wireless/realtek/rtw88/main.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/drivers/net/wireless/realtek/rtw88/main.c b/drivers/net/wireless/realtek/rtw88/main.c
index 85d83f154f71..f55eda9da827 100644
--- a/drivers/net/wireless/realtek/rtw88/main.c
+++ b/drivers/net/wireless/realtek/rtw88/main.c
@@ -152,8 +152,10 @@ static void rtw_watch_dog_work(struct work_struct *work)
struct rtw_watch_dog_iter_data data = {};
bool busy_traffic = test_bit(RTW_FLAG_BUSY_TRAFFIC, rtwdev->flags);
+ mutex_lock(&rtwdev->mutex);
+
if (!test_bit(RTW_FLAG_RUNNING, rtwdev->flags))
- return;
+ goto unlock;
ieee80211_queue_delayed_work(rtwdev->hw, &rtwdev->watch_dog_work,
RTW_WATCH_DOG_DELAY_TIME);
@@ -186,11 +188,14 @@ static void rtw_watch_dog_work(struct work_struct *work)
rtw_leave_lps(rtwdev);
if (test_bit(RTW_FLAG_SCANNING, rtwdev->flags))
- return;
+ goto unlock;
rtw_phy_dynamic_mechanism(rtwdev);
rtwdev->watch_dog_cnt++;
+
+unlock:
+ mutex_unlock(&rtwdev->mutex);
}
static void rtw_c2h_work(struct work_struct *work)