diff options
-rw-r--r-- | drivers/net/wireless/rtlwifi/base.c | 1 | ||||
-rw-r--r-- | drivers/net/wireless/rtlwifi/ps.c | 5 | ||||
-rw-r--r-- | drivers/net/wireless/rtlwifi/wifi.h | 1 |
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; |