Messages in this thread | | | Date | Fri, 28 Jul 2023 00:16:58 +0300 | From | Vladimir Oltean <> | 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@gmail.com> > ---
Reviewed-by: Vladimir Oltean <olteanv@gmail.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 >
| |