On Sat, 5 Sep 2020 12:32:33 +0200 Linus Walleij wrote: > When removing a port from a VLAN we are just erasing the > member config for the VLAN, which is wrong: other ports > can be using it. > > Just mask off the port and only zero out the rest of the > member config once ports using of the VLAN are removed > from it. > > Reported-by: Florian Fainelli <f.faine...@gmail.com> > Signed-off-by: Linus Walleij <linus.wall...@linaro.org>
I see you labeled this for net-net, but it reads like a fix, is it not? Fixes: d8652956cf37 ("net: dsa: realtek-smi: Add Realtek SMI driver") Like commit 15ab7906cc92 ("net: dsa: rtl8366: Fix VLAN semantics") had? > diff --git a/drivers/net/dsa/rtl8366.c b/drivers/net/dsa/rtl8366.c > index 2dcde7a91721..bd3c947976ce 100644 > --- a/drivers/net/dsa/rtl8366.c > +++ b/drivers/net/dsa/rtl8366.c > @@ -471,13 +471,19 @@ int rtl8366_vlan_del(struct dsa_switch *ds, int port, > return ret; > > if (vid == vlanmc.vid) { > - /* clear VLAN member configurations */ > - vlanmc.vid = 0; > - vlanmc.priority = 0; > - vlanmc.member = 0; > - vlanmc.untag = 0; > - vlanmc.fid = 0; > - > + /* Remove this port from the VLAN */ > + vlanmc.member &= ~BIT(port); > + vlanmc.untag &= ~BIT(port); > + /* > + * If no ports are members of this VLAN > + * anymore then clear the whole member > + * config so it can be reused. > + */ > + if (!vlanmc.member && vlanmc.untag) { > + vlanmc.vid = 0; > + vlanmc.priority = 0; > + vlanmc.fid = 0; > + } > ret = smi->ops->set_vlan_mc(smi, i, &vlanmc); > if (ret) { > dev_err(smi->dev,