diff mbox series

wifi: iwlwifi: Ensure ack flag is properly cleared.

Message ID 20230808205605.4105670-1-greearb@candelatech.com (mailing list archive)
State Accepted
Delegated to: Johannes Berg
Headers show
Series wifi: iwlwifi: Ensure ack flag is properly cleared. | expand

Commit Message

Ben Greear Aug. 8, 2023, 8:56 p.m. UTC
From: Ben Greear <greearb@candelatech.com>

Debugging indicates that nothing else is clearing the info->flags,
so some frames were flagged as ACKed when they should not be.
Explicitly clear the ack flag to ensure this does not happen.

Signed-off-by: Ben Greear <greearb@candelatech.com>
---
 drivers/net/wireless/intel/iwlwifi/mvm/tx.c | 3 +++
 1 file changed, 3 insertions(+)

Comments

Greenman, Gregory Aug. 28, 2023, 12:48 p.m. UTC | #1
On Tue, 2023-08-08 at 13:56 -0700, greearb@candelatech.com wrote:
> From: Ben Greear <greearb@candelatech.com>
> 
> Debugging indicates that nothing else is clearing the info->flags,
> so some frames were flagged as ACKed when they should not be.
> Explicitly clear the ack flag to ensure this does not happen.
> 
> Signed-off-by: Ben Greear <greearb@candelatech.com>
> ---
>  drivers/net/wireless/intel/iwlwifi/mvm/tx.c | 3 +++
>  1 file changed, 3 insertions(+)
> 
> diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/tx.c b/drivers/net/wireless/intel/iwlwifi/mvm/tx.c
> index 0abc31a6951d..67f208cc19c8 100644
> --- a/drivers/net/wireless/intel/iwlwifi/mvm/tx.c
> +++ b/drivers/net/wireless/intel/iwlwifi/mvm/tx.c
> @@ -1863,6 +1863,7 @@ static void iwl_mvm_rx_tx_cmd_single(struct iwl_mvm *mvm,
>                 iwl_trans_free_tx_cmd(mvm->trans, info->driver_data[1]);
>  
>                 memset(&info->status, 0, sizeof(info->status));
> +               info->flags &= ~(IEEE80211_TX_STAT_ACK | IEEE80211_TX_STAT_TX_FILTERED);
>  
>                 /* inform mac80211 about what happened with the frame */
>                 switch (status & TX_STATUS_MSK) {
> @@ -2241,6 +2242,8 @@ static void iwl_mvm_tx_reclaim(struct iwl_mvm *mvm, int sta_id, int tid,
>                  */
>                 if (!is_flush)
>                         info->flags |= IEEE80211_TX_STAT_ACK;
> +               else
> +                       info->flags &= ~IEEE80211_TX_STAT_ACK;
>         }
>  
>         /*
Acked-by: Gregory Greenman <gregory.greenman@intel.com>
diff mbox series

Patch

diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/tx.c b/drivers/net/wireless/intel/iwlwifi/mvm/tx.c
index 0abc31a6951d..67f208cc19c8 100644
--- a/drivers/net/wireless/intel/iwlwifi/mvm/tx.c
+++ b/drivers/net/wireless/intel/iwlwifi/mvm/tx.c
@@ -1863,6 +1863,7 @@  static void iwl_mvm_rx_tx_cmd_single(struct iwl_mvm *mvm,
 		iwl_trans_free_tx_cmd(mvm->trans, info->driver_data[1]);
 
 		memset(&info->status, 0, sizeof(info->status));
+		info->flags &= ~(IEEE80211_TX_STAT_ACK | IEEE80211_TX_STAT_TX_FILTERED);
 
 		/* inform mac80211 about what happened with the frame */
 		switch (status & TX_STATUS_MSK) {
@@ -2241,6 +2242,8 @@  static void iwl_mvm_tx_reclaim(struct iwl_mvm *mvm, int sta_id, int tid,
 		 */
 		if (!is_flush)
 			info->flags |= IEEE80211_TX_STAT_ACK;
+		else
+			info->flags &= ~IEEE80211_TX_STAT_ACK;
 	}
 
 	/*