mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-04 08:36:48 +07:00
iwlwifi: mvm: call ieee80211_scan_completed when needed
When RFKill cuts short a scan, mac80211 cancels the scan. This is done by sending a host command to the firmware, but this command was dropped because of RFKill. Flag this command as "SEND_IN_RFKILL" to make sure it is sent to the firmware. The firmware will send SCAN_COMPLETE_NOTIFICATION which will trigger a call to ieee80211_scan_completed. If the scan cannot be aborted, it is because the firmware already finished the scan but we hadn't notified mac80211 at the time mac80211 decided to cancel the scan. By the time we see the scan could not be aborted, mac80211 has been notified already. This patch fixes situations in which we didn't notify mac80211 upon completion of the scan that was cut short by RFkill. Cc: stable@vger.kernel.org [3.10+] Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com> Signed-off-by: Johannes Berg <johannes.berg@intel.com>
This commit is contained in:
parent
08a5dd3842
commit
5a3e9f7f8c
@ -394,6 +394,11 @@ static bool iwl_mvm_scan_abort_notif(struct iwl_notif_wait_data *notif_wait,
|
||||
return false;
|
||||
}
|
||||
|
||||
/*
|
||||
* If scan cannot be aborted, it means that we had a
|
||||
* SCAN_COMPLETE_NOTIFICATION in the pipe and it called
|
||||
* ieee80211_scan_completed already.
|
||||
*/
|
||||
IWL_DEBUG_SCAN(mvm, "Scan cannot be aborted, exit now: %d\n",
|
||||
*resp);
|
||||
return true;
|
||||
@ -417,14 +422,19 @@ void iwl_mvm_cancel_scan(struct iwl_mvm *mvm)
|
||||
SCAN_COMPLETE_NOTIFICATION };
|
||||
int ret;
|
||||
|
||||
if (mvm->scan_status == IWL_MVM_SCAN_NONE)
|
||||
return;
|
||||
|
||||
iwl_init_notification_wait(&mvm->notif_wait, &wait_scan_abort,
|
||||
scan_abort_notif,
|
||||
ARRAY_SIZE(scan_abort_notif),
|
||||
iwl_mvm_scan_abort_notif, NULL);
|
||||
|
||||
ret = iwl_mvm_send_cmd_pdu(mvm, SCAN_ABORT_CMD, CMD_SYNC, 0, NULL);
|
||||
ret = iwl_mvm_send_cmd_pdu(mvm, SCAN_ABORT_CMD,
|
||||
CMD_SYNC | CMD_SEND_IN_RFKILL, 0, NULL);
|
||||
if (ret) {
|
||||
IWL_ERR(mvm, "Couldn't send SCAN_ABORT_CMD: %d\n", ret);
|
||||
/* mac80211's state will be cleaned in the fw_restart flow */
|
||||
goto out_remove_notif;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user