Skip to content

Commit

Permalink
rtlwifi: Fix use of mutex in interrupt code
Browse files Browse the repository at this point in the history
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: Larry Finger <Larry.Finger@lwfinger.net>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
  • Loading branch information
Larry Finger authored and John W. Linville committed Dec 20, 2010
1 parent f0b3e4b commit d704300
Show file tree
Hide file tree
Showing 3 changed files with 6 additions and 5 deletions.
2 changes: 1 addition & 1 deletion drivers/net/wireless/rtlwifi/base.c
Original file line number Diff line number Diff line change
Expand Up @@ -309,8 +309,8 @@ int rtl_init_core(struct ieee80211_hw *hw)
}

/* <4> locks */
mutex_init(&rtlpriv->locks.ips_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.h2c_lock);
spin_lock_init(&rtlpriv->locks.rf_ps_lock);
Expand Down
5 changes: 3 additions & 2 deletions drivers/net/wireless/rtlwifi/ps.c
Original file line number Diff line number Diff line change
Expand Up @@ -286,8 +286,9 @@ void rtl_ips_nic_on(struct ieee80211_hw *hw)
struct rtl_priv *rtlpriv = rtl_priv(hw);
struct rtl_ps_ctl *ppsc = rtl_psc(rtl_priv(hw));
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) {
rtstate = ppsc->rfpwr_state;
Expand All @@ -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*/
Expand Down
4 changes: 2 additions & 2 deletions drivers/net/wireless/rtlwifi/wifi.h
Original file line number Diff line number Diff line change
Expand Up @@ -1192,11 +1192,11 @@ struct rtl_hal_cfg {
};

struct rtl_locks {
/*sem */
struct mutex ips_mutex;
/* mutex */
struct mutex conf_mutex;

/*spin lock */
spinlock_t ips_lock;
spinlock_t irq_th_lock;
spinlock_t h2c_lock;
spinlock_t rf_ps_lock;
Expand Down

0 comments on commit d704300

Please sign in to comment.