Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

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
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -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);
+3 −2
Original line number Diff line number Diff line
@@ -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;
@@ -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*/
+2 −2
Original line number Diff line number Diff line
@@ -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;