diff options
| author | Felix Fietkau <nbd@nbd.name> | 2020-08-23 21:22:20 +0200 |
|---|---|---|
| committer | Felix Fietkau <nbd@nbd.name> | 2020-09-24 18:10:17 +0200 |
| commit | e1378e5228aaa1bf6bb253a379c7de1722a94e00 (patch) | |
| tree | fc4e86c7f45c2dd4b8e271443191991d5f44fd44 /drivers/net/wireless/mediatek/mt76/mt7915/mac.c | |
| parent | 513d6acb97d401010c905303c2cf32fb09ba33fa (diff) | |
| download | linux-e1378e5228aaa1bf6bb253a379c7de1722a94e00.tar.gz linux-e1378e5228aaa1bf6bb253a379c7de1722a94e00.tar.bz2 linux-e1378e5228aaa1bf6bb253a379c7de1722a94e00.zip | |
mt76: rely on AQL for burst size limits on tx queueing
Now that AQL works well on all mt76 drivers, completely replace the arbitrary
burst sizing and number of bursts logic for tx scheduling.
For the short period of time in which AQL does not work well yet, limit each
stations to 16 in-flight packets that have no estimated tx time.
This should avoid filling the queue if a station connects and queues up a
large number of packets before rate control information is available, especially
with hardware rate control
Signed-off-by: Felix Fietkau <nbd@nbd.name>
Diffstat (limited to 'drivers/net/wireless/mediatek/mt76/mt7915/mac.c')
| -rw-r--r-- | drivers/net/wireless/mediatek/mt76/mt7915/mac.c | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/mac.c b/drivers/net/wireless/mediatek/mt76/mt7915/mac.c index cbcdd30a24d7..4d6e4143e346 100644 --- a/drivers/net/wireless/mediatek/mt76/mt7915/mac.c +++ b/drivers/net/wireless/mediatek/mt76/mt7915/mac.c @@ -927,10 +927,21 @@ void mt7915_mac_tx_free(struct mt7915_dev *dev, struct sk_buff *skb) mt7915_txp_skb_unmap(mdev, txwi); if (txwi->skb) { + struct ieee80211_tx_info *info = IEEE80211_SKB_CB(txwi->skb); void *txwi_ptr = mt76_get_txwi_ptr(mdev, txwi); if (likely(txwi->skb->protocol != cpu_to_be16(ETH_P_PAE))) mt7915_tx_check_aggr(sta, txwi_ptr); + + if (sta && !info->tx_time_est) { + struct mt76_wcid *wcid = (struct mt76_wcid *)sta->drv_priv; + int pending; + + pending = atomic_dec_return(&wcid->non_aql_packets); + if (pending < 0) + atomic_cmpxchg(&wcid->non_aql_packets, pending, 0); + } + mt7915_tx_complete_status(mdev, txwi->skb, sta, stat); txwi->skb = NULL; } |
