Commit d704300f authored by Larry Finger's avatar Larry Finger Committed by John W. Linville

rtlwifi: Fix use of mutex in interrupt code

A previous conversion from semaphoreto mutexes missed the fact that one
of the semaphores was used in interrupt code. Fixed by changing to
a spinlock.
Signed-off-by: default avatarLarry Finger <Larry.Finger@lwfinger.net>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent f0b3e4b7
...@@ -309,8 +309,8 @@ int rtl_init_core(struct ieee80211_hw *hw) ...@@ -309,8 +309,8 @@ int rtl_init_core(struct ieee80211_hw *hw)
} }
/* <4> locks */ /* <4> locks */
mutex_init(&rtlpriv->locks.ips_mutex);
mutex_init(&rtlpriv->locks.conf_mutex); mutex_init(&rtlpriv->locks.conf_mutex);
spin_lock_init(&rtlpriv->locks.ips_lock);
spin_lock_init(&rtlpriv->locks.irq_th_lock); spin_lock_init(&rtlpriv->locks.irq_th_lock);
spin_lock_init(&rtlpriv->locks.h2c_lock); spin_lock_init(&rtlpriv->locks.h2c_lock);
spin_lock_init(&rtlpriv->locks.rf_ps_lock); spin_lock_init(&rtlpriv->locks.rf_ps_lock);
......
...@@ -286,8 +286,9 @@ void rtl_ips_nic_on(struct ieee80211_hw *hw) ...@@ -286,8 +286,9 @@ void rtl_ips_nic_on(struct ieee80211_hw *hw)
struct rtl_priv *rtlpriv = rtl_priv(hw); struct rtl_priv *rtlpriv = rtl_priv(hw);
struct rtl_ps_ctl *ppsc = rtl_psc(rtl_priv(hw)); struct rtl_ps_ctl *ppsc = rtl_psc(rtl_priv(hw));
enum rf_pwrstate rtstate; enum rf_pwrstate rtstate;
unsigned long flags;
mutex_lock(&rtlpriv->locks.ips_mutex); spin_lock_irqsave(&rtlpriv->locks.ips_lock, flags);
if (ppsc->b_inactiveps) { if (ppsc->b_inactiveps) {
rtstate = ppsc->rfpwr_state; rtstate = ppsc->rfpwr_state;
...@@ -303,7 +304,7 @@ void rtl_ips_nic_on(struct ieee80211_hw *hw) ...@@ -303,7 +304,7 @@ void rtl_ips_nic_on(struct ieee80211_hw *hw)
} }
} }
mutex_unlock(&rtlpriv->locks.ips_mutex); spin_unlock_irqrestore(&rtlpriv->locks.ips_lock, flags);
} }
/*for FW LPS*/ /*for FW LPS*/
......
...@@ -1192,11 +1192,11 @@ struct rtl_hal_cfg { ...@@ -1192,11 +1192,11 @@ struct rtl_hal_cfg {
}; };
struct rtl_locks { struct rtl_locks {
/*sem */ /* mutex */
struct mutex ips_mutex;
struct mutex conf_mutex; struct mutex conf_mutex;
/*spin lock */ /*spin lock */
spinlock_t ips_lock;
spinlock_t irq_th_lock; spinlock_t irq_th_lock;
spinlock_t h2c_lock; spinlock_t h2c_lock;
spinlock_t rf_ps_lock; spinlock_t rf_ps_lock;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment