iwlwifi: mvm: clear IN_D3 after wowlan status cmd
authorShaul Triebitz <shaul.triebitz@intel.com>
Fri, 22 Jan 2021 12:52:39 +0000 (14:52 +0200)
committerKalle Valo <kvalo@codeaurora.org>
Mon, 25 Jan 2021 13:59:19 +0000 (15:59 +0200)
commit96d2bfb7948a96709ba57084d64ac56c1730557c
tree34fabd89a114d9d763f9f8f3638bb4551e26d001
parent16062c12edb8ed2dfb15e6a914ff4edf858ab9e0
iwlwifi: mvm: clear IN_D3 after wowlan status cmd

In D3 resume flow, avoid the following race where sending
packets before updating the sequence number (sequence
number received from the wowlan status command response):
Thread 1:
__iwl_mvm_resume clears IWL_MVM_STATUS_IN_D3 and is cut
by thread 2 before reaching iwl_mvm_query_wakeup_reasons.
Thread 2:
iwl_mvm_mac_itxq_xmit calls iwl_mvm_tx_skb since
IWL_MVM_STATUS_IN_D3 is not set using a wrong sequence number.
Thread 1:
__iwl_mvm_resume continues and calls iwl_mvm_query_wakeup_reasons
updating the sequence number received from the firmware.

The next packet that will be sent now will cause sysassert 0x1096.

Fix the bug by moving 'clear IWL_MVM_STATUS_IN_D3' to after
sending the wowlan status command and updating the sequence
number.

Signed-off-by: Shaul Triebitz <shaul.triebitz@intel.com>
Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
Link: https://lore.kernel.org/r/iwlwifi.20210122144849.fe927ec939c6.I103d3321fb55da7e6c6c51582cfadf94eb8b6c58@changeid
drivers/net/wireless/intel/iwlwifi/mvm/d3.c