mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-26 21:54:11 +08:00
net: dsa: mv88e6xxx: fix duplicate vlan warning
When setting VLANs on DSA switches, the VLAN is added to both the port concerned as well as the CPU port by dsa_slave_vlan_add(), as well as any DSA ports. If multiple ports are configured with the same VLAN ID, this triggers a warning on the CPU and DSA ports. Avoid this warning for CPU and DSA ports. Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> Reviewed-by: Florian Fainelli <f.fainelli@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
07c6f9805f
commit
933b442508
@ -1795,7 +1795,7 @@ static int mv88e6xxx_broadcast_setup(struct mv88e6xxx_chip *chip, u16 vid)
|
||||
}
|
||||
|
||||
static int mv88e6xxx_port_vlan_join(struct mv88e6xxx_chip *chip, int port,
|
||||
u16 vid, u8 member)
|
||||
u16 vid, u8 member, bool warn)
|
||||
{
|
||||
const u8 non_member = MV88E6XXX_G1_VTU_DATA_MEMBER_TAG_NON_MEMBER;
|
||||
struct mv88e6xxx_vtu_entry vlan;
|
||||
@ -1840,7 +1840,7 @@ static int mv88e6xxx_port_vlan_join(struct mv88e6xxx_chip *chip, int port,
|
||||
err = mv88e6xxx_vtu_loadpurge(chip, &vlan);
|
||||
if (err)
|
||||
return err;
|
||||
} else {
|
||||
} else if (warn) {
|
||||
dev_info(chip->dev, "p%d: already a member of VLAN %d\n",
|
||||
port, vid);
|
||||
}
|
||||
@ -1854,6 +1854,7 @@ static void mv88e6xxx_port_vlan_add(struct dsa_switch *ds, int port,
|
||||
struct mv88e6xxx_chip *chip = ds->priv;
|
||||
bool untagged = vlan->flags & BRIDGE_VLAN_INFO_UNTAGGED;
|
||||
bool pvid = vlan->flags & BRIDGE_VLAN_INFO_PVID;
|
||||
bool warn;
|
||||
u8 member;
|
||||
u16 vid;
|
||||
|
||||
@ -1867,10 +1868,15 @@ static void mv88e6xxx_port_vlan_add(struct dsa_switch *ds, int port,
|
||||
else
|
||||
member = MV88E6XXX_G1_VTU_DATA_MEMBER_TAG_TAGGED;
|
||||
|
||||
/* net/dsa/slave.c will call dsa_port_vlan_add() for the affected port
|
||||
* and then the CPU port. Do not warn for duplicates for the CPU port.
|
||||
*/
|
||||
warn = !dsa_is_cpu_port(ds, port) && !dsa_is_dsa_port(ds, port);
|
||||
|
||||
mv88e6xxx_reg_lock(chip);
|
||||
|
||||
for (vid = vlan->vid_begin; vid <= vlan->vid_end; ++vid)
|
||||
if (mv88e6xxx_port_vlan_join(chip, port, vid, member))
|
||||
if (mv88e6xxx_port_vlan_join(chip, port, vid, member, warn))
|
||||
dev_err(ds->dev, "p%d: failed to add VLAN %d%c\n", port,
|
||||
vid, untagged ? 'u' : 't');
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user