Re: [net-next PATCH 3/3] net: dsa: qca8k: limit user ports access to the first CPU port on setup

From: Vladimir Oltean
Date: Thu Jul 27 2023 - 17:17:08 EST


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@xxxxxxxxx>
> ---

Reviewed-by: Vladimir Oltean <olteanv@xxxxxxxxx>

> 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
>