ath10k: make ath10k report discarded packets to mac80211
authorIgnacio Nunez Hernanz <nacho.nunez@aoifes.com>
Mon, 26 Feb 2018 10:16:46 +0000 (12:16 +0200)
committerKalle Valo <kvalo@codeaurora.org>
Mon, 26 Feb 2018 14:44:26 +0000 (16:44 +0200)
Whenever ath10k firmware discards a packet (HTT_TX_COMPL_STATE_DISCARD
flag), the skb is freed and mac80211 does not get feedback through
ieee80211_tx_status().

Instead, make sure that the IEEE80211_TX_STAT_ACK flag is disabled and
let the packet go through, like ath9k does.

Signed-off-by: Ignacio Nunez Hernanz <nacho.nunez@aoifes.com>
[kvalo@codeaurora.org: rebase patch manually]
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
drivers/net/wireless/ath/ath10k/txrx.c

index 5b3b021..70e23bb 100644 (file)
@@ -102,11 +102,6 @@ int ath10k_txrx_tx_unref(struct ath10k_htt *htt,
        memset(&info->status, 0, sizeof(info->status));
        trace_ath10k_txrx_tx_unref(ar, tx_done->msdu_id);
 
-       if (tx_done->status == HTT_TX_COMPL_STATE_DISCARD) {
-               ieee80211_free_txskb(htt->ar->hw, msdu);
-               return 0;
-       }
-
        if (!(info->flags & IEEE80211_TX_CTL_NO_ACK))
                info->flags |= IEEE80211_TX_STAT_ACK;
 
@@ -117,6 +112,13 @@ int ath10k_txrx_tx_unref(struct ath10k_htt *htt,
            (info->flags & IEEE80211_TX_CTL_NO_ACK))
                info->flags |= IEEE80211_TX_STAT_NOACK_TRANSMITTED;
 
+       if (tx_done->status == HTT_TX_COMPL_STATE_DISCARD) {
+               if (info->flags & IEEE80211_TX_CTL_NO_ACK)
+                       info->flags &= ~IEEE80211_TX_STAT_NOACK_TRANSMITTED;
+               else
+                       info->flags &= ~IEEE80211_TX_STAT_ACK;
+       }
+
        ieee80211_tx_status(htt->ar->hw, msdu);
        /* we do not own the msdu anymore */