Johannes Berg <johannes@xxxxxxxxxxxxxxxx> writes: > From: Johannes Berg <johannes.berg@xxxxxxxxx> > > In some cases (depending on the driver, but it's true e.g. for > iwlwifi) we're using an internal TXQ for management packets, > mostly to simplify the code and to have a place to queue them. > However, it appears that in certain cases we can confuse the > code and management frames are dropped, which is certainly not > what we want. > > Short-circuit the processing of management frames. To keep the > impact minimal, only put them on the frags queue and check the > tid == management only for doing that and to skip the airtime > fairness checks, if applicable. > > Signed-off-by: Johannes Berg <johannes.berg@xxxxxxxxx> > --- > net/mac80211/tx.c | 18 +++++++++++++++--- > 1 file changed, 15 insertions(+), 3 deletions(-) > > diff --git a/net/mac80211/tx.c b/net/mac80211/tx.c > index 5d06de61047a..b2d09acb9fb0 100644 > --- a/net/mac80211/tx.c > +++ b/net/mac80211/tx.c > @@ -5,7 +5,7 @@ > * Copyright 2006-2007 Jiri Benc <jbenc@xxxxxxx> > * Copyright 2007 Johannes Berg <johannes@xxxxxxxxxxxxxxxx> > * Copyright 2013-2014 Intel Mobile Communications GmbH > - * Copyright (C) 2018-2020 Intel Corporation > + * Copyright (C) 2018-2021 Intel Corporation > * > * Transmit and frame generation functions. > */ > @@ -1388,8 +1388,17 @@ static void ieee80211_txq_enqueue(struct ieee80211_local *local, > ieee80211_set_skb_enqueue_time(skb); > > spin_lock_bh(&fq->lock); > - fq_tin_enqueue(fq, tin, flow_idx, skb, > - fq_skb_free_func); > + /* > + * For management frames, don't really apply codel etc., > + * we don't want to apply any shaping or anything we just > + * want to simplify the driver API by having them on the > + * txqi. > + */ > + if (unlikely(txqi->txq.tid == IEEE80211_NUM_TIDS)) > + __skb_queue_tail(&txqi->frags, skb); > + else > + fq_tin_enqueue(fq, tin, flow_idx, skb, > + fq_skb_free_func); One consequence of this is that we create a strict priority queue for management frames. With all the possibilities for badness (such as the ability of starving all other queues) that carries with it. I guess that's probably fine for management frames, though, right? As in, there is some other mechanism that prevents abuse of this? -Toke