Message ID | 20230808205605.4105670-1-greearb@candelatech.com |
---|---|
State | New |
Headers | show |
Series | wifi: iwlwifi: Ensure ack flag is properly cleared. | expand |
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 --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; } /*