From: Joe Damato <jdamato@fastly.com>
To: Samiullah Khawaja <skhawaja@google.com>
Cc: Jakub Kicinski <kuba@kernel.org>,
"David S . Miller " <davem@davemloft.net>,
Eric Dumazet <edumazet@google.com>,
Paolo Abeni <pabeni@redhat.com>,
almasrymina@google.com, netdev@vger.kernel.org
Subject: Re: [PATCH net-next v3 1/4] Add support to set napi threaded for individual napi
Date: Tue, 4 Feb 2025 18:50:32 -0800 [thread overview]
Message-ID: <Z6LR-POHxmBV6D7t@LQ3V64L9R2> (raw)
In-Reply-To: <20250205001052.2590140-2-skhawaja@google.com>
On Wed, Feb 05, 2025 at 12:10:49AM +0000, Samiullah Khawaja wrote:
> A net device has a threaded sysctl that can be used to enable threaded
> napi polling on all of the NAPI contexts under that device. Allow
> enabling threaded napi polling at individual napi level using netlink.
>
> Extend the netlink operation `napi-set` and allow setting the threaded
> attribute of a NAPI. This will enable the threaded polling on a napi
> context.
>
> Tested using following command in qemu/virtio-net:
> ./tools/net/ynl/cli.py --spec Documentation/netlink/specs/netdev.yaml \
> --do napi-set --json '{"id": 66, "threaded": 1}'
At a high level, I think this patch could probably be sent on its
own; IMHO it makes sense to make threaded NAPI per-NAPI via
netdev-genl.
I think its fine if you want to include it in your overall series,
but I think a change like this could probably go in on its own.
[...]
> diff --git a/net/core/dev.c b/net/core/dev.c
> index c0021cbd28fc..50fb234dd7a0 100644
> --- a/net/core/dev.c
> +++ b/net/core/dev.c
> @@ -6787,6 +6787,30 @@ static void init_gro_hash(struct napi_struct *napi)
> napi->gro_bitmask = 0;
> }
>
> +int napi_set_threaded(struct napi_struct *napi, bool threaded)
> +{
> + if (napi->dev->threaded)
> + return -EINVAL;
I feel this is probably a WARN_ON_ONCE situation? Not sure, but in
any case, see below.
> +
> + if (threaded) {
> + if (!napi->thread) {
> + int err = napi_kthread_create(napi);
> +
> + if (err)
> + return err;
> + }
> + }
> +
> + if (napi->config)
> + napi->config->threaded = threaded;
> +
> + /* Make sure kthread is created before THREADED bit is set. */
> + smp_mb__before_atomic();
> + assign_bit(NAPI_STATE_THREADED, &napi->state, threaded);
> +
> + return 0;
> +}
> +
> int dev_set_threaded(struct net_device *dev, bool threaded)
> {
> struct napi_struct *napi;
> @@ -6798,6 +6822,11 @@ int dev_set_threaded(struct net_device *dev, bool threaded)
> return 0;
>
> if (threaded) {
> + /* Check if threaded is set at napi level already */
> + list_for_each_entry(napi, &dev->napi_list, dev_list)
> + if (test_bit(NAPI_STATE_THREADED, &napi->state))
> + return -EINVAL;
> +
> list_for_each_entry(napi, &dev->napi_list, dev_list) {
> if (!napi->thread) {
> err = napi_kthread_create(napi);
> @@ -6880,6 +6909,8 @@ static void napi_restore_config(struct napi_struct *n)
> napi_hash_add(n);
> n->config->napi_id = n->napi_id;
> }
> +
> + napi_set_threaded(n, n->config->threaded);
The return value isn't checked so even if napi_set_threaded returned
EINVAL it seems like there's no way for that error to "bubble" back
up?
next prev parent reply other threads:[~2025-02-05 2:50 UTC|newest]
Thread overview: 37+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-02-05 0:10 [PATCH net-next v3 0/4] Add support to do threaded napi busy poll Samiullah Khawaja
2025-02-05 0:10 ` [PATCH net-next v3 1/4] Add support to set napi threaded for individual napi Samiullah Khawaja
2025-02-05 2:50 ` Joe Damato [this message]
2025-02-05 23:10 ` David Laight
2025-02-06 18:40 ` Joe Damato
2025-02-05 0:10 ` [PATCH net-next v3 2/4] net: Create separate gro_flush helper function Samiullah Khawaja
2025-02-05 2:55 ` Joe Damato
2025-02-05 0:10 ` [PATCH net-next v3 3/4] Extend napi threaded polling to allow kthread based busy polling Samiullah Khawaja
2025-02-05 9:08 ` Paul Barker
2025-02-06 3:40 ` Samudrala, Sridhar
2025-02-05 0:10 ` [PATCH net-next v3 4/4] selftests: Add napi threaded busy poll test in `busy_poller` Samiullah Khawaja
2025-02-05 0:14 ` [PATCH net-next v3 0/4] Add support to do threaded napi busy poll Samiullah Khawaja
2025-02-05 1:32 ` Martin Karsten
2025-02-05 20:35 ` Samiullah Khawaja
2025-02-05 22:06 ` Joe Damato
2025-02-06 0:45 ` Samiullah Khawaja
2025-02-06 13:42 ` Joe Damato
2025-02-06 22:49 ` Samiullah Khawaja
2025-02-06 22:58 ` Joe Damato
2025-02-06 1:15 ` Martin Karsten
2025-02-06 4:43 ` Samiullah Khawaja
2025-02-06 4:50 ` Martin Karsten
2025-02-06 6:43 ` Samiullah Khawaja
2025-02-06 14:00 ` Joe Damato
2025-02-06 13:54 ` Joe Damato
2025-02-05 3:18 ` Joe Damato
2025-02-06 21:19 ` Joe Damato
2025-02-06 22:06 ` Samiullah Khawaja
2025-02-06 22:48 ` Joe Damato
2025-02-07 3:13 ` Samiullah Khawaja
2025-02-07 3:50 ` Joe Damato
2025-02-11 2:52 ` Martin Karsten
2025-02-06 5:36 ` Dave Taht
2025-02-06 5:49 ` Samiullah Khawaja
2025-02-06 5:57 ` Dave Taht
2025-02-06 14:01 ` Joe Damato
2025-02-06 19:50 ` David Laight
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=Z6LR-POHxmBV6D7t@LQ3V64L9R2 \
--to=jdamato@fastly.com \
--cc=almasrymina@google.com \
--cc=davem@davemloft.net \
--cc=edumazet@google.com \
--cc=kuba@kernel.org \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
--cc=skhawaja@google.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