iwlwifi: mvm: avoid sending too many BARs
authorSara Sharon <sara.sharon@intel.com>
Tue, 1 May 2018 12:12:08 +0000 (15:12 +0300)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 25 Nov 2019 08:52:05 +0000 (09:52 +0100)
[ Upstream commit 1a19c139be18ed4d6d681049cc48586fae070120 ]

When we receive TX response, we may release a few packets
due to a hole that was closed in the transmission window.

However, if that frame failed, we will mark all the released
frames as failed and will send multiple BARs.

This affects statistics badly, and cause unnecessary frames
transmission.

Instead, mark all the following packets as success, with the
desired result of sending a bar for the failed frame only.

Signed-off-by: Sara Sharon <sara.sharon@intel.com>
Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/net/wireless/intel/iwlwifi/mvm/tx.c

index 1aa74b87599ff3e1101c2b17cebd38c667bd430b..63dcea640d076b0cbf99157381c540dc41d7002b 100644 (file)
@@ -1303,6 +1303,14 @@ static void iwl_mvm_rx_tx_cmd_single(struct iwl_mvm *mvm,
                        break;
                }
 
+               /*
+                * If we are freeing multiple frames, mark all the frames
+                * but the first one as acked, since they were acknowledged
+                * before
+                * */
+               if (skb_freed > 1)
+                       info->flags |= IEEE80211_TX_STAT_ACK;
+
                iwl_mvm_tx_status_check_trigger(mvm, status);
 
                info->status.rates[0].count = tx_resp->failure_frame + 1;