From: Jakub Kicinski <kuba@kernel.org>
To: Stanislav Fomichev <sdf@fomichev.me>
Cc: Joe Damato <jdamato@fastly.com>,
netdev@vger.kernel.org, edumazet@google.com,
amritha.nambiar@intel.com, sridhar.samudrala@intel.com,
bjorn@rivosinc.com, hch@infradead.org, willy@infradead.org,
willemdebruijn.kernel@gmail.com, skhawaja@google.com,
Martin Karsten <mkarsten@uwaterloo.ca>,
Donald Hunter <donald.hunter@gmail.com>,
"David S. Miller" <davem@davemloft.net>,
Paolo Abeni <pabeni@redhat.com>,
Jesper Dangaard Brouer <hawk@kernel.org>,
Xuan Zhuo <xuanzhuo@linux.alibaba.com>,
Daniel Jurgens <danielj@nvidia.com>,
open list <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH net-next 5/5] netdev-genl: Support setting per-NAPI config values
Date: Wed, 4 Sep 2024 16:54:17 -0700 [thread overview]
Message-ID: <20240904165417.015c647f@kernel.org> (raw)
In-Reply-To: <Ztjv-dgNFwFBnXwd@mini-arch>
On Wed, 4 Sep 2024 16:40:41 -0700 Stanislav Fomichev wrote:
> > I think what you are proposing seems fine; I'm just working out the
> > implementation details and making sure I understand before sending
> > another revision.
>
> What if instead of an extra storage index in UAPI, we make napi_id persistent?
> Then we can keep using napi_id as a user-facing number for the configuration.
>
> Having a stable napi_id would also be super useful for the epoll setup so you
> don't have to match old/invalid ids to the new ones on device reset.
that'd be nice, initially I thought that we have some drivers that have
multiple instances of NAPI enabled for a single "index", but I don't
see such drivers now.
> In the code, we can keep the same idea with napi_storage in netdev and
> ask drivers to provide storage id, but keep that id internal.
>
> The only complication with that is napi_hash_add/napi_hash_del that
> happen in netif_napi_add_weight. So for the devices that allocate
> new napi before removing the old ones (most devices?), we'd have to add
> some new netif_napi_takeover(old_napi, new_napi) to remove the
> old napi_id from the hash and reuse it in the new one.
>
> So for mlx5, the flow would look like the following:
>
> - mlx5e_safe_switch_params
> - mlx5e_open_channels
> - netif_napi_add(new_napi)
> - adds napi with 'ephemeral' napi id
> - mlx5e_switch_priv_channels
> - mlx5e_deactivate_priv_channels
> - napi_disable(old_napi)
> - netif_napi_del(old_napi) - this frees the old napi_id
> - mlx5e_activate_priv_channels
> - mlx5e_activate_channels
> - mlx5e_activate_channel
> - netif_napi_takeover(old_napi is gone, so probably take id from napi_storage?)
> - if napi is not hashed - safe to reuse?
> - napi_enable
>
> This is a bit ugly because we still have random napi ids during reset, but
> is not super complicated implementation-wise. We can eventually improve
> the above by splitting netif_napi_add_weight into two steps: allocate and
> activate (to do the napi_id allocation & hashing). Thoughts?
The "takeover" would be problematic for drivers which free old NAPI
before allocating new one (bnxt?). But splitting the two steps sounds
pretty clean. We can add a helper to mark NAPI as "driver will
explicitly list/hash later", and have the driver call a new helper
which takes storage ID and lists the NAPI in the hash.
next prev parent reply other threads:[~2024-09-04 23:54 UTC|newest]
Thread overview: 48+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-08-29 13:11 [PATCH net-next 0/5] Add support for per-NAPI config via netlink Joe Damato
2024-08-29 13:11 ` [PATCH net-next 1/5] net: napi: Make napi_defer_hard_irqs per-NAPI Joe Damato
2024-08-29 13:46 ` Eric Dumazet
2024-08-29 22:05 ` Jakub Kicinski
2024-08-30 9:14 ` Joe Damato
2024-08-30 20:21 ` Jakub Kicinski
2024-08-30 20:23 ` Joe Damato
2024-08-30 8:36 ` Simon Horman
2024-08-30 9:11 ` Joe Damato
2024-08-30 16:50 ` kernel test robot
2024-08-29 13:11 ` [PATCH net-next 2/5] netdev-genl: Dump napi_defer_hard_irqs Joe Damato
2024-08-29 22:08 ` Jakub Kicinski
2024-08-30 9:10 ` Joe Damato
2024-08-30 20:28 ` Jakub Kicinski
2024-08-30 20:31 ` Joe Damato
2024-08-30 21:22 ` Jakub Kicinski
2024-08-29 13:11 ` [PATCH net-next 3/5] net: napi: Make gro_flush_timeout per-NAPI Joe Damato
2024-08-29 13:48 ` Eric Dumazet
2024-08-29 13:57 ` Joe Damato
2024-08-29 15:28 ` Joe Damato
2024-08-29 15:31 ` Eric Dumazet
2024-08-29 15:39 ` Joe Damato
2024-08-30 16:18 ` kernel test robot
2024-08-30 16:18 ` kernel test robot
2024-08-29 13:12 ` [PATCH net-next 4/5] netdev-genl: Dump gro_flush_timeout Joe Damato
2024-08-29 22:09 ` Jakub Kicinski
2024-08-30 9:17 ` Joe Damato
2024-08-29 13:12 ` [PATCH net-next 5/5] netdev-genl: Support setting per-NAPI config values Joe Damato
2024-08-29 22:31 ` Jakub Kicinski
2024-08-30 10:43 ` Joe Damato
2024-08-30 21:22 ` Jakub Kicinski
2024-08-31 17:27 ` Joe Damato
2024-09-03 0:49 ` Jakub Kicinski
2024-09-02 16:56 ` Joe Damato
2024-09-03 1:02 ` Jakub Kicinski
2024-09-03 19:04 ` Samiullah Khawaja
2024-09-03 19:40 ` Jakub Kicinski
2024-09-03 21:58 ` Samiullah Khawaja
2024-09-05 9:20 ` Joe Damato
2024-09-08 15:54 ` Joe Damato
2024-09-04 23:40 ` Stanislav Fomichev
2024-09-04 23:54 ` Jakub Kicinski [this message]
2024-09-05 9:32 ` Joe Damato
2024-09-08 15:57 ` Joe Damato
2024-09-09 23:03 ` Jakub Kicinski
2024-09-05 9:30 ` Joe Damato
2024-09-05 16:56 ` Stanislav Fomichev
2024-09-05 17:05 ` 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=20240904165417.015c647f@kernel.org \
--to=kuba@kernel.org \
--cc=amritha.nambiar@intel.com \
--cc=bjorn@rivosinc.com \
--cc=danielj@nvidia.com \
--cc=davem@davemloft.net \
--cc=donald.hunter@gmail.com \
--cc=edumazet@google.com \
--cc=hawk@kernel.org \
--cc=hch@infradead.org \
--cc=jdamato@fastly.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mkarsten@uwaterloo.ca \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
--cc=sdf@fomichev.me \
--cc=skhawaja@google.com \
--cc=sridhar.samudrala@intel.com \
--cc=willemdebruijn.kernel@gmail.com \
--cc=willy@infradead.org \
--cc=xuanzhuo@linux.alibaba.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 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.