From: Joe Damato <jdamato@fastly.com>
To: Pavan Chebbi <pavan.chebbi@broadcom.com>
Cc: netdev@vger.kernel.org, Michael Chan <mchan@broadcom.com>,
"David S. Miller" <davem@davemloft.net>,
Eric Dumazet <edumazet@google.com>,
Jakub Kicinski <kuba@kernel.org>, Paolo Abeni <pabeni@redhat.com>,
open list <linux-kernel@vger.kernel.org>
Subject: Re: [RFC net-next v2 2/2] tg3: Link queues to NAPIs
Date: Thu, 3 Oct 2024 12:47:28 -0700 [thread overview]
Message-ID: <Zv700Aoyx_XG6QVd@LQ3V64L9R2> (raw)
In-Reply-To: <CALs4sv0-FeMas=rSy8OHy_HLiQxQ+gZwAfZVAdzwhFbG+tTzCg@mail.gmail.com>
On Thu, Oct 03, 2024 at 09:56:40AM +0530, Pavan Chebbi wrote:
> On Thu, Oct 3, 2024 at 4:51 AM Joe Damato <jdamato@fastly.com> wrote:
> >
>
> > This is happening because the code in the driver does this:
> >
> > for (i = 0; i < tp->irq_cnt; i++) {
> > tnapi = &tp->napi[i];
> > napi_enable(&tnapi->napi);
> > if (tnapi->tx_buffers)
> > netif_queue_set_napi(tp->dev, i, NETDEV_QUEUE_TYPE_TX,
> > &tnapi->napi);
> >
> > The code I added assumed that i is the txq or rxq index, but it's
> > not - it's the index into the array of struct tg3_napi.
>
> Yes, you are right..
> >
> > Corrected, the code looks like something like this:
> >
> > int txq_idx = 0, rxq_idx = 0;
> > [...]
> >
> > for (i = 0; i < tp->irq_cnt; i++) {
> > tnapi = &tp->napi[i];
> > napi_enable(&tnapi->napi);
> > if (tnapi->tx_buffers) {
> > netif_queue_set_napi(tp->dev, txq_idx, NETDEV_QUEUE_TYPE_TX,
> > &tnapi->napi);
> > txq_idx++
> > } else if (tnapi->rx_rcb) {
> > netif_queue_set_napi(tp->dev, rxq_idx, NETDEV_QUEUE_TYPE_RX,
> > &tnapi->napi);
> > rxq_idx++;
> > [...]
> >
> > I tested that and the output looks correct to me. However, what to
> > do about tg3_napi_disable ?
> >
> > Probably something like this (txq only for brevity):
> >
> > int txq_idx = tp->txq_cnt - 1;
> > [...]
> >
> > for (i = tp->irq_cnt - 1; i >= 0; i--) {
> > [...]
> > if (tnapi->tx_buffers) {
> > netif_queue_set_napi(tp->dev, txq_idx, NETDEV_QUEUE_TYPE_TX,
> > NULL);
> > txq_idx--;
> > }
> > [...]
> >
> > Does that seem correct to you? I wanted to ask before sending
> > another revision, since I am not a tg3 expert.
> >
>
> The local counter variable for the ring ids might work because irqs
> are requested sequentially.
Yea, my proposal relies on the sequential ordering.
> Thinking out loud, a better way would be to save the tx/rx id inside
> their struct tg3_napi in the tg3_request_irq() function.
I think that could work, yes. I wasn't sure if you'd be open to such
a change.
It seems like in that case, though, we'd need to add some state
somewhere.
It's not super clear to me where the appropriate place for the state
would be because tg3_request_irq is called in a couple places (like
tg3_test_interrupt).
Another option would be to modify tg3_enable_msix and modify:
for (i = 0; i < tp->irq_max; i++)
tp->napi[i].irq_vec = msix_ent[i].vector;
But, all of that is still a bit invasive compared to the running
rxq_idx txq_idx counters I proposed in my previous message.
I am open to doing whatever you suggest/prefer, though, since it is
your driver after all :)
> And have a separate new function (I know you did something similar for
> v1 of irq-napi linking) to link queues and napi.
> I think it should work, and should help during de-linking also. Let me
> know what you think.
I think it's possible, it's just disruptive and it's not clear if
it's worth it? Some other code path might break and it might be fine
to just rely on the sequential indexing? Not sure.
Let me know what you think; thanks for taking the time to review and
respond.
next prev parent reply other threads:[~2024-10-03 19:47 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-09-25 16:20 [RFC net-next v2 0/2] tg3: Link IRQs, NAPIs, and queues Joe Damato
2024-09-25 16:20 ` [RFC net-next v2 1/2] tg3: Link IRQs to NAPI instances Joe Damato
2024-09-27 3:58 ` Pavan Chebbi
2024-09-25 16:20 ` [RFC net-next v2 2/2] tg3: Link queues to NAPIs Joe Damato
2024-09-26 23:17 ` Joe Damato
2024-09-27 4:03 ` Pavan Chebbi
2024-09-27 16:14 ` Joe Damato
2024-10-02 23:21 ` Joe Damato
2024-10-03 4:26 ` Pavan Chebbi
2024-10-03 19:47 ` Joe Damato [this message]
2024-10-04 15:33 ` Pavan Chebbi
2024-10-04 16:39 ` Joe Damato
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=Zv700Aoyx_XG6QVd@LQ3V64L9R2 \
--to=jdamato@fastly.com \
--cc=davem@davemloft.net \
--cc=edumazet@google.com \
--cc=kuba@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mchan@broadcom.com \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
--cc=pavan.chebbi@broadcom.com \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox