Patch "iwlwifi: mvm: flush queue before deleting ROC" has been added to the 4.14-stable tree
Subsystems (2)
This is a note to let you know that I've just added the patch titled
iwlwifi: mvm: flush queue before deleting ROC
to the 4.14-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
iwlwifi-mvm-flush-queue-before-deleting-roc.patch
and it can be found in the queue-4.14 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
6c2d49fdc5d947c5fe89935bd52e69f10000f4cbMon Sep 17 00:00:00 2001
From: Johannes Berg <[email protected]>
Date: Mon, 13 Nov 2017 17:26:09 +0100
Subject: iwlwifi: mvm: flush queue before deleting ROC
From: Johannes Berg <[email protected]>
commit 6c2d49fdc5d947c5fe89935bd52e69f10000f4cb upstream.
Before deleting a time event (remain-on-channel instance), flush the queue so that frames cannot get stuck on it. We already flush the AUX STA queues, but a separate station is used for the P2P Device queue.
--- drivers/net/wireless/intel/iwlwifi/mvm/mvm.h | 2 + drivers/net/wireless/intel/iwlwifi/mvm/time-event.c | 24 ++++++++++++++++++-- 2 files changed, 24 insertions(+), 2 deletions(-)
drivers/net/wireless/intel/iwlwifi/mvm/mvm.h +2 -0
@@ -1042,6 +1042,7 @@ struct iwl_mvm {* @IWL_MVM_STATUS_ROC_AUX_RUNNING: AUX remain-on-channel is running * @IWL_MVM_STATUS_D3_RECONFIG: D3 reconfiguration is being done * @IWL_MVM_STATUS_FIRMWARE_RUNNING: firmware is running +* @IWL_MVM_STATUS_NEED_FLUSH_P2P: need to flush P2P bcast STA */ enum iwl_mvm_status {IWL_MVM_STATUS_HW_RFKILL ,
@@ -1053,6 +1054,7 @@ enum iwl_mvm_status {IWL_MVM_STATUS_ROC_AUX_RUNNING ,IWL_MVM_STATUS_D3_RECONFIG ,IWL_MVM_STATUS_FIRMWARE_RUNNING , + IWL_MVM_STATUS_NEED_FLUSH_P2P, };/* Keep track of completed init configuration */
drivers/net/wireless/intel/iwlwifi/mvm/time-event.c +22 -2
@@ -132,6 +132,24 @@ void iwl_mvm_roc_done_wk(struct work_str* executed, and a new time event means a new command. */ iwl_mvm_flush_sta (mvm, &mvm->aux_sta, true,CMD_ASYNC ); + +/* Do the same for the P2P device queue (STA) */ +if (test_and_clear_bit (IWL_MVM_STATUS_NEED_FLUSH_P2P , &mvm->status)) { +struct iwl_mvm_vif *mvmvif; + +/* +* NB: access to this pointer would be racy, but the flush bit +* can only be set when we had a P2P-Device VIF, and we have a +* flush of this work in iwl_mvm_prepare_mac_removal() so it's +* not really racy. +*/ + +if (!WARN_ON (!mvm->p2p_device_vif)) { + mvmvif =iwl_mvm_vif_from_mac80211 (mvm->p2p_device_vif); +iwl_mvm_flush_sta (mvm, &mvmvif->bcast_sta, true, +CMD_ASYNC ); + } + } }static void iwl_mvm_roc_finished (struct iwl_mvm *mvm)
@@ -855,10 +873,12 @@ void iwl_mvm_stop_roc(struct iwl_mvm *mv mvmvif =iwl_mvm_vif_from_mac80211 (te_data->vif); -if (te_data->vif->type ==NL80211_IFTYPE_P2P_DEVICE ) +if (te_data->vif->type ==NL80211_IFTYPE_P2P_DEVICE ) {iwl_mvm_remove_time_event (mvm, mvmvif, te_data); -else +set_bit (IWL_MVM_STATUS_NEED_FLUSH_P2P , &mvm->status); + }else {iwl_mvm_remove_aux_roc_te (mvm, mvmvif, te_data); + }iwl_mvm_roc_finished (mvm); }
Patches currently in stable-queue which might be from [email protected] are
queue-4.14/iwlwifi-mvm-flush-queue-before-deleting-roc.patch