Message ID | 20190319110013.45228-1-nbd@nbd.name (mailing list archive) |
---|---|
State | Accepted |
Delegated to: | Johannes Berg |
Headers | show |
Series | [v2] mac80211: un-schedule TXQs on powersave start | expand |
Felix Fietkau <nbd@nbd.name> writes: > Once a station enters powersave, its queues should not be returned by > ieee80211_next_txq() anymore. They will be re-scheduled again after the > station has woken up again > > Fixes: 1866760096bf4 ("mac80211: Add TXQ scheduling API") > Signed-off-by: Felix Fietkau <nbd@nbd.name> Acked-by: Toke Høiland-Jørgensen <toke@redhat.com> > --- > net/mac80211/rx.c | 10 +++++++++- > 1 file changed, 9 insertions(+), 1 deletion(-) > > diff --git a/net/mac80211/rx.c b/net/mac80211/rx.c > index 295535b75184..60aac91e35d0 100644 > --- a/net/mac80211/rx.c > +++ b/net/mac80211/rx.c > @@ -1568,7 +1568,15 @@ static void sta_ps_start(struct sta_info *sta) > return; > > for (tid = 0; tid < IEEE80211_NUM_TIDS; tid++) { > - if (txq_has_queue(sta->sta.txq[tid])) > + struct ieee80211_txq *txq = sta->sta.txq[tid]; > + struct txq_info *txqi = to_txq_info(txq); > + > + spin_lock(&local->active_txq_lock[txq->ac]); > + if (!list_empty(&txqi->schedule_order)) > + list_del_init(&txqi->schedule_order); > + spin_unlock(&local->active_txq_lock[txq->ac]); > + > + if (txq_has_queue(txq)) > set_bit(tid, &sta->txq_buffered_tids); > else > clear_bit(tid, &sta->txq_buffered_tids); > -- > 2.17.0
diff --git a/net/mac80211/rx.c b/net/mac80211/rx.c index 295535b75184..60aac91e35d0 100644 --- a/net/mac80211/rx.c +++ b/net/mac80211/rx.c @@ -1568,7 +1568,15 @@ static void sta_ps_start(struct sta_info *sta) return; for (tid = 0; tid < IEEE80211_NUM_TIDS; tid++) { - if (txq_has_queue(sta->sta.txq[tid])) + struct ieee80211_txq *txq = sta->sta.txq[tid]; + struct txq_info *txqi = to_txq_info(txq); + + spin_lock(&local->active_txq_lock[txq->ac]); + if (!list_empty(&txqi->schedule_order)) + list_del_init(&txqi->schedule_order); + spin_unlock(&local->active_txq_lock[txq->ac]); + + if (txq_has_queue(txq)) set_bit(tid, &sta->txq_buffered_tids); else clear_bit(tid, &sta->txq_buffered_tids);
Once a station enters powersave, its queues should not be returned by ieee80211_next_txq() anymore. They will be re-scheduled again after the station has woken up again Fixes: 1866760096bf4 ("mac80211: Add TXQ scheduling API") Signed-off-by: Felix Fietkau <nbd@nbd.name> --- net/mac80211/rx.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-)