ath9k_htc: Fix WMI command race
My patch "ath9k_htc: Handle WMI timeouts properly" introduced a race condition in WMI command processing. The last issued command should be stored _before_ issuing a WMI command. Not doing this would result in the WMI event IRQ dropping correct command responses as invalid. Fix this race by storing the command id correctly. Signed-off-by: Sujith <Sujith.Manoharan@atheros.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
parent
ba44370175
commit
0d36d71da2
1 changed files with 4 additions and 4 deletions
|
@ -305,14 +305,14 @@ int ath9k_wmi_cmd(struct wmi *wmi, enum wmi_cmd_id cmd_id,
|
||||||
wmi->cmd_rsp_buf = rsp_buf;
|
wmi->cmd_rsp_buf = rsp_buf;
|
||||||
wmi->cmd_rsp_len = rsp_len;
|
wmi->cmd_rsp_len = rsp_len;
|
||||||
|
|
||||||
ret = ath9k_wmi_cmd_issue(wmi, skb, cmd_id, cmd_len);
|
|
||||||
if (ret)
|
|
||||||
goto out;
|
|
||||||
|
|
||||||
spin_lock_irqsave(&wmi->wmi_lock, flags);
|
spin_lock_irqsave(&wmi->wmi_lock, flags);
|
||||||
wmi->last_cmd_id = cmd_id;
|
wmi->last_cmd_id = cmd_id;
|
||||||
spin_unlock_irqrestore(&wmi->wmi_lock, flags);
|
spin_unlock_irqrestore(&wmi->wmi_lock, flags);
|
||||||
|
|
||||||
|
ret = ath9k_wmi_cmd_issue(wmi, skb, cmd_id, cmd_len);
|
||||||
|
if (ret)
|
||||||
|
goto out;
|
||||||
|
|
||||||
time_left = wait_for_completion_timeout(&wmi->cmd_wait, timeout);
|
time_left = wait_for_completion_timeout(&wmi->cmd_wait, timeout);
|
||||||
if (!time_left) {
|
if (!time_left) {
|
||||||
ath_print(common, ATH_DBG_WMI,
|
ath_print(common, ATH_DBG_WMI,
|
||||||
|
|
Loading…
Add table
Reference in a new issue