lkml.org 
[lkml]   [2022]   [Jan]   [17]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH AUTOSEL 5.16 167/217] iwlwifi: mvm: fix AUX ROC removal
    Date
    From: Avraham Stern <avraham.stern@intel.com>

    [ Upstream commit f0337cb48f3bf5f0bbccc985d8a0a8c4aa4934b7 ]

    When IWL_UCODE_TLV_CAPA_SESSION_PROT_CMD is set, removing a time event
    always tries to cancel session protection. However, AUX ROC does
    not use session protection so it was never removed. As a result,
    if the driver tries to allocate another AUX ROC event right after
    cancelling the first one, it will fail with a warning.
    In addition, the time event data passed to iwl_mvm_remove_aux_roc_te()
    is incorrect. Fix it.

    Signed-off-by: Avraham Stern <avraham.stern@intel.com>
    Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
    Link: https://lore.kernel.org/r/iwlwifi.20211219132536.915e1f69f062.Id837e917f1c2beaca7c1eb33333d622548918a76@changeid
    Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/net/wireless/intel/iwlwifi/mvm/time-event.c | 9 ++++++---
    1 file changed, 6 insertions(+), 3 deletions(-)

    diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/time-event.c b/drivers/net/wireless/intel/iwlwifi/mvm/time-event.c
    index e6813317edf35..48383fdac634e 100644
    --- a/drivers/net/wireless/intel/iwlwifi/mvm/time-event.c
    +++ b/drivers/net/wireless/intel/iwlwifi/mvm/time-event.c
    @@ -687,11 +687,14 @@ static bool __iwl_mvm_remove_time_event(struct iwl_mvm *mvm,
    iwl_mvm_te_clear_data(mvm, te_data);
    spin_unlock_bh(&mvm->time_event_lock);

    - /* When session protection is supported, the te_data->id field
    + /* When session protection is used, the te_data->id field
    * is reused to save session protection's configuration.
    + * For AUX ROC, HOT_SPOT_CMD is used and the te_data->id field is set
    + * to HOT_SPOT_CMD.
    */
    if (fw_has_capa(&mvm->fw->ucode_capa,
    - IWL_UCODE_TLV_CAPA_SESSION_PROT_CMD)) {
    + IWL_UCODE_TLV_CAPA_SESSION_PROT_CMD) &&
    + id != HOT_SPOT_CMD) {
    if (mvmvif && id < SESSION_PROTECT_CONF_MAX_ID) {
    /* Session protection is still ongoing. Cancel it */
    iwl_mvm_cancel_session_protection(mvm, mvmvif, id);
    @@ -1027,7 +1030,7 @@ void iwl_mvm_stop_roc(struct iwl_mvm *mvm, struct ieee80211_vif *vif)
    iwl_mvm_p2p_roc_finished(mvm);
    } else {
    iwl_mvm_remove_aux_roc_te(mvm, mvmvif,
    - &mvmvif->time_event_data);
    + &mvmvif->hs_time_event_data);
    iwl_mvm_roc_finished(mvm);
    }

    --
    2.34.1
    \
     
     \ /
      Last update: 2022-01-18 03:39    [W:4.583 / U:0.508 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site