Commit b3a34dc3 authored by Casper Andersson's avatar Casper Andersson Committed by David S. Miller
Browse files

net: sparx5: Fix add vlan when invalid operation



Check if operation is valid before changing any
settings in hardware. Otherwise it results in
changes being made despite it not being a valid
operation.

Fixes: 78eab33b ("net: sparx5: add vlan support")

Signed-off-by: default avatarCasper Andersson <casper.casan@gmail.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 767b9825
Loading
Loading
Loading
Loading
+10 −10
Original line number Diff line number Diff line
@@ -58,16 +58,6 @@ int sparx5_vlan_vid_add(struct sparx5_port *port, u16 vid, bool pvid,
	struct sparx5 *sparx5 = port->sparx5;
	int ret;

	/* Make the port a member of the VLAN */
	set_bit(port->portno, sparx5->vlan_mask[vid]);
	ret = sparx5_vlant_set_mask(sparx5, vid);
	if (ret)
		return ret;

	/* Default ingress vlan classification */
	if (pvid)
		port->pvid = vid;

	/* Untagged egress vlan classification */
	if (untagged && port->vid != vid) {
		if (port->vid) {
@@ -79,6 +69,16 @@ int sparx5_vlan_vid_add(struct sparx5_port *port, u16 vid, bool pvid,
		port->vid = vid;
	}

	/* Make the port a member of the VLAN */
	set_bit(port->portno, sparx5->vlan_mask[vid]);
	ret = sparx5_vlant_set_mask(sparx5, vid);
	if (ret)
		return ret;

	/* Default ingress vlan classification */
	if (pvid)
		port->pvid = vid;

	sparx5_vlan_port_apply(sparx5, port);

	return 0;