lkml.org 
[lkml]   [2019]   [Nov]   [27]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.19 216/306] wil6210: fix locking in wmi_call
    Date
    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


    \
     
     \ /
      Last update: 2019-11-27 22:04    [W:4.327 / U:0.816 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site