All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Toke Høiland-Jørgensen" <toke@toke.dk>
To: ath9k-devel@lists.ath9k.org
Subject: [ath9k-devel] [PATCH v2] ath9k: Switch to using mac80211 intermediate software	queues.
Date: Wed, 06 Jul 2016 19:08:40 -0000	[thread overview]
Message-ID: <87mvlumvo1.fsf@toke.dk> (raw)
In-Reply-To: <97e6ac26-6ec0-24ee-2834-33f0c86532f3@nbd.name> (Felix Fietkau's message of "Wed, 6 Jul 2016 20:59:55 +0200")

Felix Fietkau <nbd@nbd.name> writes:

> On 2016-07-06 20:52, Toke H?iland-J?rgensen wrote:
>> Felix Fietkau <nbd@nbd.name> writes:
>> 
>>> On 2016-07-06 18:16, Toke H?iland-J?rgensen wrote:
>>>> This switches ath9k over to using the mac80211 intermediate software
>>>> queueing mechanism for data packets. It removes the queueing inside the
>>>> driver, except for the retry queue, and instead pulls from mac80211 when
>>>> a packet is needed. The retry queue is used to store a packet that was
>>>> pulled but can't be sent immediately.
>>>> 
>>>> The old code path in ath_tx_start that would queue packets has been
>>>> removed completely, as has the qlen limit tunables (since there's no
>>>> longer a queue in the driver to limit).
>>>> 
>>>> Based on Tim's original patch set, but reworked quite thoroughly.
>>>> 
>>>> Cc: Tim Shepard <shep@alum.mit.edu>
>>>> Cc: Felix Fietkau <nbd@nbd.name>
>>>> Signed-off-by: Toke H?iland-J?rgensen <toke@toke.dk>
>>>> ---
>>>> Changes since v1:
>>>>   - Remove the old intermediate queueing logic completely instead of
>>>>     just disabling it.
>>>>   - Remove the qlen debug tunables.
>>>>   - Remove the force_channel parameter from struct txctl (since we just
>>>>     removed the code path that was using it).
>>>> 
>>>>  drivers/net/wireless/ath/ath9k/ath9k.h     |  12 +-
>>>>  drivers/net/wireless/ath/ath9k/channel.c   |   2 -
>>>>  drivers/net/wireless/ath/ath9k/debug.c     |  14 +-
>>>>  drivers/net/wireless/ath/ath9k/debug.h     |   2 -
>>>>  drivers/net/wireless/ath/ath9k/debug_sta.c |   4 +-
>>>>  drivers/net/wireless/ath/ath9k/init.c      |   2 +-
>>>>  drivers/net/wireless/ath/ath9k/main.c      |   1 +
>>>>  drivers/net/wireless/ath/ath9k/xmit.c      | 307 +++++++++++------------------
>>>>  8 files changed, 130 insertions(+), 214 deletions(-)
>>> Nice work!
>> 
>> Thanks :)
>> 
>>>> diff --git a/drivers/net/wireless/ath/ath9k/xmit.c b/drivers/net/wireless/ath/ath9k/xmit.c
>>>> index fe795fc..4077eeb 100644
>>>> --- a/drivers/net/wireless/ath/ath9k/xmit.c
>>>> +++ b/drivers/net/wireless/ath/ath9k/xmit.c
>>>> @@ -912,8 +923,16 @@ ath_tx_get_tid_subframe(struct ath_softc *sc, struct ath_txq *txq,
>>>>  		seqno = bf->bf_state.seqno;
>>>>  
>>>>  		/* do not step over block-ack window */
>>>> -		if (!BAW_WITHIN(tid->seq_start, tid->baw_size, seqno))
>>>> +		if (!BAW_WITHIN(tid->seq_start, tid->baw_size, seqno)) {
>>>> +			__skb_queue_tail(&tid->retry_q, skb);
>>>> +
>>>> +			/* If there are other skbs in the retry q, they are
>>>> +			 * probably within the BAW, so loop immediately to get
>>>> +			 * one of them. Otherwise the queue can get stuck. */
>>>> +			if (!skb_queue_is_first(&tid->retry_q, skb))
>>>> +				continue;
>>> Not sure if this can happen, but if we ever somehow end up with two skbs
>>> in the retry queue that do not fit into the Block-Ack window, there's
>>> potential for an infinite loop here.
>> 
>> Yes, I realise that (v1 contained a comment on that). However, I don't
>> actually think it can happen: The code will only ever put one skb from
>> the intermediate queues on the retry queue (ath_tid_pull() is only
>> called if the retry queue is empty). Everything else on there are actual
>> retries that have been put on there by ath_tx_complete_aggr(). Figure
>> the latter will always be within the BAW?
> I think it would be a good idea to have a check there (with WARN_ON), in
> case there's some weird corner case with seqno handling, software retry
> and aggregation state changes.

Right, can do :)

-Toke

WARNING: multiple messages have this Message-ID (diff)
From: "Toke Høiland-Jørgensen" <toke@toke.dk>
To: Felix Fietkau <nbd@nbd.name>
Cc: linux-wireless@vger.kernel.org,
	make-wifi-fast@lists.bufferbloat.net,
	ath9k-devel@lists.ath9k.org, Tim Shepard <shep@alum.mit.edu>
Subject: Re: [PATCH v2] ath9k: Switch to using mac80211 intermediate software queues.
Date: Wed, 06 Jul 2016 21:08:30 +0200	[thread overview]
Message-ID: <87mvlumvo1.fsf@toke.dk> (raw)
In-Reply-To: <97e6ac26-6ec0-24ee-2834-33f0c86532f3@nbd.name> (Felix Fietkau's message of "Wed, 6 Jul 2016 20:59:55 +0200")

Felix Fietkau <nbd@nbd.name> writes:

> On 2016-07-06 20:52, Toke Høiland-Jørgensen wrote:
>> Felix Fietkau <nbd@nbd.name> writes:
>> 
>>> On 2016-07-06 18:16, Toke Høiland-Jørgensen wrote:
>>>> This switches ath9k over to using the mac80211 intermediate software
>>>> queueing mechanism for data packets. It removes the queueing inside the
>>>> driver, except for the retry queue, and instead pulls from mac80211 when
>>>> a packet is needed. The retry queue is used to store a packet that was
>>>> pulled but can't be sent immediately.
>>>> 
>>>> The old code path in ath_tx_start that would queue packets has been
>>>> removed completely, as has the qlen limit tunables (since there's no
>>>> longer a queue in the driver to limit).
>>>> 
>>>> Based on Tim's original patch set, but reworked quite thoroughly.
>>>> 
>>>> Cc: Tim Shepard <shep@alum.mit.edu>
>>>> Cc: Felix Fietkau <nbd@nbd.name>
>>>> Signed-off-by: Toke Høiland-Jørgensen <toke@toke.dk>
>>>> ---
>>>> Changes since v1:
>>>>   - Remove the old intermediate queueing logic completely instead of
>>>>     just disabling it.
>>>>   - Remove the qlen debug tunables.
>>>>   - Remove the force_channel parameter from struct txctl (since we just
>>>>     removed the code path that was using it).
>>>> 
>>>>  drivers/net/wireless/ath/ath9k/ath9k.h     |  12 +-
>>>>  drivers/net/wireless/ath/ath9k/channel.c   |   2 -
>>>>  drivers/net/wireless/ath/ath9k/debug.c     |  14 +-
>>>>  drivers/net/wireless/ath/ath9k/debug.h     |   2 -
>>>>  drivers/net/wireless/ath/ath9k/debug_sta.c |   4 +-
>>>>  drivers/net/wireless/ath/ath9k/init.c      |   2 +-
>>>>  drivers/net/wireless/ath/ath9k/main.c      |   1 +
>>>>  drivers/net/wireless/ath/ath9k/xmit.c      | 307 +++++++++++------------------
>>>>  8 files changed, 130 insertions(+), 214 deletions(-)
>>> Nice work!
>> 
>> Thanks :)
>> 
>>>> diff --git a/drivers/net/wireless/ath/ath9k/xmit.c b/drivers/net/wireless/ath/ath9k/xmit.c
>>>> index fe795fc..4077eeb 100644
>>>> --- a/drivers/net/wireless/ath/ath9k/xmit.c
>>>> +++ b/drivers/net/wireless/ath/ath9k/xmit.c
>>>> @@ -912,8 +923,16 @@ ath_tx_get_tid_subframe(struct ath_softc *sc, struct ath_txq *txq,
>>>>  		seqno = bf->bf_state.seqno;
>>>>  
>>>>  		/* do not step over block-ack window */
>>>> -		if (!BAW_WITHIN(tid->seq_start, tid->baw_size, seqno))
>>>> +		if (!BAW_WITHIN(tid->seq_start, tid->baw_size, seqno)) {
>>>> +			__skb_queue_tail(&tid->retry_q, skb);
>>>> +
>>>> +			/* If there are other skbs in the retry q, they are
>>>> +			 * probably within the BAW, so loop immediately to get
>>>> +			 * one of them. Otherwise the queue can get stuck. */
>>>> +			if (!skb_queue_is_first(&tid->retry_q, skb))
>>>> +				continue;
>>> Not sure if this can happen, but if we ever somehow end up with two skbs
>>> in the retry queue that do not fit into the Block-Ack window, there's
>>> potential for an infinite loop here.
>> 
>> Yes, I realise that (v1 contained a comment on that). However, I don't
>> actually think it can happen: The code will only ever put one skb from
>> the intermediate queues on the retry queue (ath_tid_pull() is only
>> called if the retry queue is empty). Everything else on there are actual
>> retries that have been put on there by ath_tx_complete_aggr(). Figure
>> the latter will always be within the BAW?
> I think it would be a good idea to have a check there (with WARN_ON), in
> case there's some weird corner case with seqno handling, software retry
> and aggregation state changes.

Right, can do :)

-Toke

  reply	other threads:[~2016-07-06 19:08 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     ` 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         ` 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         ` Felix Fietkau
2016-06-17 16:33         ` [ath9k-devel] " Felix Fietkau
2016-06-17 16:33           ` Felix Fietkau
2016-06-17 14:10     ` [ath9k-devel] " 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
2016-07-04 17:47         ` [ath9k-devel] " Toke Høiland-Jørgensen
2016-07-06 13:23         ` Felix Fietkau
2016-07-06 13:23           ` 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         ` 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             ` Felix Fietkau
2016-07-06 19:08             ` Toke Høiland-Jørgensen [this message]
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         ` [ath9k-devel] [v3] " Kalle Valo
2016-07-08 14:26           ` 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               ` 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                   ` 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             ` 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                 ` 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                     ` 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                         ` 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                             ` 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=87mvlumvo1.fsf@toke.dk \
    --to=toke@toke.dk \
    --cc=ath9k-devel@lists.ath9k.org \
    /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.