All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Toke Høiland-Jørgensen" <toke@toke.dk>
To: Tim Shepard <shep@alum.mit.edu>
Cc: linux-wireless@vger.kernel.org,
	make-wifi-fast@lists.bufferbloat.net,
	ath9k-devel@lists.ath9k.org, Felix Fietkau <nbd@nbd.name>
Subject: Re: [PATCH] ath9k: Switch to using mac80211 intermediate software queues.
Date: Mon, 04 Jul 2016 19:46:53 +0200	[thread overview]
Message-ID: <87lh1hnvn6.fsf@toke.dk> (raw)
In-Reply-To: <E1bJYSp-0001M8-00@www.xplot.org> (Tim Shepard's message of "Sat, 02 Jul 2016 23:52:59 -0400")

Tim Shepard <shep@alum.mit.edu> writes:

> Thanks for unconfusing me a couple weeks ago, and cluing me into how
> the limit on ->pending_frames is not really relevant for the data
> packets that go through the new intermediate queues.
>
> But I'm not sure if this would allow us to remove the limit on
> pending_frames because even though normal data packets would not
> normally build up that many packets, there are other packet types
> which bypass the intermediate queues and are transmitted directly
> (also in most cases bypassing the ath9k internal queues in the way
> ath9k worked before we patched it to use the mac80211 intermediate
> queues).

Yes, but, well, since they're not queued they are not going to overflow
anything. The aggregation building logic stops at two queued aggregates,
so the default limit of 123 packets is never going to be hit when the
queue is moved into the mac80211 layer. So keeping the knobs around only
helps people who purposefully want to cripple their ability to do
aggregation; and it won't be doing what it promises (limiting qlen),
since that is now moved out of the driver. So IMO, removing the knobs is
the right thing to do. I have already updated my patch to do so, which
I'll send as a v2 once the other bits are resolved.

> Along similar lines, from reading the code I think your patch has
> introduced a bug (but I don't know how to demonstrate it at runtime).
>
> Looking in the body of ath_tx_start() at the result of applying your
> patch, we now see this:
>
> 	[...]
>
> 	/* Force queueing of all frames that belong to a virtual interface on
> 	 * a different channel context, to ensure that they are sent on the
> 	 * correct channel.
> 	 */
> 	if (((avp && avp->chanctx != sc->cur_chan) ||
> 	     sc->cur_chan->stopped) && !txctl->force_channel) {
> 		if (!txctl->an)
> 			txctl->an = &avp->mcast_node;
> 		queue = true;
> 		skip_uapsd = true;
> 	}
>
> 	if (!skip_uapsd && ps_resp) {
> 		ath_txq_unlock(sc, txq);
> 		txq = sc->tx.uapsdq;
> 		ath_txq_lock(sc, txq);
> 	} else if(WARN_ON(txctl->an && queue)) 
> 		ath_txq_unlock(sc, txq);
> 		return -EINVAL;
> 	}
>
> 	[...]
>
> In the case where the first if body above is run to force queuing of
> all packets (not just normal data packets), then the else case of the
> second if statement above will surely run and its if statement will
> surely be true, so your new WARN_ON will happen.

Yup, I'm aware of that (and it's why I put in the WARN_ON instead of
just removing those code paths). Haven't seen it trigger yet, but
haven't tried very hard either. Guess you're right that it requires
vifs on different channels...

> Earlier Felix said:
>
>> Channel context based queue handling can be dealt with by
>> stopping/starting relevant queues on channel context changes.
>
> But I don't see how to handle the case here where packets get passed
> to the driver with ath_tx_start() and wind up in the scenario above.

Well, presumably the upper layers won't try to transmit anything through
the old TX path if the start/stop logic is implemented properly. The
chanctx code already seems to call the ieee80211_{start,stop}_queue()
functions when changing context, so not sure what else is needed. Guess
I'll go see if I can provoke an actual triggering of the bug, unless
Felix elaborates on what he means before I get around to it (poke,
Felix? :)).

-Toke

WARNING: multiple messages have this Message-ID (diff)
From: "Toke Høiland-Jørgensen" <toke@toke.dk>
To: ath9k-devel@lists.ath9k.org
Subject: [ath9k-devel] [PATCH] ath9k: Switch to using mac80211 intermediate software	queues.
Date: Mon, 04 Jul 2016 17:47:09 -0000	[thread overview]
Message-ID: <87lh1hnvn6.fsf@toke.dk> (raw)
In-Reply-To: <E1bJYSp-0001M8-00@www.xplot.org> (Tim Shepard's message of "Sat,  02 Jul 2016 23:52:59 -0400")

Tim Shepard <shep@alum.mit.edu> writes:

> Thanks for unconfusing me a couple weeks ago, and cluing me into how
> the limit on ->pending_frames is not really relevant for the data
> packets that go through the new intermediate queues.
>
> But I'm not sure if this would allow us to remove the limit on
> pending_frames because even though normal data packets would not
> normally build up that many packets, there are other packet types
> which bypass the intermediate queues and are transmitted directly
> (also in most cases bypassing the ath9k internal queues in the way
> ath9k worked before we patched it to use the mac80211 intermediate
> queues).

Yes, but, well, since they're not queued they are not going to overflow
anything. The aggregation building logic stops at two queued aggregates,
so the default limit of 123 packets is never going to be hit when the
queue is moved into the mac80211 layer. So keeping the knobs around only
helps people who purposefully want to cripple their ability to do
aggregation; and it won't be doing what it promises (limiting qlen),
since that is now moved out of the driver. So IMO, removing the knobs is
the right thing to do. I have already updated my patch to do so, which
I'll send as a v2 once the other bits are resolved.

> Along similar lines, from reading the code I think your patch has
> introduced a bug (but I don't know how to demonstrate it at runtime).
>
> Looking in the body of ath_tx_start() at the result of applying your
> patch, we now see this:
>
> 	[...]
>
> 	/* Force queueing of all frames that belong to a virtual interface on
> 	 * a different channel context, to ensure that they are sent on the
> 	 * correct channel.
> 	 */
> 	if (((avp && avp->chanctx != sc->cur_chan) ||
> 	     sc->cur_chan->stopped) && !txctl->force_channel) {
> 		if (!txctl->an)
> 			txctl->an = &avp->mcast_node;
> 		queue = true;
> 		skip_uapsd = true;
> 	}
>
> 	if (!skip_uapsd && ps_resp) {
> 		ath_txq_unlock(sc, txq);
> 		txq = sc->tx.uapsdq;
> 		ath_txq_lock(sc, txq);
> 	} else if(WARN_ON(txctl->an && queue)) 
> 		ath_txq_unlock(sc, txq);
> 		return -EINVAL;
> 	}
>
> 	[...]
>
> In the case where the first if body above is run to force queuing of
> all packets (not just normal data packets), then the else case of the
> second if statement above will surely run and its if statement will
> surely be true, so your new WARN_ON will happen.

Yup, I'm aware of that (and it's why I put in the WARN_ON instead of
just removing those code paths). Haven't seen it trigger yet, but
haven't tried very hard either. Guess you're right that it requires
vifs on different channels...

> Earlier Felix said:
>
>> Channel context based queue handling can be dealt with by
>> stopping/starting relevant queues on channel context changes.
>
> But I don't see how to handle the case here where packets get passed
> to the driver with ath_tx_start() and wind up in the scenario above.

Well, presumably the upper layers won't try to transmit anything through
the old TX path if the start/stop logic is implemented properly. The
chanctx code already seems to call the ieee80211_{start,stop}_queue()
functions when changing context, so not sure what else is needed. Guess
I'll go see if I can provoke an actual triggering of the bug, unless
Felix elaborates on what he means before I get around to it (poke,
Felix? :)).

-Toke

  reply	other threads:[~2016-07-04 17:47 UTC|newest]

Thread overview: 118+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-06-17  9:09 [PATCH 0/2] ath9k: Add airtime fairness scheduler Toke Høiland-Jørgensen
2016-06-17  9:09 ` [ath9k-devel] " Toke Høiland-Jørgensen
2016-06-17  9:09 ` [PATCH 1/2] ath9k: use mac80211 intermediate software queues Toke Høiland-Jørgensen
2016-06-17  9:09   ` [ath9k-devel] " Toke Høiland-Jørgensen
2016-06-17 13:28   ` Felix Fietkau
2016-06-17 13:28     ` [ath9k-devel] " Felix Fietkau
2016-06-17 13:41     ` Tim Shepard
2016-06-17 14:08       ` [ath9k-devel] " Tim Shepard
2016-06-17 14:35       ` Felix Fietkau
2016-06-17 14:35         ` [ath9k-devel] " Felix Fietkau
2016-06-17 17:45         ` Tim Shepard
2016-06-17 17:45           ` [ath9k-devel] " Tim Shepard
2016-06-17 19:15           ` Toke Høiland-Jørgensen
2016-06-17 19:16             ` [ath9k-devel] " Toke Høiland-Jørgensen
2016-06-17 13:43     ` Toke Høiland-Jørgensen
2016-06-17 13:43       ` [ath9k-devel] " Toke Høiland-Jørgensen
2016-06-17 13:48       ` Felix Fietkau
2016-06-17 13:48         ` [ath9k-devel] " Felix Fietkau
2016-06-17 16:33         ` Felix Fietkau
2016-06-17 16:33           ` [ath9k-devel] " Felix Fietkau
2016-06-17 14:10     ` Dave Taht
2016-06-17 14:10       ` Dave Taht
2016-06-18 19:05   ` [PATCH] ath9k: Switch to using " Toke Høiland-Jørgensen
2016-06-18 19:06     ` [ath9k-devel] " Toke Høiland-Jørgensen
2016-06-19  3:17     ` Tim Shepard
2016-06-19  3:17       ` [ath9k-devel] " Tim Shepard
2016-06-19  8:52       ` Toke Høiland-Jørgensen
2016-06-19  8:52         ` [ath9k-devel] " Toke Høiland-Jørgensen
2016-06-19 13:39         ` Tim Shepard
2016-06-19 13:40           ` [ath9k-devel] " Tim Shepard
2016-06-19 13:50           ` Toke Høiland-Jørgensen
2016-06-19 13:50             ` [ath9k-devel] " Toke Høiland-Jørgensen
2016-07-03  3:52     ` Tim Shepard
2016-07-03  3:53       ` [ath9k-devel] " Tim Shepard
2016-07-04 17:46       ` Toke Høiland-Jørgensen [this message]
2016-07-04 17:47         ` Toke Høiland-Jørgensen
2016-07-06 13:23         ` Felix Fietkau
2016-07-06 13:23           ` [ath9k-devel] " Felix Fietkau
2016-07-06 14:45           ` Toke Høiland-Jørgensen
2016-07-06 14:46             ` [ath9k-devel] " Toke Høiland-Jørgensen
2016-07-06 16:16     ` [PATCH v2] " Toke Høiland-Jørgensen
2016-07-06 16:17       ` [ath9k-devel] " Toke Høiland-Jørgensen
2016-07-06 17:57       ` Sebastian Gottschall
2016-07-06 18:19         ` [ath9k-devel] " Sebastian Gottschall
2016-07-06 18:13       ` Felix Fietkau
2016-07-06 18:13         ` [ath9k-devel] " Felix Fietkau
2016-07-06 18:52         ` Toke Høiland-Jørgensen
2016-07-06 18:52           ` [ath9k-devel] " Toke Høiland-Jørgensen
2016-07-06 18:59           ` Felix Fietkau
2016-07-06 18:59             ` [ath9k-devel] " Felix Fietkau
2016-07-06 19:08             ` Toke Høiland-Jørgensen
2016-07-06 19:08               ` [ath9k-devel] " Toke Høiland-Jørgensen
2016-07-06 19:34       ` [PATCH v3] " Toke Høiland-Jørgensen
2016-07-06 19:38         ` [ath9k-devel] " Toke Høiland-Jørgensen
2016-07-08 14:26         ` [v3] " Kalle Valo
2016-07-08 14:26           ` [ath9k-devel] " Kalle Valo
2016-07-08 15:53           ` Toke Høiland-Jørgensen
2016-07-08 15:53             ` [ath9k-devel] " Toke Høiland-Jørgensen
2016-07-08 16:10             ` Felix Fietkau
2016-07-08 16:10               ` [ath9k-devel] " Felix Fietkau
2016-07-08 16:28               ` Toke Høiland-Jørgensen
2016-07-08 16:28                 ` [ath9k-devel] " Toke Høiland-Jørgensen
2016-07-08 16:31                 ` Felix Fietkau
2016-07-08 16:31                   ` [ath9k-devel] " Felix Fietkau
2016-07-08 16:38                   ` Toke Høiland-Jørgensen
2016-07-08 16:38                     ` [ath9k-devel] " Toke Høiland-Jørgensen
2016-07-08 18:24                   ` Sebastian Gottschall
2016-07-08 18:24                     ` [ath9k-devel] " Sebastian Gottschall
2016-07-09 12:00                     ` Toke Høiland-Jørgensen
2016-07-09 12:00                       ` [ath9k-devel] " Toke Høiland-Jørgensen
2016-07-08 16:38         ` [PATCH v3] " Tim Shepard
2016-07-08 16:38           ` [ath9k-devel] " Tim Shepard
2016-07-09 15:44           ` Toke Høiland-Jørgensen
2016-07-09 15:45             ` [ath9k-devel] " Toke Høiland-Jørgensen
2016-08-05 16:03         ` [PATCH v4] " Toke Høiland-Jørgensen
2016-08-05 16:05           ` [ath9k-devel] " Toke Høiland-Jørgensen
2016-08-22 15:43           ` Kalle Valo
2016-08-22 15:43             ` [ath9k-devel] " Kalle Valo
2016-08-22 16:16             ` Toke Høiland-Jørgensen
2016-08-22 16:16               ` [ath9k-devel] " Toke Høiland-Jørgensen
2016-08-22 17:02               ` Kalle Valo
2016-08-22 17:02                 ` [ath9k-devel] " Kalle Valo
2016-08-22 17:13                 ` Toke Høiland-Jørgensen
2016-08-22 17:13                   ` [ath9k-devel] " Toke Høiland-Jørgensen
2016-08-23  6:59                   ` Kalle Valo
2016-08-23  6:59                     ` [ath9k-devel] " Kalle Valo
2016-08-23  8:52                     ` Arend van Spriel
2016-08-23  8:58                       ` [ath9k-devel] " Arend van Spriel
2016-10-05 14:02                     ` Toke Høiland-Jørgensen
2016-10-05 14:09                       ` [ath9k-devel] " Toke Høiland-Jørgensen
2016-10-05 15:50                       ` Kalle Valo
2016-10-05 15:50                         ` [ath9k-devel] " Kalle Valo
2016-10-05 16:55                         ` Toke Høiland-Jørgensen
2016-10-05 16:55                           ` [ath9k-devel] " Toke Høiland-Jørgensen
2016-10-05 17:54                           ` Kalle Valo
2016-10-05 17:54                             ` [ath9k-devel] " Kalle Valo
2016-10-05 19:56                             ` Toke Høiland-Jørgensen
2016-10-05 19:56                               ` [ath9k-devel] " Toke Høiland-Jørgensen
2016-09-02 14:00           ` [PATCH v5] " Toke Høiland-Jørgensen
2016-09-03 10:16             ` Felix Fietkau
2016-10-07 11:43             ` [v5] " Kalle Valo
2016-11-09  2:22             ` Kalle Valo
2016-11-09  2:44               ` Tim Shepard
2016-11-09 10:42                 ` Toke Høiland-Jørgensen
2016-11-09 20:07                   ` Valo, Kalle
2016-11-09 11:31             ` [PATCH v6] " Toke Høiland-Jørgensen
2016-11-09 22:42               ` [v6] " Kalle Valo
2016-11-09 23:10                 ` Toke Høiland-Jørgensen
2016-11-15 15:00               ` Kalle Valo
2016-06-17  9:09 ` [PATCH 2/2] ath9k: Add a per-station airtime deficit scheduler Toke Høiland-Jørgensen
2016-06-17  9:09   ` [ath9k-devel] " Toke Høiland-Jørgensen
2016-11-24 13:54 ` [PATCH v2] ath9k: Introduce airtime fairness scheduling between stations Toke Høiland-Jørgensen
2016-11-25 15:16   ` Valo, Kalle
2016-11-27 15:58     ` Toke Høiland-Jørgensen
2016-11-28  9:34       ` Felix Fietkau
2016-11-28 10:00         ` Toke Høiland-Jørgensen
2016-11-28 10:12 ` [PATCH v3] " Toke Høiland-Jørgensen
2016-12-15  8:43   ` [v3] " Kalle Valo

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87lh1hnvn6.fsf@toke.dk \
    --to=toke@toke.dk \
    --cc=ath9k-devel@lists.ath9k.org \
    --cc=linux-wireless@vger.kernel.org \
    --cc=make-wifi-fast@lists.bufferbloat.net \
    --cc=nbd@nbd.name \
    --cc=shep@alum.mit.edu \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.