[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <20230727211658.3gkjql5jww44hr4c@skbuf>
Date: Fri, 28 Jul 2023 00:16:58 +0300
From: Vladimir Oltean <olteanv@...il.com>
To: Christian Marangi <ansuelsmth@...il.com>
Cc: Andrew Lunn <andrew@...n.ch>,
Florian Fainelli <f.fainelli@...il.com>,
"David S. Miller" <davem@...emloft.net>,
Eric Dumazet <edumazet@...gle.com>,
Jakub Kicinski <kuba@...nel.org>,
Paolo Abeni <pabeni@...hat.com>, Atin Bainada <hi@...nb.me>,
netdev@...r.kernel.org, linux-kernel@...r.kernel.org
Subject: Re: [net-next PATCH 3/3] net: dsa: qca8k: limit user ports access to
the first CPU port on setup
On Mon, Jul 24, 2023 at 05:30:58AM +0200, Christian Marangi wrote:
> In preparation for multi-CPU support, set CPU port LOOKUP MEMBER outside
> the port loop and setup the LOOKUP MEMBER mask for user ports only to
> the first CPU port.
>
> This is to handle flooding condition where every CPU port is set as
> target and prevent packet duplication for unknown frames from user ports.
>
> Secondary CPU port LOOKUP MEMBER mask will be setup later when
> port_change_master will be implemented.
>
> Signed-off-by: Christian Marangi <ansuelsmth@...il.com>
> ---
Reviewed-by: Vladimir Oltean <olteanv@...il.com>
> drivers/net/dsa/qca/qca8k-8xxx.c | 14 ++++++--------
> 1 file changed, 6 insertions(+), 8 deletions(-)
>
> diff --git a/drivers/net/dsa/qca/qca8k-8xxx.c b/drivers/net/dsa/qca/qca8k-8xxx.c
> index 31552853fdd4..6286a64a2fe3 100644
> --- a/drivers/net/dsa/qca/qca8k-8xxx.c
> +++ b/drivers/net/dsa/qca/qca8k-8xxx.c
> @@ -1850,18 +1850,16 @@ qca8k_setup(struct dsa_switch *ds)
> if (ret)
> return ret;
>
> + /* CPU port gets connected to all user ports of the switch */
> + ret = qca8k_rmw(priv, QCA8K_PORT_LOOKUP_CTRL(cpu_port),
> + QCA8K_PORT_LOOKUP_MEMBER, dsa_user_ports(ds));
> + if (ret)
> + return ret;
> +
> /* Setup connection between CPU port & user ports
> * Configure specific switch configuration for ports
> */
> for (i = 0; i < QCA8K_NUM_PORTS; i++) {
> - /* CPU port gets connected to all user ports of the switch */
> - if (dsa_is_cpu_port(ds, i)) {
> - ret = qca8k_rmw(priv, QCA8K_PORT_LOOKUP_CTRL(i),
> - QCA8K_PORT_LOOKUP_MEMBER, dsa_user_ports(ds));
> - if (ret)
> - return ret;
> - }
> -
> /* Individual user ports get connected to CPU port only */
> if (dsa_is_user_port(ds, i)) {
> ret = qca8k_rmw(priv, QCA8K_PORT_LOOKUP_CTRL(i),
FWIW, the remaining loop can be rewritten (in a separate patch) using
dsa_switch_for_each_user_port(), which is actually an operation of lower
complexity compared to "for" + "dsa_is_user_port".
> --
> 2.40.1
>
Powered by blists - more mailing lists