net: dsa: prepare 'dsa_tag_8021q_bridge_join' for standalone use
authorPawel Dembicki <paweldembicki@gmail.com>
Sat, 13 Jul 2024 21:16:16 +0000 (23:16 +0200)
committerJakub Kicinski <kuba@kernel.org>
Mon, 15 Jul 2024 13:55:16 +0000 (06:55 -0700)
The 'dsa_tag_8021q_bridge_join' could be used as a generic implementation
of the 'ds->ops->port_bridge_join()' function. However, it is necessary
to synchronize their arguments.

This patch also moves the 'tx_fwd_offload' flag configuration line into
'dsa_tag_8021q_bridge_join' body. Currently, every (sja1105) driver sets
it, and the future vsc73xx implementation will also need it for
simplification.

Suggested-by: Vladimir Oltean <olteanv@gmail.com>
Signed-off-by: Pawel Dembicki <paweldembicki@gmail.com>
Reviewed-by: Vladimir Oltean <olteanv@gmail.com>
Link: https://patch.msgid.link/20240713211620.1125910-11-paweldembicki@gmail.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/dsa/sja1105/sja1105_main.c
include/linux/dsa/8021q.h
net/dsa/tag_8021q.c

index 0c55a29d7dd39e73d29e3d6b26e8fe8d137d9dbb..c7282ce3d11c54770aed08f37328e51de814a132 100644 (file)
@@ -2133,14 +2133,13 @@ static int sja1105_bridge_join(struct dsa_switch *ds, int port,
        if (rc)
                return rc;
 
-       rc = dsa_tag_8021q_bridge_join(ds, port, bridge);
+       rc = dsa_tag_8021q_bridge_join(ds, port, bridge, tx_fwd_offload,
+                                      extack);
        if (rc) {
                sja1105_bridge_member(ds, port, bridge, false);
                return rc;
        }
 
-       *tx_fwd_offload = true;
-
        return 0;
 }
 
index 1dda2a13b8322829d0405facca047b15b504dbfc..d13aabdeb4b2aecb1044ce07d8c09add0d0cbb49 100644 (file)
@@ -18,7 +18,8 @@ int dsa_tag_8021q_register(struct dsa_switch *ds, __be16 proto);
 void dsa_tag_8021q_unregister(struct dsa_switch *ds);
 
 int dsa_tag_8021q_bridge_join(struct dsa_switch *ds, int port,
-                             struct dsa_bridge bridge);
+                             struct dsa_bridge bridge, bool *tx_fwd_offload,
+                             struct netlink_ext_ack *extack);
 
 void dsa_tag_8021q_bridge_leave(struct dsa_switch *ds, int port,
                                struct dsa_bridge bridge);
index c0eee113a2b9213c3445542d10cd0add2a8ff3e5..3ee53e28ec2e9f550b54d438cca26b0a34fd5fe4 100644 (file)
@@ -286,7 +286,8 @@ int dsa_switch_tag_8021q_vlan_del(struct dsa_switch *ds,
  * be used for VLAN-unaware bridging.
  */
 int dsa_tag_8021q_bridge_join(struct dsa_switch *ds, int port,
-                             struct dsa_bridge bridge)
+                             struct dsa_bridge bridge, bool *tx_fwd_offload,
+                             struct netlink_ext_ack *extack)
 {
        struct dsa_port *dp = dsa_to_port(ds, port);
        u16 standalone_vid, bridge_vid;
@@ -304,6 +305,8 @@ int dsa_tag_8021q_bridge_join(struct dsa_switch *ds, int port,
 
        dsa_port_tag_8021q_vlan_del(dp, standalone_vid, false);
 
+       *tx_fwd_offload = true;
+
        return 0;
 }
 EXPORT_SYMBOL_GPL(dsa_tag_8021q_bridge_join);