mirror of
https://github.com/openwrt/openwrt.git
synced 2024-12-23 15:32:33 +00:00
6e4fb77f9e
several people reported this bug to be causing drop out issues
Signed-off-by: John Crispin <john@phrozen.org>
(cherry picked from commit cac1a4be66
)
42 lines
1.4 KiB
Diff
42 lines
1.4 KiB
Diff
From: Felix Fietkau <nbd@nbd.name>
|
|
Date: Sun, 23 Jul 2017 14:58:22 +0200
|
|
Subject: [PATCH] ath9k: fix more-data flag for buffered multicast
|
|
packets
|
|
|
|
The flag needs to be cleared for the last packet in the list, not the
|
|
first one. Fixes some issues with multicast packet loss for powersave
|
|
clients connected to an ath9k AP.
|
|
|
|
Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|
---
|
|
|
|
--- a/drivers/net/wireless/ath/ath9k/xmit.c
|
|
+++ b/drivers/net/wireless/ath/ath9k/xmit.c
|
|
@@ -2436,7 +2436,6 @@ void ath_tx_cabq(struct ieee80211_hw *hw
|
|
.txq = sc->beacon.cabq
|
|
};
|
|
struct ath_tx_info info = {};
|
|
- struct ieee80211_hdr *hdr;
|
|
struct ath_buf *bf_tail = NULL;
|
|
struct ath_buf *bf;
|
|
LIST_HEAD(bf_q);
|
|
@@ -2480,15 +2479,10 @@ void ath_tx_cabq(struct ieee80211_hw *hw
|
|
if (list_empty(&bf_q))
|
|
return;
|
|
|
|
- bf = list_first_entry(&bf_q, struct ath_buf, list);
|
|
- hdr = (struct ieee80211_hdr *) bf->bf_mpdu->data;
|
|
-
|
|
- if (hdr->frame_control & cpu_to_le16(IEEE80211_FCTL_MOREDATA)) {
|
|
- hdr->frame_control &= ~cpu_to_le16(IEEE80211_FCTL_MOREDATA);
|
|
- dma_sync_single_for_device(sc->dev, bf->bf_buf_addr,
|
|
- sizeof(*hdr), DMA_TO_DEVICE);
|
|
- }
|
|
+ bf = list_last_entry(&bf_q, struct ath_buf, list);
|
|
+ ath9k_set_moredata(sc, bf, false);
|
|
|
|
+ bf = list_first_entry(&bf_q, struct ath_buf, list);
|
|
ath_txq_lock(sc, txctl.txq);
|
|
ath_tx_fill_desc(sc, bf, txctl.txq, 0);
|
|
ath_tx_txqaddbuf(sc, txctl.txq, &bf_q, false);
|