summaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/ath
diff options
context:
space:
mode:
authorLior David <qca_liord@qca.qualcomm.com>2017-01-20 13:49:48 +0200
committerKalle Valo <kvalo@qca.qualcomm.com>2017-01-27 19:49:39 +0200
commit4d4c4dc324b4444d40e9164834044feebaf2d72d (patch)
treebbcc4458045a7f618c8e60491665637dd4cb2d95 /drivers/net/wireless/ath
parent0d2370e939acca97b5e1abc1aedd47c5c9a5f500 (diff)
downloadop-kernel-dev-4d4c4dc324b4444d40e9164834044feebaf2d72d.zip
op-kernel-dev-4d4c4dc324b4444d40e9164834044feebaf2d72d.tar.gz
wil6210: missing reinit_completion in wmi_call
The code in wmi_call uses the wil->wmi_call completion structure to wait for a reply. In some scenarios, complete was called twice on the completion structure. This happened mainly with a disconnect event which can arrive both unsolicited and as a reply to a disconnect request. In this case the completion structure was left marked as "done" and the next wmi_call returned immediately with a corrupted reply buffer. This caused unexpected results including crashes. Fix this by adding the missing call to reinit_completion. Signed-off-by: Lior David <qca_liord@qca.qualcomm.com> Signed-off-by: Maya Erez <qca_merez@qca.qualcomm.com> Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
Diffstat (limited to 'drivers/net/wireless/ath')
-rw-r--r--drivers/net/wireless/ath/wil6210/wmi.c1
1 files changed, 1 insertions, 0 deletions
diff --git a/drivers/net/wireless/ath/wil6210/wmi.c b/drivers/net/wireless/ath/wil6210/wmi.c
index 0137ac5..d30b3fc 100644
--- a/drivers/net/wireless/ath/wil6210/wmi.c
+++ b/drivers/net/wireless/ath/wil6210/wmi.c
@@ -957,6 +957,7 @@ int wmi_call(struct wil6210_priv *wil, u16 cmdid, void *buf, u16 len,
wil->reply_id = reply_id;
wil->reply_buf = reply;
wil->reply_size = reply_size;
+ reinit_completion(&wil->wmi_call);
spin_unlock(&wil->wmi_ev_lock);
rc = __wmi_send(wil, cmdid, buf, len);
OpenPOWER on IntegriCloud