Skip to content

Commit

Permalink
net: dsa: remove cross-chip support from the MRP notifiers
Browse files Browse the repository at this point in the history
With MRP hardware assist being supported only by the ocelot switch
family, which by design does not support cross-chip bridging, the
current match functions are at best a guess and have not been confirmed
in any way to do anything relevant in a multi-switch topology.

Drop the code and make the notifiers match only on the targeted switch
port.

Cc: Horatiu Vultur <horatiu.vultur@microchip.com>
Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>
Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Vladimir Oltean authored and David S. Miller committed Jun 21, 2021
1 parent 88faba2 commit f9bcdc3
Showing 1 changed file with 7 additions and 48 deletions.
55 changes: 7 additions & 48 deletions net/dsa/switch.c
Original file line number Diff line number Diff line change
Expand Up @@ -346,36 +346,16 @@ static int dsa_switch_change_tag_proto(struct dsa_switch *ds,
return 0;
}

static bool dsa_switch_mrp_match(struct dsa_switch *ds, int port,
struct dsa_notifier_mrp_info *info)
{
if (ds->index == info->sw_index && port == info->port)
return true;

if (dsa_is_dsa_port(ds, port))
return true;

return false;
}

static int dsa_switch_mrp_add(struct dsa_switch *ds,
struct dsa_notifier_mrp_info *info)
{
int err = 0;
int port;

if (!ds->ops->port_mrp_add)
return -EOPNOTSUPP;

for (port = 0; port < ds->num_ports; port++) {
if (dsa_switch_mrp_match(ds, port, info)) {
err = ds->ops->port_mrp_add(ds, port, info->mrp);
if (err)
break;
}
}
if (ds->index == info->sw_index)
return ds->ops->port_mrp_add(ds, info->port, info->mrp);

return err;
return 0;
}

static int dsa_switch_mrp_del(struct dsa_switch *ds,
Expand All @@ -390,39 +370,18 @@ static int dsa_switch_mrp_del(struct dsa_switch *ds,
return 0;
}

static bool
dsa_switch_mrp_ring_role_match(struct dsa_switch *ds, int port,
struct dsa_notifier_mrp_ring_role_info *info)
{
if (ds->index == info->sw_index && port == info->port)
return true;

if (dsa_is_dsa_port(ds, port))
return true;

return false;
}

static int
dsa_switch_mrp_add_ring_role(struct dsa_switch *ds,
struct dsa_notifier_mrp_ring_role_info *info)
{
int err = 0;
int port;

if (!ds->ops->port_mrp_add)
return -EOPNOTSUPP;

for (port = 0; port < ds->num_ports; port++) {
if (dsa_switch_mrp_ring_role_match(ds, port, info)) {
err = ds->ops->port_mrp_add_ring_role(ds, port,
info->mrp);
if (err)
break;
}
}
if (ds->index == info->sw_index)
return ds->ops->port_mrp_add_ring_role(ds, info->port,
info->mrp);

return err;
return 0;
}

static int
Expand Down

0 comments on commit f9bcdc3

Please sign in to comment.