From fad3ebd4f1a9e25150f8612cd7cb0f9b024bdeb2 Mon Sep 17 00:00:00 2001 From: Markus Stockhausen Date: Fri, 28 Aug 2026 16:49:14 +0200 Subject: [PATCH] realtek: dsa: remove RTL931x family check from VLAN init Initialize struct rtl838x_vlan_info with a designated initializer instead of conditionally initializing the RTL931x-only fields based on family_id. The RTL931x VLAN table contains the additional if_id, multicast_grp_mask and l2_tunnel_list_id fields. Of these, if_id and multicast_grp_mask require the value zero during the initial VLAN table setup, while l2_tunnel_list_id uses -1 to denote that no L2 tunnel list is configured. A designated initializer already zero-initializes every member which is not explicitly specified. It is therefore sufficient to initialize only l2_tunnel_list_id to -1: struct rtl838x_vlan_info info = { .l2_tunnel_list_id = -1, }; This preserves the previous RTL931x values exactly: if_id = 0 multicast_grp_mask = 0 l2_tunnel_list_id = -1 It also preserves the values previously assigned explicitly for all families: fid = 0 hash_uc_fid = false hash_mc_fid = false profile_id = 0 member_ports = 0 The RTL838x, RTL839x and RTL930x VLAN table writers do not consume the RTL931x-specific members, so initializing those members unconditionally has no effect on those SoCs. Their relevant members retain exactly the same zero values as before. For RTL931x, rtl931x_vlan_set_tagged() does consume the additional members, but receives exactly the same values that were previously set inside the RTL9310_FAMILY_ID conditional. As a side effect, the whole structure is now initialized before first use, including members such as untagged_ports which are not relevant to this particular write path. This removes one unnecessary family_id dependency from the common DSA code without changing the generated VLAN table contents. Assisted-by: ChatGPT (OpenAI GPT-5.6 Sol) Link: https://github.com/openwrt/openwrt/pull/24918 Signed-off-by: Markus Stockhausen --- .../files-6.18/drivers/net/dsa/rtl83xx/dsa.c | 15 +++------------ 1 file changed, 3 insertions(+), 12 deletions(-) diff --git a/target/linux/realtek/files-6.18/drivers/net/dsa/rtl83xx/dsa.c b/target/linux/realtek/files-6.18/drivers/net/dsa/rtl83xx/dsa.c index 5a896c082a5..9939082401c 100644 --- a/target/linux/realtek/files-6.18/drivers/net/dsa/rtl83xx/dsa.c +++ b/target/linux/realtek/files-6.18/drivers/net/dsa/rtl83xx/dsa.c @@ -80,24 +80,15 @@ static void rtldsa_83xx_mc_pmasks_setup(struct rtl838x_switch_priv *priv) /* Initialize all VLANS */ static void rtldsa_vlan_setup(struct rtl838x_switch_priv *priv) { - struct rtl838x_vlan_info info; + struct rtl838x_vlan_info info = { + .l2_tunnel_list_id = -1, + }; pr_info("In %s\n", __func__); priv->r->vlan_profile_setup(0); priv->r->vlan_profile_dump(priv, 0); - info.fid = 0; /* Default Forwarding ID / MSTI */ - info.hash_uc_fid = false; /* Do not build the L2 lookup hash with FID, but VID */ - info.hash_mc_fid = false; /* Do the same for Multicast packets */ - info.profile_id = 0; /* Use default Vlan Profile 0 */ - info.member_ports = 0; /* Initially no port members */ - if (priv->family_id == RTL9310_FAMILY_ID) { - info.if_id = 0; - info.multicast_grp_mask = 0; - info.l2_tunnel_list_id = -1; - } - /* Initialize normal VLANs 1-4095 */ for (int i = 1; i < MAX_VLANS; i++) priv->r->vlan_set_tagged(i, &info);