From: Simon Horman <horms@kernel.org>
To: wei.fang@nxp.com
Cc: Simon Horman <horms@kernel.org>,
robh@kernel.org, pabeni@redhat.com, claudiu.manoil@nxp.com,
devicetree@vger.kernel.org, f.fainelli@gmail.com,
frank.li@nxp.com, imx@lists.linux.dev, krzk+dt@kernel.org,
linux-kernel@vger.kernel.org, edumazet@google.com,
xiaoning.wang@nxp.com, davem@davemloft.net,
linux@armlinux.org.uk, kuba@kernel.org, chleroy@kernel.org,
conor+dt@kernel.org, andrew+netdev@lunn.ch,
linux-arm-kernel@lists.infradead.org,
linuxppc-dev@lists.ozlabs.org, vladimir.oltean@nxp.com,
netdev@vger.kernel.org
Subject: Re: [net-next,12/14] net: dsa: netc: add more basic functions support
Date: Wed, 18 Mar 2026 14:49:56 +0000 [thread overview]
Message-ID: <20260318144954.1893193-3-horms@kernel.org> (raw)
In-Reply-To: <20260316094152.1558671-13-wei.fang@nxp.com>
This is an AI-generated review of your patch. The human sending this
email has considered the AI review valid, or at least plausible.
For local reproduction steps see https://netdev-ai.bots.linux.dev/ai-local.html
---
net: dsa: netc: add more basic functions support
This patch expands the NETC switch driver with several foundational
features, including FDB and MDB management, STP state handling, MTU
configuration, port setup/teardown, and host flooding support.
At this stage, the driver operates only in standalone port mode.
> diff --git a/drivers/net/dsa/netc/netc_main.c b/drivers/net/dsa/netc/netc_main.c
> index 884ee899fc89..fd952b507cbd 100644
> --- a/drivers/net/dsa/netc/netc_main.c
> +++ b/drivers/net/dsa/netc/netc_main.c
[ ... ]
> @@ -427,24 +658,57 @@ static int netc_setup(struct dsa_switch *ds)
> if (err)
> goto free_mdio_bus;
>
> + INIT_HLIST_HEAD(&priv->fdb_list);
> + mutex_init(&priv->fdbt_lock);
> +
> netc_switch_fixed_config(priv);
>
> /* default setting for ports */
> dsa_switch_for_each_available_port(dp, ds)
> netc_port_default_config(priv->ports[dp->index]);
>
> + err = netc_add_standalone_vlan_entry(priv);
> + if (err)
> + goto free_ntmp_user;
> +
> + err = netc_add_standalone_fdb_bcast_entry(priv);
> + if (err)
> + goto free_ntmp_user;
> +
> return 0;
>
> +free_ntmp_user:
> + netc_free_ntmp_user(priv);
> free_mdio_bus:
> netc_free_mdio_bus(priv);
>
> return err;
> }
Does the error path handle the mutex properly?
In netc_setup(), the mutex is initialized with mutex_init(&priv->fdbt_lock).
If netc_add_standalone_vlan_entry() or netc_add_standalone_fdb_bcast_entry()
fails, the error path jumps to free_ntmp_user:
drivers/net/dsa/netc/netc_main.c:netc_setup() {
...
INIT_HLIST_HEAD(&priv->fdb_list);
mutex_init(&priv->fdbt_lock);
...
err = netc_add_standalone_vlan_entry(priv);
if (err)
goto free_ntmp_user;
err = netc_add_standalone_fdb_bcast_entry(priv);
if (err)
goto free_ntmp_user;
return 0;
free_ntmp_user:
netc_free_ntmp_user(priv);
free_mdio_bus:
netc_free_mdio_bus(priv);
return err;
}
But netc_free_ntmp_user() and netc_free_mdio_bus() don't call
mutex_destroy(&priv->fdbt_lock) to clean up the mutex.
Looking at the normal teardown path in netc_teardown(), it calls
netc_destroy_all_lists() which properly handles both the FDB list and
mutex cleanup:
drivers/net/dsa/netc/netc_main.c:netc_destroy_all_lists() {
netc_destroy_fdb_list(priv);
mutex_destroy(&priv->fdbt_lock);
}
drivers/net/dsa/netc/netc_main.c:netc_teardown() {
struct netc_switch *priv = ds->priv;
netc_destroy_all_lists(priv);
netc_free_host_flood_rules(priv);
netc_free_ntmp_user(priv);
netc_free_mdio_bus(priv);
}
Should the error path in netc_setup() call netc_destroy_all_lists() before
calling netc_free_ntmp_user()?
> @@ -595,6 +859,261 @@ static void netc_switch_get_ip_revision(struct netc_switch *priv)
> priv->revision = val & IPBRR0_IP_REV;
> }
>
> +static void netc_destroy_all_lists(struct netc_switch *priv)
> +{
> + netc_destroy_fdb_list(priv);
> + mutex_destroy(&priv->fdbt_lock);
> +}
> +
> +static void netc_free_host_flood_rules(struct netc_switch *priv)
> +{
> + struct dsa_port *dp;
> +
> + dsa_switch_for_each_user_port(dp, priv->ds) {
> + struct netc_port *np = priv->ports[dp->index];
> +
> + kfree(np->host_flood);
> + np->host_flood = NULL;
> + }
> +}
[Simon says: I think this is a false positive and the clean-up
suggestion is not needed in tear down]
Does this properly clean up the hardware state?
netc_free_host_flood_rules() just frees the host_flood memory and sets
the pointer to NULL:
drivers/net/dsa/netc/netc_main.c:netc_free_host_flood_rules() {
struct dsa_port *dp;
dsa_switch_for_each_user_port(dp, priv->ds) {
struct netc_port *np = priv->ports[dp->index];
kfree(np->host_flood);
np->host_flood = NULL;
}
}
But it doesn't delete the hardware IPFT entry or disable the PIPFCR register.
Compare with netc_port_remove_host_flood() which performs complete cleanup:
drivers/net/dsa/netc/netc_main.c:netc_port_remove_host_flood() {
struct netc_switch *priv = np->switch_priv;
if (!np->host_flood)
return;
ntmp_ipft_delete_entry(&priv->ntmp, np->host_flood->entry_id);
kfree(np->host_flood);
np->host_flood = NULL;
np->uc = false;
np->mc = false;
/* Disable ingress port filter table lookup */
netc_port_wr(np, NETC_PIPFCR, 0);
}
In netc_teardown(), netc_free_host_flood_rules() is called before
netc_free_ntmp_user(), so the NTMP command infrastructure is still
operational at that point.
Should netc_free_host_flood_rules() call netc_port_remove_host_flood(np)
for each user port instead of directly calling kfree()?
next prev parent reply other threads:[~2026-03-18 14:53 UTC|newest]
Thread overview: 29+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-03-16 9:41 [PATCH net-next 00/14] Add preliminary NETC switch support for i.MX94 Wei Fang
2026-03-16 9:41 ` [PATCH net-next 01/14] dt-bindings: net: dsa: update the description of 'dsa,member' property Wei Fang
2026-03-16 9:41 ` [PATCH net-next 02/14] dt-bindings: net: dsa: add NETC switch Wei Fang
2026-03-16 9:41 ` [PATCH net-next 03/14] net: enetc: add pre-boot initialization for i.MX94 switch Wei Fang
2026-03-16 9:41 ` [PATCH net-next 04/14] net: enetc: add basic operations to the FDB table Wei Fang
2026-03-16 9:41 ` [PATCH net-next 05/14] net: enetc: add support for the "Add" operation to VLAN filter table Wei Fang
2026-03-16 9:41 ` [PATCH net-next 06/14] net: enetc: add support for the "Update" operation to buffer pool table Wei Fang
2026-03-16 9:41 ` [PATCH net-next 07/14] net: enetc: add support for "Add" and "Delete" operations to IPFT Wei Fang
2026-03-16 9:41 ` [PATCH net-next 08/14] net: enetc: add multiple command BD rings support Wei Fang
2026-03-18 14:32 ` [net-next,08/14] " Simon Horman
2026-03-19 2:15 ` Wei Fang
2026-03-18 22:41 ` [PATCH net-next 08/14] " Frank Li
2026-03-16 9:41 ` [PATCH net-next 09/14] net: dsa: add NETC switch tag support Wei Fang
2026-03-16 9:41 ` [PATCH net-next 10/14] net: dsa: netc: introduce NXP NETC switch driver for i.MX94 Wei Fang
2026-03-18 14:39 ` [net-next,10/14] " Simon Horman
2026-03-19 2:48 ` Wei Fang
2026-03-16 9:41 ` [PATCH net-next 11/14] net: dsa: netc: add phylink MAC operations Wei Fang
2026-03-18 14:46 ` [net-next,11/14] " Simon Horman
2026-03-19 2:01 ` Wei Fang
2026-03-16 9:41 ` [PATCH net-next 12/14] net: dsa: netc: add more basic functions support Wei Fang
2026-03-18 14:49 ` Simon Horman [this message]
2026-03-19 2:59 ` [net-next,12/14] " Wei Fang
2026-03-16 9:41 ` [PATCH net-next 13/14] net: dsa: netc: initialize buffer bool table and implement flow-control Wei Fang
2026-03-18 14:54 ` [net-next,13/14] " Simon Horman
2026-03-18 14:56 ` Krzysztof Kozlowski
2026-03-18 22:24 ` Jakub Kicinski
2026-03-19 15:00 ` Simon Horman
2026-03-19 14:59 ` Simon Horman
2026-03-16 9:41 ` [PATCH net-next 14/14] net: dsa: netc: add support for the standardized counters Wei Fang
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=20260318144954.1893193-3-horms@kernel.org \
--to=horms@kernel.org \
--cc=andrew+netdev@lunn.ch \
--cc=chleroy@kernel.org \
--cc=claudiu.manoil@nxp.com \
--cc=conor+dt@kernel.org \
--cc=davem@davemloft.net \
--cc=devicetree@vger.kernel.org \
--cc=edumazet@google.com \
--cc=f.fainelli@gmail.com \
--cc=frank.li@nxp.com \
--cc=imx@lists.linux.dev \
--cc=krzk+dt@kernel.org \
--cc=kuba@kernel.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux@armlinux.org.uk \
--cc=linuxppc-dev@lists.ozlabs.org \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
--cc=robh@kernel.org \
--cc=vladimir.oltean@nxp.com \
--cc=wei.fang@nxp.com \
--cc=xiaoning.wang@nxp.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.