public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Jonas Gorski <jonas.gorski@gmail.com>
To: Florian Fainelli <florian.fainelli@broadcom.com>,
	Andrew Lunn <andrew@lunn.ch>, Vladimir Oltean <olteanv@gmail.com>,
	"David S. Miller" <davem@davemloft.net>,
	Eric Dumazet <edumazet@google.com>,
	Jakub Kicinski <kuba@kernel.org>, Paolo Abeni <pabeni@redhat.com>,
	Russell King <linux@armlinux.org.uk>,
	Kurt Kanzenbach <kurt@linutronix.de>
Cc: Florian Fainelli <f.fainelli@gmail.com>,
	netdev@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: [PATCH net 03/11] net: dsa: b53: fix clearing PVID of a port
Date: Tue, 29 Apr 2025 22:17:02 +0200	[thread overview]
Message-ID: <20250429201710.330937-4-jonas.gorski@gmail.com> (raw)
In-Reply-To: <20250429201710.330937-1-jonas.gorski@gmail.com>

Currently the PVID of ports are only set when adding/updating VLANs with
PVID set or removing VLANs, but not when clearing the PVID flag of a
VLAN.

E.g. the following flow

$ ip link add br0 type bridge vlan_filtering 1
$ ip link set sw1p1 master bridge
$ bridge vlan add dev sw1p1 vid 10 pvid untagged
$ bridge vlan add dev sw1p1 vid 10 untagged

Would keep the PVID set as 10, despite the flag being cleared. Fix this
by checking if we need to unset the PVID on vlan updates.

Fixes: a2482d2ce349 ("net: dsa: b53: Plug in VLAN support")
Signed-off-by: Jonas Gorski <jonas.gorski@gmail.com>
---
 drivers/net/dsa/b53/b53_common.c | 13 +++++++++++--
 1 file changed, 11 insertions(+), 2 deletions(-)

diff --git a/drivers/net/dsa/b53/b53_common.c b/drivers/net/dsa/b53/b53_common.c
index 9d4fb54b4ced..65d74c455c57 100644
--- a/drivers/net/dsa/b53/b53_common.c
+++ b/drivers/net/dsa/b53/b53_common.c
@@ -1537,12 +1537,21 @@ int b53_vlan_add(struct dsa_switch *ds, int port,
 	bool untagged = vlan->flags & BRIDGE_VLAN_INFO_UNTAGGED;
 	bool pvid = vlan->flags & BRIDGE_VLAN_INFO_PVID;
 	struct b53_vlan *vl;
+	u16 old_pvid, new_pvid;
 	int err;
 
 	err = b53_vlan_prepare(ds, port, vlan);
 	if (err)
 		return err;
 
+	b53_read16(dev, B53_VLAN_PAGE, B53_VLAN_PORT_DEF_TAG(port), &old_pvid);
+	if (pvid)
+		new_pvid = vlan->vid;
+	else if (!pvid && vlan->vid == old_pvid)
+		new_pvid = b53_default_pvid(dev);
+	else
+		new_pvid = old_pvid;
+
 	vl = &dev->vlans[vlan->vid];
 
 	b53_get_vlan_entry(dev, vlan->vid, vl);
@@ -1562,9 +1571,9 @@ int b53_vlan_add(struct dsa_switch *ds, int port,
 	b53_set_vlan_entry(dev, vlan->vid, vl);
 	b53_fast_age_vlan(dev, vlan->vid);
 
-	if (pvid && !dsa_is_cpu_port(ds, port)) {
+	if (!dsa_is_cpu_port(ds, port) && new_pvid != old_pvid) {
 		b53_write16(dev, B53_VLAN_PAGE, B53_VLAN_PORT_DEF_TAG(port),
-			    vlan->vid);
+			    new_pvid);
 		b53_fast_age_vlan(dev, vlan->vid);
 	}
 
-- 
2.43.0


  parent reply	other threads:[~2025-04-29 20:17 UTC|newest]

Thread overview: 25+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-04-29 20:16 [PATCH net 00/11] net: dsa: b53: accumulated fixes Jonas Gorski
2025-04-29 20:17 ` [PATCH net 01/11] net: dsa: b53: allow leaky reserved multicast Jonas Gorski
2025-04-29 20:17 ` [PATCH net 02/11] net: dsa: b53: keep CPU port always tagged again Jonas Gorski
2025-04-29 20:17 ` Jonas Gorski [this message]
2025-04-29 20:17 ` [PATCH net 04/11] net: dsa: b53: fix flushing old pvid VLAN on pvid change Jonas Gorski
2025-04-30  8:03   ` Florian Fainelli
2025-04-30  9:00     ` Jonas Gorski
2025-04-29 20:17 ` [PATCH net 05/11] net: dsa: b53: fix VLAN ID for untagged vlan on bridge leave Jonas Gorski
2025-04-29 20:17 ` [PATCH net 06/11] net: dsa: b53: always rejoin default untagged VLAN " Jonas Gorski
2025-04-29 20:17 ` [PATCH net 07/11] net: dsa: b53: do not allow to configure VLAN 0 Jonas Gorski
2025-04-29 20:17 ` [PATCH net 08/11] net: dsa: b53: do not program vlans when vlan filtering is off Jonas Gorski
2025-04-29 20:17 ` [PATCH net 09/11] net: dsa: b53: fix toggling vlan_filtering Jonas Gorski
2025-05-06  7:51   ` Paolo Abeni
2025-05-06  7:55     ` Florian Fainelli
2025-04-29 20:17 ` [PATCH net 10/11] net: dsa: b53: fix learning on VLAN unaware bridges Jonas Gorski
2025-04-29 20:17 ` [PATCH net 11/11] net: dsa: b53: do not set learning and unicast/multicast on up Jonas Gorski
2025-04-30  8:07 ` [PATCH net 00/11] net: dsa: b53: accumulated fixes Florian Fainelli
2025-04-30  8:43   ` Jonas Gorski
2025-05-06 13:42     ` Vladimir Oltean
2025-05-06 14:27       ` Jonas Gorski
2025-05-06 19:03         ` Florian Fainelli
2025-05-06 19:48           ` Jonas Gorski
2025-05-07  7:30             ` Florian Fainelli
2025-05-06 13:08 ` Florian Fainelli
2025-05-08  2:40 ` patchwork-bot+netdevbpf

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20250429201710.330937-4-jonas.gorski@gmail.com \
    --to=jonas.gorski@gmail.com \
    --cc=andrew@lunn.ch \
    --cc=davem@davemloft.net \
    --cc=edumazet@google.com \
    --cc=f.fainelli@gmail.com \
    --cc=florian.fainelli@broadcom.com \
    --cc=kuba@kernel.org \
    --cc=kurt@linutronix.de \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux@armlinux.org.uk \
    --cc=netdev@vger.kernel.org \
    --cc=olteanv@gmail.com \
    --cc=pabeni@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox