| From 9ec1190d065998650fd9260dea8cf3e1f56c0e8c Mon Sep 17 00:00:00 2001 |
| From: Felix Fietkau <nbd@nbd.name> |
| Date: Wed, 28 Nov 2018 22:39:16 +0100 |
| Subject: mac80211: fix reordering of buffered broadcast packets |
| |
| From: Felix Fietkau <nbd@nbd.name> |
| |
| commit 9ec1190d065998650fd9260dea8cf3e1f56c0e8c upstream. |
| |
| 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: stable@vger.kernel.org |
| Signed-off-by: Felix Fietkau <nbd@nbd.name> |
| Signed-off-by: Johannes Berg <johannes.berg@intel.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| net/mac80211/tx.c | 4 ++-- |
| 1 file changed, 2 insertions(+), 2 deletions(-) |
| |
| --- a/net/mac80211/tx.c |
| +++ b/net/mac80211/tx.c |
| @@ -419,8 +419,8 @@ ieee80211_tx_h_multicast_ps_buf(struct i |
| if (tx->local->hw.flags & IEEE80211_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; |