Message ID | 863ed21f-d2fe-f1e1-6f3c-b4061c777f59@aoifes.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Ignacio Núñez Hernanz wrote: > 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> This didn't apply so I rewrote the patch manually. Please check it from the pending branch: https://git.kernel.org/pub/scm/linux/kernel/git/kvalo/ath.git/commit/?h=pending&id=74e9f654262e77676c477f01ce5a6f27237b2f25
Ignacio Núñez Hernanz wrote: > 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> Patch applied to ath-next branch of ath.git, thanks. abb374fe8460 ath10k: make ath10k report discarded packets to mac80211
diff --git a/drivers/net/wireless/ath/ath10k/txrx.c b/drivers/net/wireless/ath/ath10k/txrx.c index d4986f626c35..37537530de76 100644 --- a/drivers/net/wireless/ath/ath10k/txrx.c +++ b/drivers/net/wireless/ath/ath10k/txrx.c @@ -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 */