lkml.org 
[lkml]   [2022]   [Jan]   [24]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.15 271/846] iwlwifi: mvm: test roc running status bits before removing the sta
    Date
    From: Nathan Errera <nathan.errera@intel.com>

    [ Upstream commit 998e1aba6e5eb35370eaf30ccc1823426ec11f90 ]

    In some cases the sta is being removed twice since we do not test the
    roc aux running before removing it. Start looking at the bit before
    removing the sta.

    Signed-off-by: Nathan Errera <nathan.errera@intel.com>
    Fixes: 2c2c3647cde4 ("iwlwifi: mvm: support ADD_STA_CMD_API_S ver 12")
    Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
    Link: https://lore.kernel.org/r/iwlwifi.20211219121514.d5376ac6bcb0.Ic5f8470ea60c072bde9d1503e5f528b65e301e20@changeid
    Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    .../net/wireless/intel/iwlwifi/mvm/time-event.c | 15 ++++++++++++---
    1 file changed, 12 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 e91f8e889df70..f93f15357a3f8 100644
    --- a/drivers/net/wireless/intel/iwlwifi/mvm/time-event.c
    +++ b/drivers/net/wireless/intel/iwlwifi/mvm/time-event.c
    @@ -49,14 +49,13 @@ void iwl_mvm_roc_done_wk(struct work_struct *wk)
    struct iwl_mvm *mvm = container_of(wk, struct iwl_mvm, roc_done_wk);

    /*
    - * Clear the ROC_RUNNING /ROC_AUX_RUNNING status bit.
    + * Clear the ROC_RUNNING status bit.
    * This will cause the TX path to drop offchannel transmissions.
    * That would also be done by mac80211, but it is racy, in particular
    * in the case that the time event actually completed in the firmware
    * (which is handled in iwl_mvm_te_handle_notif).
    */
    clear_bit(IWL_MVM_STATUS_ROC_RUNNING, &mvm->status);
    - clear_bit(IWL_MVM_STATUS_ROC_AUX_RUNNING, &mvm->status);

    synchronize_net();

    @@ -82,9 +81,19 @@ void iwl_mvm_roc_done_wk(struct work_struct *wk)
    mvmvif = iwl_mvm_vif_from_mac80211(mvm->p2p_device_vif);
    iwl_mvm_flush_sta(mvm, &mvmvif->bcast_sta, true);
    }
    - } else {
    + }
    +
    + /*
    + * Clear the ROC_AUX_RUNNING status bit.
    + * This will cause the TX path to drop offchannel transmissions.
    + * That would also be done by mac80211, but it is racy, in particular
    + * in the case that the time event actually completed in the firmware
    + * (which is handled in iwl_mvm_te_handle_notif).
    + */
    + if (test_and_clear_bit(IWL_MVM_STATUS_ROC_AUX_RUNNING, &mvm->status)) {
    /* do the same in case of hot spot 2.0 */
    iwl_mvm_flush_sta(mvm, &mvm->aux_sta, true);
    +
    /* In newer version of this command an aux station is added only
    * in cases of dedicated tx queue and need to be removed in end
    * of use */
    --
    2.34.1


    \
     
     \ /
      Last update: 2022-01-25 00:11    [W:4.223 / U:0.652 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site