summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid S. Miller <davem@davemloft.net>2021-03-24 12:14:08 -0700
committerDavid S. Miller <davem@davemloft.net>2021-03-24 12:14:08 -0700
commitbb11d9ac9d465cd18d3dc3ac09bb4b9ab9ddf3bd (patch)
tree5c547e0145e518519a4942573d89772888fa83e7
parent45b85e47cdd79740b858593f040431f66bf0f032 (diff)
parent5b7c0c32c90494f5aaf13f417cff5dc204575597 (diff)
Merge branch 'bridge-mrp-next'
Horatiu Vultur says: ==================== bridge: mrp: Disable roles before deleting The first patch in this series make sures that the driver is notified that the role is disabled before the MRP instance is deleted. The second patch uses this so it can simplify the driver. ==================== Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--drivers/net/ethernet/mscc/ocelot_mrp.c16
-rw-r--r--net/bridge/br_mrp.c7
2 files changed, 7 insertions, 16 deletions
diff --git a/drivers/net/ethernet/mscc/ocelot_mrp.c b/drivers/net/ethernet/mscc/ocelot_mrp.c
index c3cbcaf64bb2d..08b481a934600 100644
--- a/drivers/net/ethernet/mscc/ocelot_mrp.c
+++ b/drivers/net/ethernet/mscc/ocelot_mrp.c
@@ -154,7 +154,6 @@ int ocelot_mrp_del(struct ocelot *ocelot, int port,
const struct switchdev_obj_mrp *mrp)
{
struct ocelot_port *ocelot_port = ocelot->ports[port];
- int i;
if (!ocelot_port)
return -EOPNOTSUPP;
@@ -162,23 +161,8 @@ int ocelot_mrp_del(struct ocelot *ocelot, int port,
if (ocelot_port->mrp_ring_id != mrp->ring_id)
return 0;
- ocelot_mrp_del_vcap(ocelot, port);
- ocelot_mrp_del_vcap(ocelot, port + ocelot->num_phys_ports);
-
ocelot_port->mrp_ring_id = 0;
- for (i = 0; i < ocelot->num_phys_ports; ++i) {
- ocelot_port = ocelot->ports[i];
-
- if (!ocelot_port)
- continue;
-
- if (ocelot_port->mrp_ring_id != 0)
- goto out;
- }
-
- ocelot_mrp_del_mac(ocelot, ocelot->ports[port]);
-out:
return 0;
}
EXPORT_SYMBOL(ocelot_mrp_del);
diff --git a/net/bridge/br_mrp.c b/net/bridge/br_mrp.c
index 12487f6fe9b48..cd2b1e424e54e 100644
--- a/net/bridge/br_mrp.c
+++ b/net/bridge/br_mrp.c
@@ -411,6 +411,13 @@ static void br_mrp_del_impl(struct net_bridge *br, struct br_mrp *mrp)
cancel_delayed_work_sync(&mrp->in_test_work);
br_mrp_switchdev_send_in_test(br, mrp, 0, 0, 0);
+ /* Disable the roles */
+ br_mrp_switchdev_set_ring_role(br, mrp, BR_MRP_RING_ROLE_DISABLED);
+ p = rtnl_dereference(mrp->i_port);
+ if (p)
+ br_mrp_switchdev_set_in_role(br, mrp, mrp->in_id, mrp->ring_id,
+ BR_MRP_IN_ROLE_DISABLED);
+
br_mrp_switchdev_del(br, mrp);
/* Reset the ports */