From: Stanislav Fomichev <stfomichev@gmail.com>
To: Michael Chan <michael.chan@broadcom.com>
Cc: Stanislav Fomichev <sdf@fomichev.me>,
netdev@vger.kernel.org, davem@davemloft.net, edumazet@google.com,
kuba@kernel.org, pabeni@redhat.com, horms@kernel.org,
corbet@lwn.net, skhan@linuxfoundation.org, andrew+netdev@lunn.ch,
pavan.chebbi@broadcom.com, anthony.l.nguyen@intel.com,
przemyslaw.kitszel@intel.com, saeedm@nvidia.com,
tariqt@nvidia.com, mbloch@nvidia.com, alexanderduyck@fb.com,
kernel-team@meta.com, johannes@sipsolutions.net,
sd@queasysnail.net, jianbol@nvidia.com, dtatulea@nvidia.com,
mohsin.bashr@gmail.com, jacob.e.keller@intel.com,
willemb@google.com, skhawaja@google.com, bestswngs@gmail.com,
aleksandr.loktionov@intel.com, kees@kernel.org,
linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org,
intel-wired-lan@lists.osuosl.org, linux-rdma@vger.kernel.org,
linux-wireless@vger.kernel.org, linux-kselftest@vger.kernel.org,
leon@kernel.org
Subject: Re: [Intel-wired-lan] [PATCH net-next v3 08/13] bnxt: use snapshot in bnxt_cfg_rx_mode
Date: Tue, 24 Mar 2026 11:29:01 -0700 [thread overview]
Message-ID: <acLX7XCmoc-tFCbD@mini-arch> (raw)
In-Reply-To: <CACKFLi=j7DO_d46jwZnmZ=OfmkoFA3AXUoX4nmF0tQuYt5Y3UQ@mail.gmail.com>
On 03/23, Michael Chan wrote:
> On Thu, Mar 19, 2026 at 6:25 PM Stanislav Fomichev <sdf@fomichev.me> wrote:
> >
> > With the introduction of ndo_set_rx_mode_async (as discussed in [0])
> > we can call bnxt_cfg_rx_mode directly. Convert bnxt_cfg_rx_mode to
> > use uc/mc snapshots and move its call in bnxt_sp_task to the
> > section that resets BNXT_STATE_IN_SP_TASK. Switch to direct call in
> > bnxt_set_rx_mode.
> >
> > 0: https://lore.kernel.org/netdev/CACKFLi=5vj8hPqEUKDd8RTw3au5G+zRgQEqjF+6NZnyoNm90KA@mail.gmail.com/
> >
> > Cc: Michael Chan <michael.chan@broadcom.com>
> > Cc: Pavan Chebbi <pavan.chebbi@broadcom.com>
> > Signed-off-by: Stanislav Fomichev <sdf@fomichev.me>
> > ---
> > drivers/net/ethernet/broadcom/bnxt/bnxt.c | 26 ++++++++++++++---------
> > 1 file changed, 16 insertions(+), 10 deletions(-)
> >
> > diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
> > index 225217b32e4b..12265bd7fda4 100644
> > --- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c
> > +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
> > @@ -11039,7 +11039,8 @@ static int bnxt_setup_nitroa0_vnic(struct bnxt *bp)
> > return rc;
> > }
> >
> > -static int bnxt_cfg_rx_mode(struct bnxt *);
> > +static int bnxt_cfg_rx_mode(struct bnxt *, struct netdev_hw_addr_list *,
> > + struct netdev_hw_addr_list *);
> > static bool bnxt_mc_list_updated(struct bnxt *, u32 *,
> > const struct netdev_hw_addr_list *);
> >
> > @@ -11135,7 +11136,7 @@ static int bnxt_init_chip(struct bnxt *bp, bool irq_re_init)
> > vnic->rx_mask |= mask;
> > }
> >
> > - rc = bnxt_cfg_rx_mode(bp);
> > + rc = bnxt_cfg_rx_mode(bp, &bp->dev->uc, &bp->dev->mc);
> > if (rc)
> > goto err_out;
> >
> > @@ -13610,11 +13611,12 @@ static void bnxt_set_rx_mode(struct net_device *dev,
> > if (mask != vnic->rx_mask || uc_update || mc_update) {
> > vnic->rx_mask = mask;
> >
> > - bnxt_queue_sp_work(bp, BNXT_RX_MASK_SP_EVENT);
> > + bnxt_cfg_rx_mode(bp, uc, mc);
> > }
> > }
> >
> > -static int bnxt_cfg_rx_mode(struct bnxt *bp)
> > +static int bnxt_cfg_rx_mode(struct bnxt *bp, struct netdev_hw_addr_list *uc,
> > + struct netdev_hw_addr_list *mc)
> > {
> > struct net_device *dev = bp->dev;
> > struct bnxt_vnic_info *vnic = &bp->vnic_info[BNXT_VNIC_DEFAULT];
> > @@ -13623,7 +13625,7 @@ static int bnxt_cfg_rx_mode(struct bnxt *bp)
> > bool uc_update;
> >
> > netif_addr_lock_bh(dev);
> > - uc_update = bnxt_uc_list_updated(bp, &dev->uc);
> > + uc_update = bnxt_uc_list_updated(bp, uc);
>
> Will the uc list snapshot change between bnxt_set_rx_mode() and
> bnxt_cfg_rx_mode() with the direct call now? In the original deferred
> update implementation, the uc list can change and that's why we check
> in both functions.
The snapshot is gonna be the same for bnxt_set_rx_mode->bnxt_cfg_rx_mode path.
So you're saying that it's ok to remove the one in bnxt_cfg_rx_mode
because it's called either from bnxt_set_rx_mode (with a new list) or,
explicitly, via the BNXT_RX_MASK_SP_EVENT retry mechanism (where we know
that we need to redo the updates anyway)?
This makes me wonder whether I need to push the retrying mechanism to
the core stack... Right now, if some of the allocations in wq handler
fail, we just give up, maybe I should handle it better. And I can plug
the signal from the driver (make ndo_set_rx_mode_async return int)
in the same retry mechanism.
WARNING: multiple messages have this Message-ID (diff)
From: Stanislav Fomichev <stfomichev@gmail.com>
To: Michael Chan <michael.chan@broadcom.com>
Cc: Stanislav Fomichev <sdf@fomichev.me>,
netdev@vger.kernel.org, davem@davemloft.net, edumazet@google.com,
kuba@kernel.org, pabeni@redhat.com, horms@kernel.org,
corbet@lwn.net, skhan@linuxfoundation.org, andrew+netdev@lunn.ch,
pavan.chebbi@broadcom.com, anthony.l.nguyen@intel.com,
przemyslaw.kitszel@intel.com, saeedm@nvidia.com,
tariqt@nvidia.com, mbloch@nvidia.com, alexanderduyck@fb.com,
kernel-team@meta.com, johannes@sipsolutions.net,
sd@queasysnail.net, jianbol@nvidia.com, dtatulea@nvidia.com,
mohsin.bashr@gmail.com, jacob.e.keller@intel.com,
willemb@google.com, skhawaja@google.com, bestswngs@gmail.com,
aleksandr.loktionov@intel.com, kees@kernel.org,
linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org,
intel-wired-lan@lists.osuosl.org, linux-rdma@vger.kernel.org,
linux-wireless@vger.kernel.org, linux-kselftest@vger.kernel.org,
leon@kernel.org
Subject: Re: [PATCH net-next v3 08/13] bnxt: use snapshot in bnxt_cfg_rx_mode
Date: Tue, 24 Mar 2026 11:29:01 -0700 [thread overview]
Message-ID: <acLX7XCmoc-tFCbD@mini-arch> (raw)
In-Reply-To: <CACKFLi=j7DO_d46jwZnmZ=OfmkoFA3AXUoX4nmF0tQuYt5Y3UQ@mail.gmail.com>
On 03/23, Michael Chan wrote:
> On Thu, Mar 19, 2026 at 6:25 PM Stanislav Fomichev <sdf@fomichev.me> wrote:
> >
> > With the introduction of ndo_set_rx_mode_async (as discussed in [0])
> > we can call bnxt_cfg_rx_mode directly. Convert bnxt_cfg_rx_mode to
> > use uc/mc snapshots and move its call in bnxt_sp_task to the
> > section that resets BNXT_STATE_IN_SP_TASK. Switch to direct call in
> > bnxt_set_rx_mode.
> >
> > 0: https://lore.kernel.org/netdev/CACKFLi=5vj8hPqEUKDd8RTw3au5G+zRgQEqjF+6NZnyoNm90KA@mail.gmail.com/
> >
> > Cc: Michael Chan <michael.chan@broadcom.com>
> > Cc: Pavan Chebbi <pavan.chebbi@broadcom.com>
> > Signed-off-by: Stanislav Fomichev <sdf@fomichev.me>
> > ---
> > drivers/net/ethernet/broadcom/bnxt/bnxt.c | 26 ++++++++++++++---------
> > 1 file changed, 16 insertions(+), 10 deletions(-)
> >
> > diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
> > index 225217b32e4b..12265bd7fda4 100644
> > --- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c
> > +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
> > @@ -11039,7 +11039,8 @@ static int bnxt_setup_nitroa0_vnic(struct bnxt *bp)
> > return rc;
> > }
> >
> > -static int bnxt_cfg_rx_mode(struct bnxt *);
> > +static int bnxt_cfg_rx_mode(struct bnxt *, struct netdev_hw_addr_list *,
> > + struct netdev_hw_addr_list *);
> > static bool bnxt_mc_list_updated(struct bnxt *, u32 *,
> > const struct netdev_hw_addr_list *);
> >
> > @@ -11135,7 +11136,7 @@ static int bnxt_init_chip(struct bnxt *bp, bool irq_re_init)
> > vnic->rx_mask |= mask;
> > }
> >
> > - rc = bnxt_cfg_rx_mode(bp);
> > + rc = bnxt_cfg_rx_mode(bp, &bp->dev->uc, &bp->dev->mc);
> > if (rc)
> > goto err_out;
> >
> > @@ -13610,11 +13611,12 @@ static void bnxt_set_rx_mode(struct net_device *dev,
> > if (mask != vnic->rx_mask || uc_update || mc_update) {
> > vnic->rx_mask = mask;
> >
> > - bnxt_queue_sp_work(bp, BNXT_RX_MASK_SP_EVENT);
> > + bnxt_cfg_rx_mode(bp, uc, mc);
> > }
> > }
> >
> > -static int bnxt_cfg_rx_mode(struct bnxt *bp)
> > +static int bnxt_cfg_rx_mode(struct bnxt *bp, struct netdev_hw_addr_list *uc,
> > + struct netdev_hw_addr_list *mc)
> > {
> > struct net_device *dev = bp->dev;
> > struct bnxt_vnic_info *vnic = &bp->vnic_info[BNXT_VNIC_DEFAULT];
> > @@ -13623,7 +13625,7 @@ static int bnxt_cfg_rx_mode(struct bnxt *bp)
> > bool uc_update;
> >
> > netif_addr_lock_bh(dev);
> > - uc_update = bnxt_uc_list_updated(bp, &dev->uc);
> > + uc_update = bnxt_uc_list_updated(bp, uc);
>
> Will the uc list snapshot change between bnxt_set_rx_mode() and
> bnxt_cfg_rx_mode() with the direct call now? In the original deferred
> update implementation, the uc list can change and that's why we check
> in both functions.
The snapshot is gonna be the same for bnxt_set_rx_mode->bnxt_cfg_rx_mode path.
So you're saying that it's ok to remove the one in bnxt_cfg_rx_mode
because it's called either from bnxt_set_rx_mode (with a new list) or,
explicitly, via the BNXT_RX_MASK_SP_EVENT retry mechanism (where we know
that we need to redo the updates anyway)?
This makes me wonder whether I need to push the retrying mechanism to
the core stack... Right now, if some of the allocations in wq handler
fail, we just give up, maybe I should handle it better. And I can plug
the signal from the driver (make ndo_set_rx_mode_async return int)
in the same retry mechanism.
next prev parent reply other threads:[~2026-03-24 18:29 UTC|newest]
Thread overview: 71+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-03-20 1:24 [Intel-wired-lan] [PATCH net-next v3 00/13] net: sleepable ndo_set_rx_mode Stanislav Fomichev
2026-03-20 1:24 ` Stanislav Fomichev
2026-03-20 1:24 ` [Intel-wired-lan] [PATCH net-next v3 01/13] net: add address list snapshot and reconciliation infrastructure Stanislav Fomichev
2026-03-20 1:24 ` Stanislav Fomichev
2026-03-23 23:20 ` [Intel-wired-lan] " Jakub Kicinski
2026-03-23 23:20 ` Jakub Kicinski
2026-03-24 18:13 ` [Intel-wired-lan] " Stanislav Fomichev
2026-03-24 18:13 ` Stanislav Fomichev
2026-03-20 1:24 ` [Intel-wired-lan] [PATCH net-next v3 02/13] wifi: cfg80211: use __rtnl_unlock in nl80211_pre_doit Stanislav Fomichev
2026-03-20 1:24 ` Stanislav Fomichev
2026-03-20 1:24 ` [Intel-wired-lan] [PATCH net-next v3 03/13] net: introduce ndo_set_rx_mode_async and dev_rx_mode_work Stanislav Fomichev
2026-03-20 1:24 ` Stanislav Fomichev
2026-03-20 7:13 ` [Intel-wired-lan] " Loktionov, Aleksandr
2026-03-20 7:13 ` Loktionov, Aleksandr
2026-03-20 15:49 ` Stanislav Fomichev
2026-03-23 23:20 ` Jakub Kicinski
2026-03-23 23:20 ` Jakub Kicinski
2026-03-24 18:13 ` [Intel-wired-lan] " Stanislav Fomichev
2026-03-24 18:13 ` Stanislav Fomichev
2026-03-24 21:21 ` [Intel-wired-lan] " Jakub Kicinski
2026-03-24 21:21 ` Jakub Kicinski
2026-03-24 22:49 ` Stanislav Fomichev
2026-03-25 3:44 ` [Intel-wired-lan] " Jakub Kicinski
2026-03-25 3:44 ` Jakub Kicinski
2026-03-25 15:06 ` [Intel-wired-lan] " Stanislav Fomichev
2026-03-25 15:06 ` Stanislav Fomichev
2026-03-25 17:34 ` [Intel-wired-lan] " Stanislav Fomichev
2026-03-25 17:34 ` Stanislav Fomichev
2026-03-20 1:24 ` [Intel-wired-lan] [PATCH net-next v3 04/13] net: move promiscuity handling into dev_rx_mode_work Stanislav Fomichev
2026-03-20 1:24 ` Stanislav Fomichev
2026-03-20 8:01 ` [Intel-wired-lan] " Loktionov, Aleksandr
2026-03-20 8:01 ` Loktionov, Aleksandr
2026-03-20 15:41 ` [Intel-wired-lan] " Stanislav Fomichev
2026-03-20 15:41 ` Stanislav Fomichev
2026-03-20 1:24 ` [Intel-wired-lan] [PATCH net-next v3 05/13] fbnic: convert to ndo_set_rx_mode_async Stanislav Fomichev
2026-03-20 1:24 ` Stanislav Fomichev
2026-03-20 1:24 ` [Intel-wired-lan] [PATCH net-next v3 06/13] mlx5: " Stanislav Fomichev
2026-03-20 1:24 ` Stanislav Fomichev
2026-03-20 14:47 ` [Intel-wired-lan] " Cosmin Ratiu via Intel-wired-lan
2026-03-20 14:47 ` Cosmin Ratiu
2026-03-20 15:42 ` [Intel-wired-lan] " Stanislav Fomichev
2026-03-20 15:42 ` Stanislav Fomichev
2026-03-20 1:24 ` [Intel-wired-lan] [PATCH net-next v3 07/13] bnxt: " Stanislav Fomichev
2026-03-20 1:24 ` Stanislav Fomichev
2026-03-24 0:47 ` [Intel-wired-lan] " Michael Chan via Intel-wired-lan
2026-03-24 0:47 ` Michael Chan
2026-03-20 1:24 ` [Intel-wired-lan] [PATCH net-next v3 08/13] bnxt: use snapshot in bnxt_cfg_rx_mode Stanislav Fomichev
2026-03-20 1:24 ` Stanislav Fomichev
2026-03-20 7:51 ` [Intel-wired-lan] " Loktionov, Aleksandr
2026-03-20 7:51 ` Loktionov, Aleksandr
2026-03-24 1:08 ` [Intel-wired-lan] " Michael Chan via Intel-wired-lan
2026-03-24 1:08 ` Michael Chan
2026-03-24 1:08 ` Michael Chan
2026-03-24 18:29 ` Stanislav Fomichev [this message]
2026-03-24 18:29 ` Stanislav Fomichev
2026-03-20 1:24 ` [Intel-wired-lan] [PATCH net-next v3 09/13] iavf: convert to ndo_set_rx_mode_async Stanislav Fomichev
2026-03-20 1:24 ` Stanislav Fomichev
2026-03-20 7:53 ` [Intel-wired-lan] " Loktionov, Aleksandr
2026-03-20 7:53 ` Loktionov, Aleksandr
2026-03-20 1:24 ` [Intel-wired-lan] [PATCH net-next v3 10/13] netdevsim: " Stanislav Fomichev
2026-03-20 1:24 ` Stanislav Fomichev
2026-03-20 1:24 ` [Intel-wired-lan] [PATCH net-next v3 11/13] dummy: " Stanislav Fomichev
2026-03-20 1:24 ` Stanislav Fomichev
2026-03-20 7:54 ` [Intel-wired-lan] " Loktionov, Aleksandr
2026-03-20 7:54 ` Loktionov, Aleksandr
2026-03-20 1:25 ` [Intel-wired-lan] [PATCH net-next v3 12/13] net: warn ops-locked drivers still using ndo_set_rx_mode Stanislav Fomichev
2026-03-20 1:25 ` Stanislav Fomichev
2026-03-20 7:55 ` [Intel-wired-lan] " Loktionov, Aleksandr
2026-03-20 7:55 ` Loktionov, Aleksandr
2026-03-20 1:25 ` [Intel-wired-lan] [PATCH net-next v3 13/13] selftests: net: add team_bridge_macvlan rx_mode test Stanislav Fomichev
2026-03-20 1:25 ` Stanislav Fomichev
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=acLX7XCmoc-tFCbD@mini-arch \
--to=stfomichev@gmail.com \
--cc=aleksandr.loktionov@intel.com \
--cc=alexanderduyck@fb.com \
--cc=andrew+netdev@lunn.ch \
--cc=anthony.l.nguyen@intel.com \
--cc=bestswngs@gmail.com \
--cc=corbet@lwn.net \
--cc=davem@davemloft.net \
--cc=dtatulea@nvidia.com \
--cc=edumazet@google.com \
--cc=horms@kernel.org \
--cc=intel-wired-lan@lists.osuosl.org \
--cc=jacob.e.keller@intel.com \
--cc=jianbol@nvidia.com \
--cc=johannes@sipsolutions.net \
--cc=kees@kernel.org \
--cc=kernel-team@meta.com \
--cc=kuba@kernel.org \
--cc=leon@kernel.org \
--cc=linux-doc@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-kselftest@vger.kernel.org \
--cc=linux-rdma@vger.kernel.org \
--cc=linux-wireless@vger.kernel.org \
--cc=mbloch@nvidia.com \
--cc=michael.chan@broadcom.com \
--cc=mohsin.bashr@gmail.com \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
--cc=pavan.chebbi@broadcom.com \
--cc=przemyslaw.kitszel@intel.com \
--cc=saeedm@nvidia.com \
--cc=sd@queasysnail.net \
--cc=sdf@fomichev.me \
--cc=skhan@linuxfoundation.org \
--cc=skhawaja@google.com \
--cc=tariqt@nvidia.com \
--cc=willemb@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 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.