| From a508b07a2abc173afc36b6426947bcc9438a558e Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Wed, 31 Oct 2018 10:52:24 +0200 |
| Subject: wil6210: fix locking in wmi_call |
| |
| From: Lior David <liord@codeaurora.org> |
| |
| [ Upstream commit dc57731dbd535880fe6ced31c229262c34df7d64 ] |
| |
| Switch from spin_lock to spin_lock_irqsave, because |
| wmi_ev_lock is used inside interrupt handler. |
| |
| Signed-off-by: Lior David <liord@codeaurora.org> |
| Signed-off-by: Maya Erez <merez@codeaurora.org> |
| Signed-off-by: Kalle Valo <kvalo@codeaurora.org> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/net/wireless/ath/wil6210/wmi.c | 9 +++++---- |
| 1 file changed, 5 insertions(+), 4 deletions(-) |
| |
| diff --git a/drivers/net/wireless/ath/wil6210/wmi.c b/drivers/net/wireless/ath/wil6210/wmi.c |
| index 2010f771478df..8a603432f5317 100644 |
| --- a/drivers/net/wireless/ath/wil6210/wmi.c |
| +++ b/drivers/net/wireless/ath/wil6210/wmi.c |
| @@ -1639,16 +1639,17 @@ int wmi_call(struct wil6210_priv *wil, u16 cmdid, u8 mid, void *buf, u16 len, |
| { |
| int rc; |
| unsigned long remain; |
| + ulong flags; |
| |
| mutex_lock(&wil->wmi_mutex); |
| |
| - spin_lock(&wil->wmi_ev_lock); |
| + spin_lock_irqsave(&wil->wmi_ev_lock, flags); |
| wil->reply_id = reply_id; |
| wil->reply_mid = mid; |
| wil->reply_buf = reply; |
| wil->reply_size = reply_size; |
| reinit_completion(&wil->wmi_call); |
| - spin_unlock(&wil->wmi_ev_lock); |
| + spin_unlock_irqrestore(&wil->wmi_ev_lock, flags); |
| |
| rc = __wmi_send(wil, cmdid, mid, buf, len); |
| if (rc) |
| @@ -1668,12 +1669,12 @@ int wmi_call(struct wil6210_priv *wil, u16 cmdid, u8 mid, void *buf, u16 len, |
| } |
| |
| out: |
| - spin_lock(&wil->wmi_ev_lock); |
| + spin_lock_irqsave(&wil->wmi_ev_lock, flags); |
| wil->reply_id = 0; |
| wil->reply_mid = U8_MAX; |
| wil->reply_buf = NULL; |
| wil->reply_size = 0; |
| - spin_unlock(&wil->wmi_ev_lock); |
| + spin_unlock_irqrestore(&wil->wmi_ev_lock, flags); |
| |
| mutex_unlock(&wil->wmi_mutex); |
| |
| -- |
| 2.20.1 |
| |