aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/net/wireless/rtlwifi/base.c1
-rw-r--r--drivers/net/wireless/rtlwifi/ps.c5
-rw-r--r--drivers/net/wireless/rtlwifi/wifi.h1
3 files changed, 5 insertions, 2 deletions
diff --git a/drivers/net/wireless/rtlwifi/base.c b/drivers/net/wireless/rtlwifi/base.c
index d81a6021a30..7c1d82d8d71 100644
--- a/drivers/net/wireless/rtlwifi/base.c
+++ b/drivers/net/wireless/rtlwifi/base.c
@@ -449,6 +449,7 @@ int rtl_init_core(struct ieee80211_hw *hw)
449 /* <4> locks */ 449 /* <4> locks */
450 mutex_init(&rtlpriv->locks.conf_mutex); 450 mutex_init(&rtlpriv->locks.conf_mutex);
451 mutex_init(&rtlpriv->locks.ps_mutex); 451 mutex_init(&rtlpriv->locks.ps_mutex);
452 spin_lock_init(&rtlpriv->locks.ips_lock);
452 spin_lock_init(&rtlpriv->locks.irq_th_lock); 453 spin_lock_init(&rtlpriv->locks.irq_th_lock);
453 spin_lock_init(&rtlpriv->locks.h2c_lock); 454 spin_lock_init(&rtlpriv->locks.h2c_lock);
454 spin_lock_init(&rtlpriv->locks.rf_ps_lock); 455 spin_lock_init(&rtlpriv->locks.rf_ps_lock);
diff --git a/drivers/net/wireless/rtlwifi/ps.c b/drivers/net/wireless/rtlwifi/ps.c
index a14a68b2463..130fdd99d57 100644
--- a/drivers/net/wireless/rtlwifi/ps.c
+++ b/drivers/net/wireless/rtlwifi/ps.c
@@ -237,11 +237,12 @@ void rtl_ips_nic_on(struct ieee80211_hw *hw)
237 struct rtl_mac *mac = rtl_mac(rtl_priv(hw)); 237 struct rtl_mac *mac = rtl_mac(rtl_priv(hw));
238 struct rtl_ps_ctl *ppsc = rtl_psc(rtl_priv(hw)); 238 struct rtl_ps_ctl *ppsc = rtl_psc(rtl_priv(hw));
239 enum rf_pwrstate rtstate; 239 enum rf_pwrstate rtstate;
240 unsigned long flags;
240 241
241 if (mac->opmode != NL80211_IFTYPE_STATION) 242 if (mac->opmode != NL80211_IFTYPE_STATION)
242 return; 243 return;
243 244
244 mutex_lock(&rtlpriv->locks.ps_mutex); 245 spin_lock_irqsave(&rtlpriv->locks.ips_lock, flags);
245 246
246 if (ppsc->inactiveps) { 247 if (ppsc->inactiveps) {
247 rtstate = ppsc->rfpwr_state; 248 rtstate = ppsc->rfpwr_state;
@@ -257,7 +258,7 @@ void rtl_ips_nic_on(struct ieee80211_hw *hw)
257 } 258 }
258 } 259 }
259 260
260 mutex_unlock(&rtlpriv->locks.ps_mutex); 261 spin_unlock_irqrestore(&rtlpriv->locks.ips_lock, flags);
261} 262}
262 263
263/*for FW LPS*/ 264/*for FW LPS*/
diff --git a/drivers/net/wireless/rtlwifi/wifi.h b/drivers/net/wireless/rtlwifi/wifi.h
index 085dccdbd1b..115969df0c9 100644
--- a/drivers/net/wireless/rtlwifi/wifi.h
+++ b/drivers/net/wireless/rtlwifi/wifi.h
@@ -1547,6 +1547,7 @@ struct rtl_locks {
1547 struct mutex ps_mutex; 1547 struct mutex ps_mutex;
1548 1548
1549 /*spin lock */ 1549 /*spin lock */
1550 spinlock_t ips_lock;
1550 spinlock_t irq_th_lock; 1551 spinlock_t irq_th_lock;
1551 spinlock_t h2c_lock; 1552 spinlock_t h2c_lock;
1552 spinlock_t rf_ps_lock; 1553 spinlock_t rf_ps_lock;