]> git.proxmox.com Git - mirror_ubuntu-jammy-kernel.git/commitdiff
net: switchdev: remove the transaction structure from port attributes
authorVladimir Oltean <vladimir.oltean@nxp.com>
Sat, 9 Jan 2021 00:01:50 +0000 (02:01 +0200)
committerJakub Kicinski <kuba@kernel.org>
Tue, 12 Jan 2021 00:00:57 +0000 (16:00 -0800)
Since the introduction of the switchdev API, port attributes were
transmitted to drivers for offloading using a two-step transactional
model, with a prepare phase that was supposed to catch all errors, and a
commit phase that was supposed to never fail.

Some classes of failures can never be avoided, like hardware access, or
memory allocation. In the latter case, merely attempting to move the
memory allocation to the preparation phase makes it impossible to avoid
memory leaks, since commit 91cf8eceffc1 ("switchdev: Remove unused
transaction item queue") which has removed the unused mechanism of
passing on the allocated memory between one phase and another.

It is time we admit that separating the preparation from the commit
phase is something that is best left for the driver to decide, and not
something that should be baked into the API, especially since there are
no switchdev callers that depend on this.

This patch removes the struct switchdev_trans member from switchdev port
attribute notifier structures, and converts drivers to not look at this
member.

In part, this patch contains a revert of my previous commit 2e554a7a5d8a
("net: dsa: propagate switchdev vlan_filtering prepare phase to
drivers").

For the most part, the conversion was trivial except for:
- Rocker's world implementation based on Broadcom OF-DPA had an odd
  implementation of ofdpa_port_attr_bridge_flags_set. The conversion was
  done mechanically, by pasting the implementation twice, then only
  keeping the code that would get executed during prepare phase on top,
  then only keeping the code that gets executed during the commit phase
  on bottom, then simplifying the resulting code until this was obtained.
- DSA's offloading of STP state, bridge flags, VLAN filtering and
  multicast router could be converted right away. But the ageing time
  could not, so a shim was introduced and this was left for a further
  commit.

Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>
Acked-by: Linus Walleij <linus.walleij@linaro.org>
Acked-by: Jiri Pirko <jiri@nvidia.com>
Reviewed-by: Kurt Kanzenbach <kurt@linutronix.de> # hellcreek
Reviewed-by: Linus Walleij <linus.walleij@linaro.org> # RTL8366RB
Reviewed-by: Ido Schimmel <idosch@nvidia.com>
Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
33 files changed:
drivers/net/dsa/b53/b53_common.c
drivers/net/dsa/b53/b53_priv.h
drivers/net/dsa/dsa_loop.c
drivers/net/dsa/hirschmann/hellcreek.c
drivers/net/dsa/lantiq_gswip.c
drivers/net/dsa/microchip/ksz8795.c
drivers/net/dsa/microchip/ksz9477.c
drivers/net/dsa/mt7530.c
drivers/net/dsa/mv88e6xxx/chip.c
drivers/net/dsa/ocelot/felix.c
drivers/net/dsa/qca8k.c
drivers/net/dsa/realtek-smi-core.h
drivers/net/dsa/rtl8366.c
drivers/net/dsa/sja1105/sja1105.h
drivers/net/dsa/sja1105/sja1105_devlink.c
drivers/net/dsa/sja1105/sja1105_main.c
drivers/net/ethernet/marvell/prestera/prestera_switchdev.c
drivers/net/ethernet/mellanox/mlxsw/spectrum_switchdev.c
drivers/net/ethernet/mscc/ocelot.c
drivers/net/ethernet/mscc/ocelot_net.c
drivers/net/ethernet/rocker/rocker.h
drivers/net/ethernet/rocker/rocker_main.c
drivers/net/ethernet/rocker/rocker_ofdpa.c
drivers/net/ethernet/ti/cpsw_switchdev.c
drivers/staging/fsl-dpaa2/ethsw/ethsw.c
include/net/dsa.h
include/net/switchdev.h
include/soc/mscc/ocelot.h
net/dsa/dsa_priv.h
net/dsa/port.c
net/dsa/slave.c
net/dsa/switch.c
net/switchdev/switchdev.c

index bab174c052b3e7517671010acbd4c9c1de57602b..f07f547db53e347988f926af2296a80c0d19db09 100644 (file)
@@ -1374,14 +1374,10 @@ void b53_phylink_mac_link_up(struct dsa_switch *ds, int port,
 }
 EXPORT_SYMBOL(b53_phylink_mac_link_up);
 
-int b53_vlan_filtering(struct dsa_switch *ds, int port, bool vlan_filtering,
-                      struct switchdev_trans *trans)
+int b53_vlan_filtering(struct dsa_switch *ds, int port, bool vlan_filtering)
 {
        struct b53_device *dev = ds->priv;
 
-       if (switchdev_trans_ph_prepare(trans))
-               return 0;
-
        b53_enable_vlan(dev, dev->vlan_enabled, vlan_filtering);
 
        return 0;
index 6d0c724763c700a355c8828cce368c9ea4b1c0c8..9ab0fb409f78a8dd6cb98c8068a0bf52269c514a 100644 (file)
@@ -348,8 +348,7 @@ void b53_phylink_mac_link_up(struct dsa_switch *ds, int port,
                             struct phy_device *phydev,
                             int speed, int duplex,
                             bool tx_pause, bool rx_pause);
-int b53_vlan_filtering(struct dsa_switch *ds, int port, bool vlan_filtering,
-                      struct switchdev_trans *trans);
+int b53_vlan_filtering(struct dsa_switch *ds, int port, bool vlan_filtering);
 int b53_vlan_prepare(struct dsa_switch *ds, int port,
                     const struct switchdev_obj_port_vlan *vlan);
 void b53_vlan_add(struct dsa_switch *ds, int port,
index 3be9f665d174b4c752e087108b45b2f8c5e98ee0..8e3d623f4dbd2fd67a2bdc93ddf63ffa96a0bbba 100644 (file)
@@ -190,8 +190,7 @@ static void dsa_loop_port_stp_state_set(struct dsa_switch *ds, int port,
 }
 
 static int dsa_loop_port_vlan_filtering(struct dsa_switch *ds, int port,
-                                       bool vlan_filtering,
-                                       struct switchdev_trans *trans)
+                                       bool vlan_filtering)
 {
        dev_dbg(ds->dev, "%s: port: %d, vlan_filtering: %d\n",
                __func__, port, vlan_filtering);
index a59cc40170fc4169cd5b1c67c7e317864d628c20..4e1dbf91720c8695ad027671be5b693f5368cb10 100644 (file)
@@ -858,14 +858,10 @@ static int hellcreek_fdb_dump(struct dsa_switch *ds, int port,
 }
 
 static int hellcreek_vlan_filtering(struct dsa_switch *ds, int port,
-                                   bool vlan_filtering,
-                                   struct switchdev_trans *trans)
+                                   bool vlan_filtering)
 {
        struct hellcreek *hellcreek = ds->priv;
 
-       if (switchdev_trans_ph_prepare(trans))
-               return 0;
-
        dev_dbg(hellcreek->dev, "%s VLAN filtering on port %d\n",
                vlan_filtering ? "Enable" : "Disable", port);
 
index 72cadd16056fda8cd74478bbd9cec0341ba929df..1dddca92d17eea7050e2d0ec588c302bee636ccd 100644 (file)
@@ -727,23 +727,14 @@ static int gswip_pce_load_microcode(struct gswip_priv *priv)
 }
 
 static int gswip_port_vlan_filtering(struct dsa_switch *ds, int port,
-                                    bool vlan_filtering,
-                                    struct switchdev_trans *trans)
+                                    bool vlan_filtering)
 {
+       struct net_device *bridge = dsa_to_port(ds, port)->bridge_dev;
        struct gswip_priv *priv = ds->priv;
 
        /* Do not allow changing the VLAN filtering options while in bridge */
-       if (switchdev_trans_ph_prepare(trans)) {
-               struct net_device *bridge = dsa_to_port(ds, port)->bridge_dev;
-
-               if (!bridge)
-                       return 0;
-
-               if (!!(priv->port_vlan_filter & BIT(port)) != vlan_filtering)
-                       return -EIO;
-
-               return 0;
-       }
+       if (bridge && !!(priv->port_vlan_filter & BIT(port)) != vlan_filtering)
+               return -EIO;
 
        if (vlan_filtering) {
                /* Use port based VLAN tag */
@@ -781,15 +772,8 @@ static int gswip_setup(struct dsa_switch *ds)
 
        /* disable port fetch/store dma on all ports */
        for (i = 0; i < priv->hw_info->max_ports; i++) {
-               struct switchdev_trans trans;
-
-               /* Skip the prepare phase, this shouldn't return an error
-                * during setup.
-                */
-               trans.ph_prepare = false;
-
                gswip_port_disable(ds, i);
-               gswip_port_vlan_filtering(ds, i, false, &trans);
+               gswip_port_vlan_filtering(ds, i, false);
        }
 
        /* enable Switch */
index a4c814f6a4b566df7b7442ebad19bc8e1cb07544..6a9ec8a0f92f821e241a7dcf7e255121a876f749 100644 (file)
@@ -783,14 +783,10 @@ static void ksz8795_flush_dyn_mac_table(struct ksz_device *dev, int port)
 }
 
 static int ksz8795_port_vlan_filtering(struct dsa_switch *ds, int port,
-                                      bool flag,
-                                      struct switchdev_trans *trans)
+                                      bool flag)
 {
        struct ksz_device *dev = ds->priv;
 
-       if (switchdev_trans_ph_prepare(trans))
-               return 0;
-
        ksz_cfg(dev, S_MIRROR_CTRL, SW_VLAN_ENABLE, flag);
 
        return 0;
index 5a6ac0749ab0e6d3baf5a3e926055d7bdd4a2287..446c088ce5c56d935b1061f480b1046b79927874 100644 (file)
@@ -493,14 +493,10 @@ static void ksz9477_flush_dyn_mac_table(struct ksz_device *dev, int port)
 }
 
 static int ksz9477_port_vlan_filtering(struct dsa_switch *ds, int port,
-                                      bool flag,
-                                      struct switchdev_trans *trans)
+                                      bool flag)
 {
        struct ksz_device *dev = ds->priv;
 
-       if (switchdev_trans_ph_prepare(trans))
-               return 0;
-
        if (flag) {
                ksz_port_cfg(dev, port, REG_PORT_LUE_CTRL,
                             PORT_VLAN_LOOKUP_VID_0, true);
index 31d2d23bc815766a695ffa6af910254bc8bb4276..fcaddc9c937019385143ef389569113783584403 100644 (file)
@@ -1376,12 +1376,8 @@ mt7530_vlan_cmd(struct mt7530_priv *priv, enum mt7530_vlan_cmd cmd, u16 vid)
 
 static int
 mt7530_port_vlan_filtering(struct dsa_switch *ds, int port,
-                          bool vlan_filtering,
-                          struct switchdev_trans *trans)
+                          bool vlan_filtering)
 {
-       if (switchdev_trans_ph_prepare(trans))
-               return 0;
-
        if (vlan_filtering) {
                /* The port is being kept as VLAN-unaware port when bridge is
                 * set up with vlan_filtering not being set, Otherwise, the
index fb25cb87156af71c41296c42928cbe20f5751895..bbf1a71ce55cfb669a5bf3285435f1c84aeb50a1 100644 (file)
@@ -1583,16 +1583,15 @@ static int mv88e6xxx_port_check_hw_vlan(struct dsa_switch *ds, int port,
 }
 
 static int mv88e6xxx_port_vlan_filtering(struct dsa_switch *ds, int port,
-                                        bool vlan_filtering,
-                                        struct switchdev_trans *trans)
+                                        bool vlan_filtering)
 {
        struct mv88e6xxx_chip *chip = ds->priv;
        u16 mode = vlan_filtering ? MV88E6XXX_PORT_CTL2_8021Q_MODE_SECURE :
                MV88E6XXX_PORT_CTL2_8021Q_MODE_DISABLED;
        int err;
 
-       if (switchdev_trans_ph_prepare(trans))
-               return mv88e6xxx_max_vid(chip) ? 0 : -EOPNOTSUPP;
+       if (!mv88e6xxx_max_vid(chip))
+               return -EOPNOTSUPP;
 
        mv88e6xxx_reg_lock(chip);
        err = mv88e6xxx_port_set_8021q_mode(chip, port, mode);
index 216fcfbc5dafd1c11f752167c7fd1be2338edd51..8c4cd9168dbaffa672349e81b6ddf605f207bed7 100644 (file)
@@ -134,12 +134,11 @@ static int felix_vlan_prepare(struct dsa_switch *ds, int port,
                                   flags & BRIDGE_VLAN_INFO_UNTAGGED);
 }
 
-static int felix_vlan_filtering(struct dsa_switch *ds, int port, bool enabled,
-                               struct switchdev_trans *trans)
+static int felix_vlan_filtering(struct dsa_switch *ds, int port, bool enabled)
 {
        struct ocelot *ocelot = ds->priv;
 
-       return ocelot_port_vlan_filtering(ocelot, port, enabled, trans);
+       return ocelot_port_vlan_filtering(ocelot, port, enabled);
 }
 
 static void felix_vlan_add(struct dsa_switch *ds, int port,
index df99c696b6889d3d18ee148d0a889e0d2087d007..1de6473b221bdf86b1eefee29e555514fd30e1bc 100644 (file)
@@ -1294,14 +1294,10 @@ qca8k_port_fdb_dump(struct dsa_switch *ds, int port,
 }
 
 static int
-qca8k_port_vlan_filtering(struct dsa_switch *ds, int port, bool vlan_filtering,
-                         struct switchdev_trans *trans)
+qca8k_port_vlan_filtering(struct dsa_switch *ds, int port, bool vlan_filtering)
 {
        struct qca8k_priv *priv = ds->priv;
 
-       if (switchdev_trans_ph_prepare(trans))
-               return 0;
-
        if (vlan_filtering) {
                qca8k_rmw(priv, QCA8K_PORT_LOOKUP_CTRL(port),
                          QCA8K_PORT_LOOKUP_VLAN_MODE,
index 6b6a3dec09840373384e58a9a1fa11338eec6cb8..bc7bd47fb037557b6f5826b8698153bd82a9232d 100644 (file)
@@ -131,8 +131,7 @@ int rtl8366_enable_vlan(struct realtek_smi *smi, bool enable);
 int rtl8366_reset_vlan(struct realtek_smi *smi);
 int rtl8366_init_vlan(struct realtek_smi *smi);
 int rtl8366_vlan_filtering(struct dsa_switch *ds, int port,
-                          bool vlan_filtering,
-                          struct switchdev_trans *trans);
+                          bool vlan_filtering);
 int rtl8366_vlan_prepare(struct dsa_switch *ds, int port,
                         const struct switchdev_obj_port_vlan *vlan);
 void rtl8366_vlan_add(struct dsa_switch *ds, int port,
index 1a8f93112bc694298bde520435b6a70a18b8bda9..27f429aa89a6aa9cf2024da313df32053c8c10c3 100644 (file)
@@ -340,20 +340,15 @@ int rtl8366_init_vlan(struct realtek_smi *smi)
 }
 EXPORT_SYMBOL_GPL(rtl8366_init_vlan);
 
-int rtl8366_vlan_filtering(struct dsa_switch *ds, int port, bool vlan_filtering,
-                          struct switchdev_trans *trans)
+int rtl8366_vlan_filtering(struct dsa_switch *ds, int port, bool vlan_filtering)
 {
        struct realtek_smi *smi = ds->priv;
        struct rtl8366_vlan_4k vlan4k;
        int ret;
 
        /* Use VLAN nr port + 1 since VLAN0 is not valid */
-       if (switchdev_trans_ph_prepare(trans)) {
-               if (!smi->ops->is_vlan_valid(smi, port + 1))
-                       return -EINVAL;
-
-               return 0;
-       }
+       if (!smi->ops->is_vlan_valid(smi, port + 1))
+               return -EINVAL;
 
        dev_info(smi->dev, "%s filtering on port %d\n",
                 vlan_filtering ? "enable" : "disable",
index 4ebc4a5a7b355f22ac5320fe6c5131e18f319bd4..d582308c24016c07499f868734172a3eff1a9c58 100644 (file)
@@ -245,8 +245,7 @@ enum sja1105_reset_reason {
 
 int sja1105_static_config_reload(struct sja1105_private *priv,
                                 enum sja1105_reset_reason reason);
-int sja1105_vlan_filtering(struct dsa_switch *ds, int port, bool enabled,
-                          struct switchdev_trans *trans);
+int sja1105_vlan_filtering(struct dsa_switch *ds, int port, bool enabled);
 void sja1105_frame_memory_partitioning(struct sja1105_private *priv);
 
 /* From sja1105_devlink.c */
index 4a2ec395bcb00893ea207a3c4e7718014730f2a5..b4bf1b10e66cabc1d7b4d34a700a39573272492b 100644 (file)
@@ -135,7 +135,6 @@ static int sja1105_best_effort_vlan_filtering_set(struct sja1105_private *priv,
 
        rtnl_lock();
        for (port = 0; port < ds->num_ports; port++) {
-               struct switchdev_trans trans;
                struct dsa_port *dp;
 
                if (!dsa_is_user_port(ds, port))
@@ -144,13 +143,7 @@ static int sja1105_best_effort_vlan_filtering_set(struct sja1105_private *priv,
                dp = dsa_to_port(ds, port);
                vlan_filtering = dsa_port_is_vlan_filtering(dp);
 
-               trans.ph_prepare = true;
-               rc = sja1105_vlan_filtering(ds, port, vlan_filtering, &trans);
-               if (rc)
-                       break;
-
-               trans.ph_prepare = false;
-               rc = sja1105_vlan_filtering(ds, port, vlan_filtering, &trans);
+               rc = sja1105_vlan_filtering(ds, port, vlan_filtering);
                if (rc)
                        break;
        }
index 807e65ac2518a1724e6389134ce39935bc838b42..c1b7f2b0e40cbff1e565cd846ed2d84ada76511f 100644 (file)
@@ -2631,8 +2631,7 @@ static int sja1105_vlan_prepare(struct dsa_switch *ds, int port,
  * which can only be partially reconfigured at runtime (and not the TPID).
  * So a switch reset is required.
  */
-int sja1105_vlan_filtering(struct dsa_switch *ds, int port, bool enabled,
-                          struct switchdev_trans *trans)
+int sja1105_vlan_filtering(struct dsa_switch *ds, int port, bool enabled)
 {
        struct sja1105_l2_lookup_params_entry *l2_lookup_params;
        struct sja1105_general_params_entry *general_params;
@@ -2644,16 +2643,12 @@ int sja1105_vlan_filtering(struct dsa_switch *ds, int port, bool enabled,
        u16 tpid, tpid2;
        int rc;
 
-       if (switchdev_trans_ph_prepare(trans)) {
-               list_for_each_entry(rule, &priv->flow_block.rules, list) {
-                       if (rule->type == SJA1105_RULE_VL) {
-                               dev_err(ds->dev,
-                                       "Cannot change VLAN filtering with active VL rules\n");
-                               return -EBUSY;
-                       }
+       list_for_each_entry(rule, &priv->flow_block.rules, list) {
+               if (rule->type == SJA1105_RULE_VL) {
+                       dev_err(ds->dev,
+                               "Cannot change VLAN filtering with active VL rules\n");
+                       return -EBUSY;
                }
-
-               return 0;
        }
 
        if (enabled) {
index 3235458a5501733b14b2129efd4cbcfa7ed95a47..e2374a39e4f8aeca3b84b473d6783d35acfaf630 100644 (file)
@@ -580,16 +580,12 @@ int prestera_bridge_port_event(struct net_device *dev, unsigned long event,
 }
 
 static int prestera_port_attr_br_flags_set(struct prestera_port *port,
-                                          struct switchdev_trans *trans,
                                           struct net_device *dev,
                                           unsigned long flags)
 {
        struct prestera_bridge_port *br_port;
        int err;
 
-       if (switchdev_trans_ph_prepare(trans))
-               return 0;
-
        br_port = prestera_bridge_port_by_dev(port->sw->swdev, dev);
        if (!br_port)
                return 0;
@@ -608,35 +604,26 @@ static int prestera_port_attr_br_flags_set(struct prestera_port *port,
 }
 
 static int prestera_port_attr_br_ageing_set(struct prestera_port *port,
-                                           struct switchdev_trans *trans,
                                            unsigned long ageing_clock_t)
 {
        unsigned long ageing_jiffies = clock_t_to_jiffies(ageing_clock_t);
        u32 ageing_time_ms = jiffies_to_msecs(ageing_jiffies);
        struct prestera_switch *sw = port->sw;
 
-       if (switchdev_trans_ph_prepare(trans)) {
-               if (ageing_time_ms < PRESTERA_MIN_AGEING_TIME_MS ||
-                   ageing_time_ms > PRESTERA_MAX_AGEING_TIME_MS)
-                       return -ERANGE;
-               else
-                       return 0;
-       }
+       if (ageing_time_ms < PRESTERA_MIN_AGEING_TIME_MS ||
+           ageing_time_ms > PRESTERA_MAX_AGEING_TIME_MS)
+               return -ERANGE;
 
        return prestera_hw_switch_ageing_set(sw, ageing_time_ms);
 }
 
 static int prestera_port_attr_br_vlan_set(struct prestera_port *port,
-                                         struct switchdev_trans *trans,
                                          struct net_device *dev,
                                          bool vlan_enabled)
 {
        struct prestera_switch *sw = port->sw;
        struct prestera_bridge *bridge;
 
-       if (!switchdev_trans_ph_prepare(trans))
-               return 0;
-
        bridge = prestera_bridge_by_dev(sw->swdev, dev);
        if (WARN_ON(!bridge))
                return -EINVAL;
@@ -666,7 +653,6 @@ static int prestera_port_bridge_vlan_stp_set(struct prestera_port *port,
 }
 
 static int presterar_port_attr_stp_state_set(struct prestera_port *port,
-                                            struct switchdev_trans *trans,
                                             struct net_device *dev,
                                             u8 state)
 {
@@ -675,9 +661,6 @@ static int presterar_port_attr_stp_state_set(struct prestera_port *port,
        int err;
        u16 vid;
 
-       if (switchdev_trans_ph_prepare(trans))
-               return 0;
-
        br_port = prestera_bridge_port_by_dev(port->sw->swdev, dev);
        if (!br_port)
                return 0;
@@ -712,16 +695,14 @@ err_port_stp_set:
 }
 
 static int prestera_port_obj_attr_set(struct net_device *dev,
-                                     const struct switchdev_attr *attr,
-                                     struct switchdev_trans *trans)
+                                     const struct switchdev_attr *attr)
 {
        struct prestera_port *port = netdev_priv(dev);
        int err = 0;
 
        switch (attr->id) {
        case SWITCHDEV_ATTR_ID_PORT_STP_STATE:
-               err = presterar_port_attr_stp_state_set(port, trans,
-                                                       attr->orig_dev,
+               err = presterar_port_attr_stp_state_set(port, attr->orig_dev,
                                                        attr->u.stp_state);
                break;
        case SWITCHDEV_ATTR_ID_PORT_PRE_BRIDGE_FLAGS:
@@ -730,17 +711,15 @@ static int prestera_port_obj_attr_set(struct net_device *dev,
                        err = -EINVAL;
                break;
        case SWITCHDEV_ATTR_ID_PORT_BRIDGE_FLAGS:
-               err = prestera_port_attr_br_flags_set(port, trans,
-                                                     attr->orig_dev,
+               err = prestera_port_attr_br_flags_set(port, attr->orig_dev,
                                                      attr->u.brport_flags);
                break;
        case SWITCHDEV_ATTR_ID_BRIDGE_AGEING_TIME:
-               err = prestera_port_attr_br_ageing_set(port, trans,
+               err = prestera_port_attr_br_ageing_set(port,
                                                       attr->u.ageing_time);
                break;
        case SWITCHDEV_ATTR_ID_BRIDGE_VLAN_FILTERING:
-               err = prestera_port_attr_br_vlan_set(port, trans,
-                                                    attr->orig_dev,
+               err = prestera_port_attr_br_vlan_set(port, attr->orig_dev,
                                                     attr->u.vlan_filtering);
                break;
        default:
index eff5920aed06321cc2dbc66004875400afd82dbb..409c206f813fc34a106a3a2d39653751ba092b7c 100644 (file)
@@ -527,7 +527,6 @@ mlxsw_sp_port_bridge_vlan_stp_set(struct mlxsw_sp_port *mlxsw_sp_port,
 }
 
 static int mlxsw_sp_port_attr_stp_state_set(struct mlxsw_sp_port *mlxsw_sp_port,
-                                           struct switchdev_trans *trans,
                                            struct net_device *orig_dev,
                                            u8 state)
 {
@@ -535,9 +534,6 @@ static int mlxsw_sp_port_attr_stp_state_set(struct mlxsw_sp_port *mlxsw_sp_port,
        struct mlxsw_sp_bridge_vlan *bridge_vlan;
        int err;
 
-       if (switchdev_trans_ph_prepare(trans))
-               return 0;
-
        /* It's possible we failed to enslave the port, yet this
         * operation is executed due to it being deferred.
         */
@@ -659,7 +655,6 @@ err_port_bridge_vlan_learning_set:
 
 static int mlxsw_sp_port_attr_br_pre_flags_set(struct mlxsw_sp_port
                                               *mlxsw_sp_port,
-                                              struct switchdev_trans *trans,
                                               unsigned long brport_flags)
 {
        if (brport_flags & ~(BR_LEARNING | BR_FLOOD | BR_MCAST_FLOOD))
@@ -669,16 +664,12 @@ static int mlxsw_sp_port_attr_br_pre_flags_set(struct mlxsw_sp_port
 }
 
 static int mlxsw_sp_port_attr_br_flags_set(struct mlxsw_sp_port *mlxsw_sp_port,
-                                          struct switchdev_trans *trans,
                                           struct net_device *orig_dev,
                                           unsigned long brport_flags)
 {
        struct mlxsw_sp_bridge_port *bridge_port;
        int err;
 
-       if (switchdev_trans_ph_prepare(trans))
-               return 0;
-
        bridge_port = mlxsw_sp_bridge_port_find(mlxsw_sp_port->mlxsw_sp->bridge,
                                                orig_dev);
        if (!bridge_port)
@@ -724,35 +715,26 @@ static int mlxsw_sp_ageing_set(struct mlxsw_sp *mlxsw_sp, u32 ageing_time)
 }
 
 static int mlxsw_sp_port_attr_br_ageing_set(struct mlxsw_sp_port *mlxsw_sp_port,
-                                           struct switchdev_trans *trans,
                                            unsigned long ageing_clock_t)
 {
        struct mlxsw_sp *mlxsw_sp = mlxsw_sp_port->mlxsw_sp;
        unsigned long ageing_jiffies = clock_t_to_jiffies(ageing_clock_t);
        u32 ageing_time = jiffies_to_msecs(ageing_jiffies) / 1000;
 
-       if (switchdev_trans_ph_prepare(trans)) {
-               if (ageing_time < MLXSW_SP_MIN_AGEING_TIME ||
-                   ageing_time > MLXSW_SP_MAX_AGEING_TIME)
-                       return -ERANGE;
-               else
-                       return 0;
-       }
+       if (ageing_time < MLXSW_SP_MIN_AGEING_TIME ||
+           ageing_time > MLXSW_SP_MAX_AGEING_TIME)
+               return -ERANGE;
 
        return mlxsw_sp_ageing_set(mlxsw_sp, ageing_time);
 }
 
 static int mlxsw_sp_port_attr_br_vlan_set(struct mlxsw_sp_port *mlxsw_sp_port,
-                                         struct switchdev_trans *trans,
                                          struct net_device *orig_dev,
                                          bool vlan_enabled)
 {
        struct mlxsw_sp *mlxsw_sp = mlxsw_sp_port->mlxsw_sp;
        struct mlxsw_sp_bridge_device *bridge_device;
 
-       if (!switchdev_trans_ph_prepare(trans))
-               return 0;
-
        bridge_device = mlxsw_sp_bridge_device_find(mlxsw_sp->bridge, orig_dev);
        if (WARN_ON(!bridge_device))
                return -EINVAL;
@@ -765,16 +747,12 @@ static int mlxsw_sp_port_attr_br_vlan_set(struct mlxsw_sp_port *mlxsw_sp_port,
 }
 
 static int mlxsw_sp_port_attr_br_vlan_proto_set(struct mlxsw_sp_port *mlxsw_sp_port,
-                                               struct switchdev_trans *trans,
                                                struct net_device *orig_dev,
                                                u16 vlan_proto)
 {
        struct mlxsw_sp *mlxsw_sp = mlxsw_sp_port->mlxsw_sp;
        struct mlxsw_sp_bridge_device *bridge_device;
 
-       if (!switchdev_trans_ph_prepare(trans))
-               return 0;
-
        bridge_device = mlxsw_sp_bridge_device_find(mlxsw_sp->bridge, orig_dev);
        if (WARN_ON(!bridge_device))
                return -EINVAL;
@@ -784,16 +762,12 @@ static int mlxsw_sp_port_attr_br_vlan_proto_set(struct mlxsw_sp_port *mlxsw_sp_p
 }
 
 static int mlxsw_sp_port_attr_mrouter_set(struct mlxsw_sp_port *mlxsw_sp_port,
-                                         struct switchdev_trans *trans,
                                          struct net_device *orig_dev,
                                          bool is_port_mrouter)
 {
        struct mlxsw_sp_bridge_port *bridge_port;
        int err;
 
-       if (switchdev_trans_ph_prepare(trans))
-               return 0;
-
        bridge_port = mlxsw_sp_bridge_port_find(mlxsw_sp_port->mlxsw_sp->bridge,
                                                orig_dev);
        if (!bridge_port)
@@ -825,7 +799,6 @@ static bool mlxsw_sp_mc_flood(const struct mlxsw_sp_bridge_port *bridge_port)
 }
 
 static int mlxsw_sp_port_mc_disabled_set(struct mlxsw_sp_port *mlxsw_sp_port,
-                                        struct switchdev_trans *trans,
                                         struct net_device *orig_dev,
                                         bool mc_disabled)
 {
@@ -834,9 +807,6 @@ static int mlxsw_sp_port_mc_disabled_set(struct mlxsw_sp_port *mlxsw_sp_port,
        struct mlxsw_sp_bridge_port *bridge_port;
        int err;
 
-       if (switchdev_trans_ph_prepare(trans))
-               return 0;
-
        /* It's possible we failed to enslave the port, yet this
         * operation is executed due to it being deferred.
         */
@@ -896,16 +866,12 @@ mlxsw_sp_bridge_mrouter_update_mdb(struct mlxsw_sp *mlxsw_sp,
 
 static int
 mlxsw_sp_port_attr_br_mrouter_set(struct mlxsw_sp_port *mlxsw_sp_port,
-                                 struct switchdev_trans *trans,
                                  struct net_device *orig_dev,
                                  bool is_mrouter)
 {
        struct mlxsw_sp *mlxsw_sp = mlxsw_sp_port->mlxsw_sp;
        struct mlxsw_sp_bridge_device *bridge_device;
 
-       if (switchdev_trans_ph_prepare(trans))
-               return 0;
-
        /* It's possible we failed to enslave the port, yet this
         * operation is executed due to it being deferred.
         */
@@ -921,54 +887,52 @@ mlxsw_sp_port_attr_br_mrouter_set(struct mlxsw_sp_port *mlxsw_sp_port,
 }
 
 static int mlxsw_sp_port_attr_set(struct net_device *dev,
-                                 const struct switchdev_attr *attr,
-                                 struct switchdev_trans *trans)
+                                 const struct switchdev_attr *attr)
 {
        struct mlxsw_sp_port *mlxsw_sp_port = netdev_priv(dev);
        int err;
 
        switch (attr->id) {
        case SWITCHDEV_ATTR_ID_PORT_STP_STATE:
-               err = mlxsw_sp_port_attr_stp_state_set(mlxsw_sp_port, trans,
+               err = mlxsw_sp_port_attr_stp_state_set(mlxsw_sp_port,
                                                       attr->orig_dev,
                                                       attr->u.stp_state);
                break;
        case SWITCHDEV_ATTR_ID_PORT_PRE_BRIDGE_FLAGS:
                err = mlxsw_sp_port_attr_br_pre_flags_set(mlxsw_sp_port,
-                                                         trans,
                                                          attr->u.brport_flags);
                break;
        case SWITCHDEV_ATTR_ID_PORT_BRIDGE_FLAGS:
-               err = mlxsw_sp_port_attr_br_flags_set(mlxsw_sp_port, trans,
+               err = mlxsw_sp_port_attr_br_flags_set(mlxsw_sp_port,
                                                      attr->orig_dev,
                                                      attr->u.brport_flags);
                break;
        case SWITCHDEV_ATTR_ID_BRIDGE_AGEING_TIME:
-               err = mlxsw_sp_port_attr_br_ageing_set(mlxsw_sp_port, trans,
+               err = mlxsw_sp_port_attr_br_ageing_set(mlxsw_sp_port,
                                                       attr->u.ageing_time);
                break;
        case SWITCHDEV_ATTR_ID_BRIDGE_VLAN_FILTERING:
-               err = mlxsw_sp_port_attr_br_vlan_set(mlxsw_sp_port, trans,
+               err = mlxsw_sp_port_attr_br_vlan_set(mlxsw_sp_port,
                                                     attr->orig_dev,
                                                     attr->u.vlan_filtering);
                break;
        case SWITCHDEV_ATTR_ID_BRIDGE_VLAN_PROTOCOL:
-               err = mlxsw_sp_port_attr_br_vlan_proto_set(mlxsw_sp_port, trans,
+               err = mlxsw_sp_port_attr_br_vlan_proto_set(mlxsw_sp_port,
                                                           attr->orig_dev,
                                                           attr->u.vlan_protocol);
                break;
        case SWITCHDEV_ATTR_ID_PORT_MROUTER:
-               err = mlxsw_sp_port_attr_mrouter_set(mlxsw_sp_port, trans,
+               err = mlxsw_sp_port_attr_mrouter_set(mlxsw_sp_port,
                                                     attr->orig_dev,
                                                     attr->u.mrouter);
                break;
        case SWITCHDEV_ATTR_ID_BRIDGE_MC_DISABLED:
-               err = mlxsw_sp_port_mc_disabled_set(mlxsw_sp_port, trans,
+               err = mlxsw_sp_port_mc_disabled_set(mlxsw_sp_port,
                                                    attr->orig_dev,
                                                    attr->u.mc_disabled);
                break;
        case SWITCHDEV_ATTR_ID_BRIDGE_MROUTER:
-               err = mlxsw_sp_port_attr_br_mrouter_set(mlxsw_sp_port, trans,
+               err = mlxsw_sp_port_attr_br_mrouter_set(mlxsw_sp_port,
                                                        attr->orig_dev,
                                                        attr->u.mrouter);
                break;
@@ -977,8 +941,7 @@ static int mlxsw_sp_port_attr_set(struct net_device *dev,
                break;
        }
 
-       if (switchdev_trans_ph_commit(trans))
-               mlxsw_sp_span_respin(mlxsw_sp_port->mlxsw_sp);
+       mlxsw_sp_span_respin(mlxsw_sp_port->mlxsw_sp);
 
        return err;
 }
index 0b9992bd66262935f2c00adefdfe52f6cdd7d603..af620f7ce4690133e49eb516d0f19bd85b2ed7df 100644 (file)
@@ -208,25 +208,20 @@ static void ocelot_port_set_pvid(struct ocelot *ocelot, int port,
 }
 
 int ocelot_port_vlan_filtering(struct ocelot *ocelot, int port,
-                              bool vlan_aware, struct switchdev_trans *trans)
+                              bool vlan_aware)
 {
+       struct ocelot_vcap_block *block = &ocelot->block[VCAP_IS1];
        struct ocelot_port *ocelot_port = ocelot->ports[port];
+       struct ocelot_vcap_filter *filter;
        u32 val;
 
-       if (switchdev_trans_ph_prepare(trans)) {
-               struct ocelot_vcap_block *block = &ocelot->block[VCAP_IS1];
-               struct ocelot_vcap_filter *filter;
-
-               list_for_each_entry(filter, &block->rules, list) {
-                       if (filter->ingress_port_mask & BIT(port) &&
-                           filter->action.vid_replace_ena) {
-                               dev_err(ocelot->dev,
-                                       "Cannot change VLAN state with vlan modify rules active\n");
-                               return -EBUSY;
-                       }
+       list_for_each_entry(filter, &block->rules, list) {
+               if (filter->ingress_port_mask & BIT(port) &&
+                   filter->action.vid_replace_ena) {
+                       dev_err(ocelot->dev,
+                               "Cannot change VLAN state with vlan modify rules active\n");
+                       return -EBUSY;
                }
-
-               return 0;
        }
 
        ocelot_port->vlan_aware = vlan_aware;
@@ -1179,7 +1174,6 @@ int ocelot_port_bridge_leave(struct ocelot *ocelot, int port,
                             struct net_device *bridge)
 {
        struct ocelot_vlan pvid = {0}, native_vlan = {0};
-       struct switchdev_trans trans;
        int ret;
 
        ocelot->bridge_mask &= ~BIT(port);
@@ -1187,13 +1181,7 @@ int ocelot_port_bridge_leave(struct ocelot *ocelot, int port,
        if (!ocelot->bridge_mask)
                ocelot->hw_bridge_dev = NULL;
 
-       trans.ph_prepare = true;
-       ret = ocelot_port_vlan_filtering(ocelot, port, false, &trans);
-       if (ret)
-               return ret;
-
-       trans.ph_prepare = false;
-       ret = ocelot_port_vlan_filtering(ocelot, port, false, &trans);
+       ret = ocelot_port_vlan_filtering(ocelot, port, false);
        if (ret)
                return ret;
 
index 16d958a6e20664e40e71f1f68dd99289a65228ef..4fb9095be3eab95a9af9620ede4cdd480d16d733 100644 (file)
@@ -825,12 +825,8 @@ static const struct ethtool_ops ocelot_ethtool_ops = {
 };
 
 static void ocelot_port_attr_stp_state_set(struct ocelot *ocelot, int port,
-                                          struct switchdev_trans *trans,
                                           u8 state)
 {
-       if (switchdev_trans_ph_prepare(trans))
-               return;
-
        ocelot_bridge_stp_state_set(ocelot, port, state);
 }
 
@@ -858,8 +854,7 @@ static void ocelot_port_attr_mc_set(struct ocelot *ocelot, int port, bool mc)
 }
 
 static int ocelot_port_attr_set(struct net_device *dev,
-                               const struct switchdev_attr *attr,
-                               struct switchdev_trans *trans)
+                               const struct switchdev_attr *attr)
 {
        struct ocelot_port_private *priv = netdev_priv(dev);
        struct ocelot *ocelot = priv->port.ocelot;
@@ -868,15 +863,13 @@ static int ocelot_port_attr_set(struct net_device *dev,
 
        switch (attr->id) {
        case SWITCHDEV_ATTR_ID_PORT_STP_STATE:
-               ocelot_port_attr_stp_state_set(ocelot, port, trans,
-                                              attr->u.stp_state);
+               ocelot_port_attr_stp_state_set(ocelot, port, attr->u.stp_state);
                break;
        case SWITCHDEV_ATTR_ID_BRIDGE_AGEING_TIME:
                ocelot_port_attr_ageing_set(ocelot, port, attr->u.ageing_time);
                break;
        case SWITCHDEV_ATTR_ID_BRIDGE_VLAN_FILTERING:
-               ocelot_port_vlan_filtering(ocelot, port,
-                                          attr->u.vlan_filtering, trans);
+               ocelot_port_vlan_filtering(ocelot, port, attr->u.vlan_filtering);
                break;
        case SWITCHDEV_ATTR_ID_BRIDGE_MC_DISABLED:
                ocelot_port_attr_mc_set(ocelot, port, !attr->u.mc_disabled);
index 6fad25321dc5d73466e0889cc00411e30276bdde..315a6e5c0f595a4e535f5e69201be8580925f346 100644 (file)
@@ -103,15 +103,13 @@ struct rocker_world_ops {
        int (*port_attr_stp_state_set)(struct rocker_port *rocker_port,
                                       u8 state);
        int (*port_attr_bridge_flags_set)(struct rocker_port *rocker_port,
-                                         unsigned long brport_flags,
-                                         struct switchdev_trans *trans);
+                                         unsigned long brport_flags);
        int (*port_attr_bridge_flags_support_get)(const struct rocker_port *
                                                  rocker_port,
                                                  unsigned long *
                                                  p_brport_flags);
        int (*port_attr_bridge_ageing_time_set)(struct rocker_port *rocker_port,
-                                               u32 ageing_time,
-                                               struct switchdev_trans *trans);
+                                               u32 ageing_time);
        int (*port_obj_vlan_add)(struct rocker_port *rocker_port,
                                 const struct switchdev_obj_port_vlan *vlan);
        int (*port_obj_vlan_del)(struct rocker_port *rocker_port,
index 1018d3759316980cece89e99fbcffe4a577e52a0..740a715c49c6d86cfa33989d61ccf08e0a4a6663 100644 (file)
@@ -1550,17 +1550,13 @@ static void rocker_world_port_stop(struct rocker_port *rocker_port)
 }
 
 static int rocker_world_port_attr_stp_state_set(struct rocker_port *rocker_port,
-                                               u8 state,
-                                               struct switchdev_trans *trans)
+                                               u8 state)
 {
        struct rocker_world_ops *wops = rocker_port->rocker->wops;
 
        if (!wops->port_attr_stp_state_set)
                return -EOPNOTSUPP;
 
-       if (switchdev_trans_ph_prepare(trans))
-               return 0;
-
        return wops->port_attr_stp_state_set(rocker_port, state);
 }
 
@@ -1580,8 +1576,7 @@ rocker_world_port_attr_bridge_flags_support_get(const struct rocker_port *
 
 static int
 rocker_world_port_attr_pre_bridge_flags_set(struct rocker_port *rocker_port,
-                                           unsigned long brport_flags,
-                                           struct switchdev_trans *trans)
+                                           unsigned long brport_flags)
 {
        struct rocker_world_ops *wops = rocker_port->rocker->wops;
        unsigned long brport_flags_s;
@@ -1603,37 +1598,26 @@ rocker_world_port_attr_pre_bridge_flags_set(struct rocker_port *rocker_port,
 
 static int
 rocker_world_port_attr_bridge_flags_set(struct rocker_port *rocker_port,
-                                       unsigned long brport_flags,
-                                       struct switchdev_trans *trans)
+                                       unsigned long brport_flags)
 {
        struct rocker_world_ops *wops = rocker_port->rocker->wops;
 
        if (!wops->port_attr_bridge_flags_set)
                return -EOPNOTSUPP;
 
-       if (switchdev_trans_ph_prepare(trans))
-               return 0;
-
-       return wops->port_attr_bridge_flags_set(rocker_port, brport_flags,
-                                               trans);
+       return wops->port_attr_bridge_flags_set(rocker_port, brport_flags);
 }
 
 static int
 rocker_world_port_attr_bridge_ageing_time_set(struct rocker_port *rocker_port,
-                                             u32 ageing_time,
-                                             struct switchdev_trans *trans)
-
+                                             u32 ageing_time)
 {
        struct rocker_world_ops *wops = rocker_port->rocker->wops;
 
        if (!wops->port_attr_bridge_ageing_time_set)
                return -EOPNOTSUPP;
 
-       if (switchdev_trans_ph_prepare(trans))
-               return 0;
-
-       return wops->port_attr_bridge_ageing_time_set(rocker_port, ageing_time,
-                                                     trans);
+       return wops->port_attr_bridge_ageing_time_set(rocker_port, ageing_time);
 }
 
 static int
@@ -2062,8 +2046,7 @@ static const struct net_device_ops rocker_port_netdev_ops = {
  ********************/
 
 static int rocker_port_attr_set(struct net_device *dev,
-                               const struct switchdev_attr *attr,
-                               struct switchdev_trans *trans)
+                               const struct switchdev_attr *attr)
 {
        struct rocker_port *rocker_port = netdev_priv(dev);
        int err = 0;
@@ -2071,23 +2054,19 @@ static int rocker_port_attr_set(struct net_device *dev,
        switch (attr->id) {
        case SWITCHDEV_ATTR_ID_PORT_STP_STATE:
                err = rocker_world_port_attr_stp_state_set(rocker_port,
-                                                          attr->u.stp_state,
-                                                          trans);
+                                                          attr->u.stp_state);
                break;
        case SWITCHDEV_ATTR_ID_PORT_PRE_BRIDGE_FLAGS:
                err = rocker_world_port_attr_pre_bridge_flags_set(rocker_port,
-                                                             attr->u.brport_flags,
-                                                             trans);
+                                                             attr->u.brport_flags);
                break;
        case SWITCHDEV_ATTR_ID_PORT_BRIDGE_FLAGS:
                err = rocker_world_port_attr_bridge_flags_set(rocker_port,
-                                                             attr->u.brport_flags,
-                                                             trans);
+                                                             attr->u.brport_flags);
                break;
        case SWITCHDEV_ATTR_ID_BRIDGE_AGEING_TIME:
                err = rocker_world_port_attr_bridge_ageing_time_set(rocker_port,
-                                                                   attr->u.ageing_time,
-                                                                   trans);
+                                                                   attr->u.ageing_time);
                break;
        default:
                err = -EOPNOTSUPP;
@@ -2719,8 +2698,7 @@ rocker_switchdev_port_attr_set_event(struct net_device *netdev,
 {
        int err;
 
-       err = rocker_port_attr_set(netdev, port_attr_info->attr,
-                                  port_attr_info->trans);
+       err = rocker_port_attr_set(netdev, port_attr_info->attr);
 
        port_attr_info->handled = true;
        return notifier_from_errno(err);
index d9d5188b76277cb659b2e6b36b86cfb1f2c69822..d067da1ef070664b5e49495b06c72f2d73c7c9b0 100644 (file)
@@ -2488,8 +2488,7 @@ static int ofdpa_port_attr_stp_state_set(struct rocker_port *rocker_port,
 }
 
 static int ofdpa_port_attr_bridge_flags_set(struct rocker_port *rocker_port,
-                                           unsigned long brport_flags,
-                                           struct switchdev_trans *trans)
+                                           unsigned long brport_flags)
 {
        struct ofdpa_port *ofdpa_port = rocker_port->wpriv;
        unsigned long orig_flags;
@@ -2497,14 +2496,11 @@ static int ofdpa_port_attr_bridge_flags_set(struct rocker_port *rocker_port,
 
        orig_flags = ofdpa_port->brport_flags;
        ofdpa_port->brport_flags = brport_flags;
-       if ((orig_flags ^ ofdpa_port->brport_flags) & BR_LEARNING &&
-           !switchdev_trans_ph_prepare(trans))
+
+       if ((orig_flags ^ ofdpa_port->brport_flags) & BR_LEARNING)
                err = rocker_port_set_learning(ofdpa_port->rocker_port,
                                               !!(ofdpa_port->brport_flags & BR_LEARNING));
 
-       if (switchdev_trans_ph_prepare(trans))
-               ofdpa_port->brport_flags = orig_flags;
-
        return err;
 }
 
@@ -2520,18 +2516,15 @@ ofdpa_port_attr_bridge_flags_support_get(const struct rocker_port *
 
 static int
 ofdpa_port_attr_bridge_ageing_time_set(struct rocker_port *rocker_port,
-                                      u32 ageing_time,
-                                      struct switchdev_trans *trans)
+                                      u32 ageing_time)
 {
        struct ofdpa_port *ofdpa_port = rocker_port->wpriv;
        struct ofdpa *ofdpa = ofdpa_port->ofdpa;
 
-       if (!switchdev_trans_ph_prepare(trans)) {
-               ofdpa_port->ageing_time = clock_t_to_jiffies(ageing_time);
-               if (ofdpa_port->ageing_time < ofdpa->ageing_time)
-                       ofdpa->ageing_time = ofdpa_port->ageing_time;
-               mod_timer(&ofdpa_port->ofdpa->fdb_cleanup_timer, jiffies);
-       }
+       ofdpa_port->ageing_time = clock_t_to_jiffies(ageing_time);
+       if (ofdpa_port->ageing_time < ofdpa->ageing_time)
+               ofdpa->ageing_time = ofdpa_port->ageing_time;
+       mod_timer(&ofdpa_port->ofdpa->fdb_cleanup_timer, jiffies);
 
        return 0;
 }
index 3232f483c0686995dbc685465a78e67754749fa5..9967cf985728d921265385221b957df6a245f5d7 100644 (file)
@@ -24,16 +24,12 @@ struct cpsw_switchdev_event_work {
        unsigned long event;
 };
 
-static int cpsw_port_stp_state_set(struct cpsw_priv *priv,
-                                  struct switchdev_trans *trans, u8 state)
+static int cpsw_port_stp_state_set(struct cpsw_priv *priv, u8 state)
 {
        struct cpsw_common *cpsw = priv->cpsw;
        u8 cpsw_state;
        int ret = 0;
 
-       if (switchdev_trans_ph_prepare(trans))
-               return 0;
-
        switch (state) {
        case BR_STATE_FORWARDING:
                cpsw_state = ALE_PORT_STATE_FORWARD;
@@ -60,16 +56,12 @@ static int cpsw_port_stp_state_set(struct cpsw_priv *priv,
 }
 
 static int cpsw_port_attr_br_flags_set(struct cpsw_priv *priv,
-                                      struct switchdev_trans *trans,
                                       struct net_device *orig_dev,
                                       unsigned long brport_flags)
 {
        struct cpsw_common *cpsw = priv->cpsw;
        bool unreg_mcast_add = false;
 
-       if (switchdev_trans_ph_prepare(trans))
-               return 0;
-
        if (brport_flags & BR_MCAST_FLOOD)
                unreg_mcast_add = true;
        dev_dbg(priv->dev, "BR_MCAST_FLOOD: %d port %u\n",
@@ -82,7 +74,6 @@ static int cpsw_port_attr_br_flags_set(struct cpsw_priv *priv,
 }
 
 static int cpsw_port_attr_br_flags_pre_set(struct net_device *netdev,
-                                          struct switchdev_trans *trans,
                                           unsigned long flags)
 {
        if (flags & ~(BR_LEARNING | BR_MCAST_FLOOD))
@@ -92,8 +83,7 @@ static int cpsw_port_attr_br_flags_pre_set(struct net_device *netdev,
 }
 
 static int cpsw_port_attr_set(struct net_device *ndev,
-                             const struct switchdev_attr *attr,
-                             struct switchdev_trans *trans)
+                             const struct switchdev_attr *attr)
 {
        struct cpsw_priv *priv = netdev_priv(ndev);
        int ret;
@@ -102,15 +92,15 @@ static int cpsw_port_attr_set(struct net_device *ndev,
 
        switch (attr->id) {
        case SWITCHDEV_ATTR_ID_PORT_PRE_BRIDGE_FLAGS:
-               ret = cpsw_port_attr_br_flags_pre_set(ndev, trans,
+               ret = cpsw_port_attr_br_flags_pre_set(ndev,
                                                      attr->u.brport_flags);
                break;
        case SWITCHDEV_ATTR_ID_PORT_STP_STATE:
-               ret = cpsw_port_stp_state_set(priv, trans, attr->u.stp_state);
+               ret = cpsw_port_stp_state_set(priv, attr->u.stp_state);
                dev_dbg(priv->dev, "stp state: %u\n", attr->u.stp_state);
                break;
        case SWITCHDEV_ATTR_ID_PORT_BRIDGE_FLAGS:
-               ret = cpsw_port_attr_br_flags_set(priv, trans, attr->orig_dev,
+               ret = cpsw_port_attr_br_flags_set(priv, attr->orig_dev,
                                                  attr->u.brport_flags);
                break;
        default:
index 197dea9c3b42470d93cd7d36e703d62d9d493434..ca3d07fe7f58ed964f9ced9b4a740e9c22eefc28 100644 (file)
@@ -901,19 +901,14 @@ static void dpaa2_switch_teardown_irqs(struct fsl_mc_device *sw_dev)
 }
 
 static int dpaa2_switch_port_attr_stp_state_set(struct net_device *netdev,
-                                               struct switchdev_trans *trans,
                                                u8 state)
 {
        struct ethsw_port_priv *port_priv = netdev_priv(netdev);
 
-       if (switchdev_trans_ph_prepare(trans))
-               return 0;
-
        return dpaa2_switch_port_set_stp_state(port_priv, state);
 }
 
 static int dpaa2_switch_port_attr_br_flags_pre_set(struct net_device *netdev,
-                                                  struct switchdev_trans *trans,
                                                   unsigned long flags)
 {
        if (flags & ~(BR_LEARNING | BR_FLOOD))
@@ -923,15 +918,11 @@ static int dpaa2_switch_port_attr_br_flags_pre_set(struct net_device *netdev,
 }
 
 static int dpaa2_switch_port_attr_br_flags_set(struct net_device *netdev,
-                                              struct switchdev_trans *trans,
                                               unsigned long flags)
 {
        struct ethsw_port_priv *port_priv = netdev_priv(netdev);
        int err = 0;
 
-       if (switchdev_trans_ph_prepare(trans))
-               return 0;
-
        /* Learning is enabled per switch */
        err = dpaa2_switch_set_learning(port_priv->ethsw_data,
                                        !!(flags & BR_LEARNING));
@@ -945,22 +936,21 @@ exit:
 }
 
 static int dpaa2_switch_port_attr_set(struct net_device *netdev,
-                                     const struct switchdev_attr *attr,
-                                     struct switchdev_trans *trans)
+                                     const struct switchdev_attr *attr)
 {
        int err = 0;
 
        switch (attr->id) {
        case SWITCHDEV_ATTR_ID_PORT_STP_STATE:
-               err = dpaa2_switch_port_attr_stp_state_set(netdev, trans,
+               err = dpaa2_switch_port_attr_stp_state_set(netdev,
                                                           attr->u.stp_state);
                break;
        case SWITCHDEV_ATTR_ID_PORT_PRE_BRIDGE_FLAGS:
-               err = dpaa2_switch_port_attr_br_flags_pre_set(netdev, trans,
+               err = dpaa2_switch_port_attr_br_flags_pre_set(netdev,
                                                              attr->u.brport_flags);
                break;
        case SWITCHDEV_ATTR_ID_PORT_BRIDGE_FLAGS:
-               err = dpaa2_switch_port_attr_br_flags_set(netdev, trans,
+               err = dpaa2_switch_port_attr_br_flags_set(netdev,
                                                          attr->u.brport_flags);
                break;
        case SWITCHDEV_ATTR_ID_BRIDGE_VLAN_FILTERING:
@@ -1197,8 +1187,7 @@ static int dpaa2_switch_port_attr_set_event(struct net_device *netdev,
 {
        int err;
 
-       err = dpaa2_switch_port_attr_set(netdev, port_attr_info->attr,
-                                        port_attr_info->trans);
+       err = dpaa2_switch_port_attr_set(netdev, port_attr_info->attr);
 
        port_attr_info->handled = true;
        return notifier_from_errno(err);
index 9a0cab5fb7c444e0d3346f496c03d2a392af01f4..d0f0430919698548e30401b16e0db9f86be1883f 100644 (file)
@@ -565,8 +565,7 @@ struct dsa_switch_ops {
         * VLAN support
         */
        int     (*port_vlan_filtering)(struct dsa_switch *ds, int port,
-                                      bool vlan_filtering,
-                                      struct switchdev_trans *trans);
+                                      bool vlan_filtering);
        int (*port_vlan_prepare)(struct dsa_switch *ds, int port,
                                 const struct switchdev_obj_port_vlan *vlan);
        void (*port_vlan_add)(struct dsa_switch *ds, int port,
index cbe6e35d51f54e589020c986846b4d26d1bec50f..f873e2c5e125aab1955de6e0940c2a624a892e93 100644 (file)
@@ -239,7 +239,6 @@ struct switchdev_notifier_port_obj_info {
 struct switchdev_notifier_port_attr_info {
        struct switchdev_notifier_info info; /* must be first */
        const struct switchdev_attr *attr;
-       struct switchdev_trans *trans;
        bool handled;
 };
 
@@ -298,8 +297,7 @@ int switchdev_handle_port_attr_set(struct net_device *dev,
                        struct switchdev_notifier_port_attr_info *port_attr_info,
                        bool (*check_cb)(const struct net_device *dev),
                        int (*set_cb)(struct net_device *dev,
-                                     const struct switchdev_attr *attr,
-                                     struct switchdev_trans *trans));
+                                     const struct switchdev_attr *attr));
 #else
 
 static inline void switchdev_deferred_process(void)
@@ -390,8 +388,7 @@ switchdev_handle_port_attr_set(struct net_device *dev,
                        struct switchdev_notifier_port_attr_info *port_attr_info,
                        bool (*check_cb)(const struct net_device *dev),
                        int (*set_cb)(struct net_device *dev,
-                                     const struct switchdev_attr *attr,
-                                     struct switchdev_trans *trans))
+                                     const struct switchdev_attr *attr))
 {
        return 0;
 }
index 2f4cd3288bccc5ab86e0c7584d29efc41a315a26..f3db75c0172be0bd75030c63914ec0ffc893e8d2 100644 (file)
@@ -739,8 +739,7 @@ int ocelot_get_ts_info(struct ocelot *ocelot, int port,
 void ocelot_set_ageing_time(struct ocelot *ocelot, unsigned int msecs);
 void ocelot_adjust_link(struct ocelot *ocelot, int port,
                        struct phy_device *phydev);
-int ocelot_port_vlan_filtering(struct ocelot *ocelot, int port, bool enabled,
-                              struct switchdev_trans *trans);
+int ocelot_port_vlan_filtering(struct ocelot *ocelot, int port, bool enabled);
 void ocelot_bridge_stp_state_set(struct ocelot *ocelot, int port, u8 state);
 int ocelot_port_bridge_join(struct ocelot *ocelot, int port,
                            struct net_device *bridge);
index 9eaa85cc87eaa3e12629f99a3d47d1dae47ea618..3e6063bf3f176b15dfaab7143a075085ac956d83 100644 (file)
@@ -128,19 +128,16 @@ static inline struct net_device *dsa_master_find_slave(struct net_device *dev,
 }
 
 /* port.c */
-int dsa_port_set_state(struct dsa_port *dp, u8 state,
-                      struct switchdev_trans *trans);
+int dsa_port_set_state(struct dsa_port *dp, u8 state);
 int dsa_port_enable_rt(struct dsa_port *dp, struct phy_device *phy);
 int dsa_port_enable(struct dsa_port *dp, struct phy_device *phy);
 void dsa_port_disable_rt(struct dsa_port *dp);
 void dsa_port_disable(struct dsa_port *dp);
 int dsa_port_bridge_join(struct dsa_port *dp, struct net_device *br);
 void dsa_port_bridge_leave(struct dsa_port *dp, struct net_device *br);
-int dsa_port_vlan_filtering(struct dsa_port *dp, bool vlan_filtering,
-                           struct switchdev_trans *trans);
+int dsa_port_vlan_filtering(struct dsa_port *dp, bool vlan_filtering);
 bool dsa_port_skip_vlan_configuration(struct dsa_port *dp);
-int dsa_port_ageing_time(struct dsa_port *dp, clock_t ageing_clock,
-                        struct switchdev_trans *trans);
+int dsa_port_ageing_time(struct dsa_port *dp, clock_t ageing_clock);
 int dsa_port_mtu_change(struct dsa_port *dp, int new_mtu,
                        bool propagate_upstream);
 int dsa_port_fdb_add(struct dsa_port *dp, const unsigned char *addr,
@@ -152,12 +149,9 @@ int dsa_port_mdb_add(const struct dsa_port *dp,
                     const struct switchdev_obj_port_mdb *mdb);
 int dsa_port_mdb_del(const struct dsa_port *dp,
                     const struct switchdev_obj_port_mdb *mdb);
-int dsa_port_pre_bridge_flags(const struct dsa_port *dp, unsigned long flags,
-                             struct switchdev_trans *trans);
-int dsa_port_bridge_flags(const struct dsa_port *dp, unsigned long flags,
-                         struct switchdev_trans *trans);
-int dsa_port_mrouter(struct dsa_port *dp, bool mrouter,
-                    struct switchdev_trans *trans);
+int dsa_port_pre_bridge_flags(const struct dsa_port *dp, unsigned long flags);
+int dsa_port_bridge_flags(const struct dsa_port *dp, unsigned long flags);
+int dsa_port_mrouter(struct dsa_port *dp, bool mrouter);
 int dsa_port_vlan_add(struct dsa_port *dp,
                      const struct switchdev_obj_port_vlan *vlan);
 int dsa_port_vlan_del(struct dsa_port *dp,
index 6668fe188f477f52d4f6b793d46561066e946115..14bf0053ae011b74fdcc321972a6c5ce21ebf6a0 100644 (file)
@@ -40,17 +40,15 @@ static int dsa_port_notify(const struct dsa_port *dp, unsigned long e, void *v)
        return notifier_to_errno(err);
 }
 
-int dsa_port_set_state(struct dsa_port *dp, u8 state,
-                      struct switchdev_trans *trans)
+int dsa_port_set_state(struct dsa_port *dp, u8 state)
 {
        struct dsa_switch *ds = dp->ds;
        int port = dp->index;
 
-       if (switchdev_trans_ph_prepare(trans))
-               return ds->ops->port_stp_state_set ? 0 : -EOPNOTSUPP;
+       if (!ds->ops->port_stp_state_set)
+               return -EOPNOTSUPP;
 
-       if (ds->ops->port_stp_state_set)
-               ds->ops->port_stp_state_set(ds, port, state);
+       ds->ops->port_stp_state_set(ds, port, state);
 
        if (ds->ops->port_fast_age) {
                /* Fast age FDB entries or flush appropriate forwarding database
@@ -75,7 +73,7 @@ static void dsa_port_set_state_now(struct dsa_port *dp, u8 state)
 {
        int err;
 
-       err = dsa_port_set_state(dp, state, NULL);
+       err = dsa_port_set_state(dp, state);
        if (err)
                pr_err("DSA: failed to set STP state %u (%d)\n", state, err);
 }
@@ -145,7 +143,7 @@ int dsa_port_bridge_join(struct dsa_port *dp, struct net_device *br)
        int err;
 
        /* Set the flooding mode before joining the port in the switch */
-       err = dsa_port_bridge_flags(dp, BR_FLOOD | BR_MCAST_FLOOD, NULL);
+       err = dsa_port_bridge_flags(dp, BR_FLOOD | BR_MCAST_FLOOD);
        if (err)
                return err;
 
@@ -158,7 +156,7 @@ int dsa_port_bridge_join(struct dsa_port *dp, struct net_device *br)
 
        /* The bridging is rolled back on error */
        if (err) {
-               dsa_port_bridge_flags(dp, 0, NULL);
+               dsa_port_bridge_flags(dp, 0);
                dp->bridge_dev = NULL;
        }
 
@@ -185,7 +183,7 @@ void dsa_port_bridge_leave(struct dsa_port *dp, struct net_device *br)
                pr_err("DSA: failed to notify DSA_NOTIFIER_BRIDGE_LEAVE\n");
 
        /* Port is leaving the bridge, disable flooding */
-       dsa_port_bridge_flags(dp, 0, NULL);
+       dsa_port_bridge_flags(dp, 0);
 
        /* Port left the bridge, put in BR_STATE_DISABLED by the bridge layer,
         * so allow it to be in BR_STATE_FORWARDING to be kept functional
@@ -259,43 +257,36 @@ static bool dsa_port_can_apply_vlan_filtering(struct dsa_port *dp,
        return true;
 }
 
-int dsa_port_vlan_filtering(struct dsa_port *dp, bool vlan_filtering,
-                           struct switchdev_trans *trans)
+int dsa_port_vlan_filtering(struct dsa_port *dp, bool vlan_filtering)
 {
        struct dsa_switch *ds = dp->ds;
+       bool apply;
        int err;
 
-       if (switchdev_trans_ph_prepare(trans)) {
-               bool apply;
-
-               if (!ds->ops->port_vlan_filtering)
-                       return -EOPNOTSUPP;
+       if (!ds->ops->port_vlan_filtering)
+               return -EOPNOTSUPP;
 
-               /* We are called from dsa_slave_switchdev_blocking_event(),
-                * which is not under rcu_read_lock(), unlike
-                * dsa_slave_switchdev_event().
-                */
-               rcu_read_lock();
-               apply = dsa_port_can_apply_vlan_filtering(dp, vlan_filtering);
-               rcu_read_unlock();
-               if (!apply)
-                       return -EINVAL;
-       }
+       /* We are called from dsa_slave_switchdev_blocking_event(),
+        * which is not under rcu_read_lock(), unlike
+        * dsa_slave_switchdev_event().
+        */
+       rcu_read_lock();
+       apply = dsa_port_can_apply_vlan_filtering(dp, vlan_filtering);
+       rcu_read_unlock();
+       if (!apply)
+               return -EINVAL;
 
        if (dsa_port_is_vlan_filtering(dp) == vlan_filtering)
                return 0;
 
-       err = ds->ops->port_vlan_filtering(ds, dp->index, vlan_filtering,
-                                          trans);
+       err = ds->ops->port_vlan_filtering(ds, dp->index, vlan_filtering);
        if (err)
                return err;
 
-       if (switchdev_trans_ph_commit(trans)) {
-               if (ds->vlan_filtering_is_global)
-                       ds->vlan_filtering = vlan_filtering;
-               else
-                       dp->vlan_filtering = vlan_filtering;
-       }
+       if (ds->vlan_filtering_is_global)
+               ds->vlan_filtering = vlan_filtering;
+       else
+               dp->vlan_filtering = vlan_filtering;
 
        return 0;
 }
@@ -314,26 +305,29 @@ bool dsa_port_skip_vlan_configuration(struct dsa_port *dp)
                !br_vlan_enabled(dp->bridge_dev));
 }
 
-int dsa_port_ageing_time(struct dsa_port *dp, clock_t ageing_clock,
-                        struct switchdev_trans *trans)
+int dsa_port_ageing_time(struct dsa_port *dp, clock_t ageing_clock)
 {
        unsigned long ageing_jiffies = clock_t_to_jiffies(ageing_clock);
        unsigned int ageing_time = jiffies_to_msecs(ageing_jiffies);
-       struct dsa_notifier_ageing_time_info info = {
-               .ageing_time = ageing_time,
-               .trans = trans,
-       };
+       struct dsa_notifier_ageing_time_info info;
+       struct switchdev_trans trans;
+       int err;
 
-       if (switchdev_trans_ph_prepare(trans))
-               return dsa_port_notify(dp, DSA_NOTIFIER_AGEING_TIME, &info);
+       info.ageing_time = ageing_time;
+       info.trans = &trans;
+
+       trans.ph_prepare = true;
+       err = dsa_port_notify(dp, DSA_NOTIFIER_AGEING_TIME, &info);
+       if (err)
+               return err;
 
        dp->ageing_time = ageing_time;
 
+       trans.ph_prepare = false;
        return dsa_port_notify(dp, DSA_NOTIFIER_AGEING_TIME, &info);
 }
 
-int dsa_port_pre_bridge_flags(const struct dsa_port *dp, unsigned long flags,
-                             struct switchdev_trans *trans)
+int dsa_port_pre_bridge_flags(const struct dsa_port *dp, unsigned long flags)
 {
        struct dsa_switch *ds = dp->ds;
 
@@ -344,16 +338,12 @@ int dsa_port_pre_bridge_flags(const struct dsa_port *dp, unsigned long flags,
        return 0;
 }
 
-int dsa_port_bridge_flags(const struct dsa_port *dp, unsigned long flags,
-                         struct switchdev_trans *trans)
+int dsa_port_bridge_flags(const struct dsa_port *dp, unsigned long flags)
 {
        struct dsa_switch *ds = dp->ds;
        int port = dp->index;
        int err = 0;
 
-       if (switchdev_trans_ph_prepare(trans))
-               return 0;
-
        if (ds->ops->port_egress_floods)
                err = ds->ops->port_egress_floods(ds, port, flags & BR_FLOOD,
                                                  flags & BR_MCAST_FLOOD);
@@ -361,14 +351,13 @@ int dsa_port_bridge_flags(const struct dsa_port *dp, unsigned long flags,
        return err;
 }
 
-int dsa_port_mrouter(struct dsa_port *dp, bool mrouter,
-                    struct switchdev_trans *trans)
+int dsa_port_mrouter(struct dsa_port *dp, bool mrouter)
 {
        struct dsa_switch *ds = dp->ds;
        int port = dp->index;
 
-       if (switchdev_trans_ph_prepare(trans))
-               return ds->ops->port_egress_floods ? 0 : -EOPNOTSUPP;
+       if (!ds->ops->port_egress_floods)
+               return -EOPNOTSUPP;
 
        return ds->ops->port_egress_floods(ds, port, true, mrouter);
 }
index 0eefb50aae8c6239e887b708fa29aaad7080035e..7ba505825db2f6301162754908394913baaacb00 100644 (file)
@@ -268,32 +268,29 @@ static int dsa_slave_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
 }
 
 static int dsa_slave_port_attr_set(struct net_device *dev,
-                                  const struct switchdev_attr *attr,
-                                  struct switchdev_trans *trans)
+                                  const struct switchdev_attr *attr)
 {
        struct dsa_port *dp = dsa_slave_to_port(dev);
        int ret;
 
        switch (attr->id) {
        case SWITCHDEV_ATTR_ID_PORT_STP_STATE:
-               ret = dsa_port_set_state(dp, attr->u.stp_state, trans);
+               ret = dsa_port_set_state(dp, attr->u.stp_state);
                break;
        case SWITCHDEV_ATTR_ID_BRIDGE_VLAN_FILTERING:
-               ret = dsa_port_vlan_filtering(dp, attr->u.vlan_filtering,
-                                             trans);
+               ret = dsa_port_vlan_filtering(dp, attr->u.vlan_filtering);
                break;
        case SWITCHDEV_ATTR_ID_BRIDGE_AGEING_TIME:
-               ret = dsa_port_ageing_time(dp, attr->u.ageing_time, trans);
+               ret = dsa_port_ageing_time(dp, attr->u.ageing_time);
                break;
        case SWITCHDEV_ATTR_ID_PORT_PRE_BRIDGE_FLAGS:
-               ret = dsa_port_pre_bridge_flags(dp, attr->u.brport_flags,
-                                               trans);
+               ret = dsa_port_pre_bridge_flags(dp, attr->u.brport_flags);
                break;
        case SWITCHDEV_ATTR_ID_PORT_BRIDGE_FLAGS:
-               ret = dsa_port_bridge_flags(dp, attr->u.brport_flags, trans);
+               ret = dsa_port_bridge_flags(dp, attr->u.brport_flags);
                break;
        case SWITCHDEV_ATTR_ID_BRIDGE_MROUTER:
-               ret = dsa_port_mrouter(dp->cpu_dp, attr->u.mrouter, trans);
+               ret = dsa_port_mrouter(dp->cpu_dp, attr->u.mrouter);
                break;
        default:
                ret = -EOPNOTSUPP;
index 5b0bf29e1375250a22802d702ac91f2bf7ec9c0a..17979956d756e42f82cbfb66a47e6eb601c319c9 100644 (file)
@@ -139,17 +139,8 @@ static int dsa_switch_bridge_leave(struct dsa_switch *ds,
                }
        }
        if (unset_vlan_filtering) {
-               struct switchdev_trans trans;
-
-               trans.ph_prepare = true;
-               err = dsa_port_vlan_filtering(dsa_to_port(ds, info->port),
-                                             false, &trans);
-               if (err && err != EOPNOTSUPP)
-                       return err;
-
-               trans.ph_prepare = false;
                err = dsa_port_vlan_filtering(dsa_to_port(ds, info->port),
-                                             false, &trans);
+                                             false);
                if (err && err != EOPNOTSUPP)
                        return err;
        }
index 3509d362056d3abd9f3ae4ec3c15203b91369a2e..855a10feef3de8bece4b7ab1169d30dd5d3b6e48 100644 (file)
@@ -100,15 +100,13 @@ static int switchdev_deferred_enqueue(struct net_device *dev,
 
 static int switchdev_port_attr_notify(enum switchdev_notifier_type nt,
                                      struct net_device *dev,
-                                     const struct switchdev_attr *attr,
-                                     struct switchdev_trans *trans)
+                                     const struct switchdev_attr *attr)
 {
        int err;
        int rc;
 
        struct switchdev_notifier_port_attr_info attr_info = {
                .attr = attr,
-               .trans = trans,
                .handled = false,
        };
 
@@ -129,34 +127,7 @@ static int switchdev_port_attr_notify(enum switchdev_notifier_type nt,
 static int switchdev_port_attr_set_now(struct net_device *dev,
                                       const struct switchdev_attr *attr)
 {
-       struct switchdev_trans trans;
-       int err;
-
-       /* Phase I: prepare for attr set. Driver/device should fail
-        * here if there are going to be issues in the commit phase,
-        * such as lack of resources or support.  The driver/device
-        * should reserve resources needed for the commit phase here,
-        * but should not commit the attr.
-        */
-
-       trans.ph_prepare = true;
-       err = switchdev_port_attr_notify(SWITCHDEV_PORT_ATTR_SET, dev, attr,
-                                        &trans);
-       if (err)
-               return err;
-
-       /* Phase II: commit attr set.  This cannot fail as a fault
-        * of driver/device.  If it does, it's a bug in the driver/device
-        * because the driver said everythings was OK in phase I.
-        */
-
-       trans.ph_prepare = false;
-       err = switchdev_port_attr_notify(SWITCHDEV_PORT_ATTR_SET, dev, attr,
-                                        &trans);
-       WARN(err, "%s: Commit of attribute (id=%d) failed.\n",
-            dev->name, attr->id);
-
-       return err;
+       return switchdev_port_attr_notify(SWITCHDEV_PORT_ATTR_SET, dev, attr);
 }
 
 static void switchdev_port_attr_set_deferred(struct net_device *dev,
@@ -186,10 +157,6 @@ static int switchdev_port_attr_set_defer(struct net_device *dev,
  *     @dev: port device
  *     @attr: attribute to set
  *
- *     Use a 2-phase prepare-commit transaction model to ensure
- *     system is not left in a partially updated state due to
- *     failure from driver/device.
- *
  *     rtnl_lock must be held and must not be in atomic section,
  *     in case SWITCHDEV_F_DEFER flag is not set.
  */
@@ -519,8 +486,7 @@ static int __switchdev_handle_port_attr_set(struct net_device *dev,
                        struct switchdev_notifier_port_attr_info *port_attr_info,
                        bool (*check_cb)(const struct net_device *dev),
                        int (*set_cb)(struct net_device *dev,
-                                     const struct switchdev_attr *attr,
-                                     struct switchdev_trans *trans))
+                                     const struct switchdev_attr *attr))
 {
        struct net_device *lower_dev;
        struct list_head *iter;
@@ -528,8 +494,7 @@ static int __switchdev_handle_port_attr_set(struct net_device *dev,
 
        if (check_cb(dev)) {
                port_attr_info->handled = true;
-               return set_cb(dev, port_attr_info->attr,
-                             port_attr_info->trans);
+               return set_cb(dev, port_attr_info->attr);
        }
 
        /* Switch ports might be stacked under e.g. a LAG. Ignore the
@@ -556,8 +521,7 @@ int switchdev_handle_port_attr_set(struct net_device *dev,
                        struct switchdev_notifier_port_attr_info *port_attr_info,
                        bool (*check_cb)(const struct net_device *dev),
                        int (*set_cb)(struct net_device *dev,
-                                     const struct switchdev_attr *attr,
-                                     struct switchdev_trans *trans))
+                                     const struct switchdev_attr *attr))
 {
        int err;