mac80211: fix reordering of buffered broadcast packets
authorFelix Fietkau <[email protected]>
Wed, 28 Nov 2018 21:39:16 +0000 (22:39 +0100)
committerJohannes Berg <[email protected]>
Wed, 5 Dec 2018 11:29:35 +0000 (12:29 +0100)
If the buffered broadcast queue contains packets, letting new packets bypass
that queue can lead to heavy reordering, since the driver is probably throttling
transmission of buffered multicast packets after beacons.

Keep buffering packets until the buffer has been cleared (and no client
is in powersave mode).

Cc: [email protected]
Signed-off-by: Felix Fietkau <[email protected]>
Signed-off-by: Johannes Berg <[email protected]>
net/mac80211/tx.c

index e0ccee23fbcdb209a6f7f5704c2aea2d2ef74782..1f536ba573b4852ef18f1a80129e56c4961be520 100644 (file)
@@ -439,8 +439,8 @@ ieee80211_tx_h_multicast_ps_buf(struct ieee80211_tx_data *tx)
        if (ieee80211_hw_check(&tx->local->hw, QUEUE_CONTROL))
                info->hw_queue = tx->sdata->vif.cab_queue;
 
-       /* no stations in PS mode */
-       if (!atomic_read(&ps->num_sta_ps))
+       /* no stations in PS mode and no buffered packets */
+       if (!atomic_read(&ps->num_sta_ps) && skb_queue_empty(&ps->bc_buf))
                return TX_CONTINUE;
 
        info->flags |= IEEE80211_TX_CTL_SEND_AFTER_DTIM;