Commit a68dc7b9 authored by Vladimir Oltean's avatar Vladimir Oltean Committed by David S. Miller

net: dsa: remove cross-chip support for HSR

The cross-chip notifiers for HSR are bypass operations, meaning that
even though all switches in a tree are notified, only the switch
specified in the info structure is targeted.

We can eliminate the unnecessary complexity by deleting the cross-chip
notifier logic and calling the ds->ops straight from port.c.

Cc: George McCollister <george.mccollister@gmail.com>
Signed-off-by: default avatarVladimir Oltean <vladimir.oltean@nxp.com>
Reviewed-by: default avatarGeorge McCollister <george.mccollister@gmail.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent cad69019
...@@ -25,8 +25,6 @@ enum { ...@@ -25,8 +25,6 @@ enum {
DSA_NOTIFIER_FDB_DEL, DSA_NOTIFIER_FDB_DEL,
DSA_NOTIFIER_HOST_FDB_ADD, DSA_NOTIFIER_HOST_FDB_ADD,
DSA_NOTIFIER_HOST_FDB_DEL, DSA_NOTIFIER_HOST_FDB_DEL,
DSA_NOTIFIER_HSR_JOIN,
DSA_NOTIFIER_HSR_LEAVE,
DSA_NOTIFIER_LAG_CHANGE, DSA_NOTIFIER_LAG_CHANGE,
DSA_NOTIFIER_LAG_JOIN, DSA_NOTIFIER_LAG_JOIN,
DSA_NOTIFIER_LAG_LEAVE, DSA_NOTIFIER_LAG_LEAVE,
...@@ -125,13 +123,6 @@ struct dsa_switchdev_event_work { ...@@ -125,13 +123,6 @@ struct dsa_switchdev_event_work {
bool host_addr; bool host_addr;
}; };
/* DSA_NOTIFIER_HSR_* */
struct dsa_notifier_hsr_info {
struct net_device *hsr;
int sw_index;
int port;
};
struct dsa_slave_priv { struct dsa_slave_priv {
/* Copy of CPU port xmit for faster access in slave transmit hot path */ /* Copy of CPU port xmit for faster access in slave transmit hot path */
struct sk_buff * (*xmit)(struct sk_buff *skb, struct sk_buff * (*xmit)(struct sk_buff *skb,
......
...@@ -1317,16 +1317,15 @@ EXPORT_SYMBOL_GPL(dsa_port_get_phy_sset_count); ...@@ -1317,16 +1317,15 @@ EXPORT_SYMBOL_GPL(dsa_port_get_phy_sset_count);
int dsa_port_hsr_join(struct dsa_port *dp, struct net_device *hsr) int dsa_port_hsr_join(struct dsa_port *dp, struct net_device *hsr)
{ {
struct dsa_notifier_hsr_info info = { struct dsa_switch *ds = dp->ds;
.sw_index = dp->ds->index,
.port = dp->index,
.hsr = hsr,
};
int err; int err;
if (!ds->ops->port_hsr_join)
return -EOPNOTSUPP;
dp->hsr_dev = hsr; dp->hsr_dev = hsr;
err = dsa_port_notify(dp, DSA_NOTIFIER_HSR_JOIN, &info); err = ds->ops->port_hsr_join(ds, dp->index, hsr);
if (err) if (err)
dp->hsr_dev = NULL; dp->hsr_dev = NULL;
...@@ -1335,20 +1334,18 @@ int dsa_port_hsr_join(struct dsa_port *dp, struct net_device *hsr) ...@@ -1335,20 +1334,18 @@ int dsa_port_hsr_join(struct dsa_port *dp, struct net_device *hsr)
void dsa_port_hsr_leave(struct dsa_port *dp, struct net_device *hsr) void dsa_port_hsr_leave(struct dsa_port *dp, struct net_device *hsr)
{ {
struct dsa_notifier_hsr_info info = { struct dsa_switch *ds = dp->ds;
.sw_index = dp->ds->index,
.port = dp->index,
.hsr = hsr,
};
int err; int err;
dp->hsr_dev = NULL; dp->hsr_dev = NULL;
err = dsa_port_notify(dp, DSA_NOTIFIER_HSR_LEAVE, &info); if (ds->ops->port_hsr_leave) {
if (err) err = ds->ops->port_hsr_leave(ds, dp->index, hsr);
dev_err(dp->ds->dev, if (err)
"port %d failed to notify DSA_NOTIFIER_HSR_LEAVE: %pe\n", dev_err(dp->ds->dev,
dp->index, ERR_PTR(err)); "port %d failed to leave HSR %s: %pe\n",
dp->index, hsr->name, ERR_PTR(err));
}
} }
int dsa_port_tag_8021q_vlan_add(struct dsa_port *dp, u16 vid, bool broadcast) int dsa_port_tag_8021q_vlan_add(struct dsa_port *dp, u16 vid, bool broadcast)
......
...@@ -437,24 +437,6 @@ static int dsa_switch_fdb_del(struct dsa_switch *ds, ...@@ -437,24 +437,6 @@ static int dsa_switch_fdb_del(struct dsa_switch *ds,
return dsa_port_do_fdb_del(dp, info->addr, info->vid); return dsa_port_do_fdb_del(dp, info->addr, info->vid);
} }
static int dsa_switch_hsr_join(struct dsa_switch *ds,
struct dsa_notifier_hsr_info *info)
{
if (ds->index == info->sw_index && ds->ops->port_hsr_join)
return ds->ops->port_hsr_join(ds, info->port, info->hsr);
return -EOPNOTSUPP;
}
static int dsa_switch_hsr_leave(struct dsa_switch *ds,
struct dsa_notifier_hsr_info *info)
{
if (ds->index == info->sw_index && ds->ops->port_hsr_leave)
return ds->ops->port_hsr_leave(ds, info->port, info->hsr);
return -EOPNOTSUPP;
}
static int dsa_switch_lag_change(struct dsa_switch *ds, static int dsa_switch_lag_change(struct dsa_switch *ds,
struct dsa_notifier_lag_info *info) struct dsa_notifier_lag_info *info)
{ {
...@@ -729,12 +711,6 @@ static int dsa_switch_event(struct notifier_block *nb, ...@@ -729,12 +711,6 @@ static int dsa_switch_event(struct notifier_block *nb,
case DSA_NOTIFIER_HOST_FDB_DEL: case DSA_NOTIFIER_HOST_FDB_DEL:
err = dsa_switch_host_fdb_del(ds, info); err = dsa_switch_host_fdb_del(ds, info);
break; break;
case DSA_NOTIFIER_HSR_JOIN:
err = dsa_switch_hsr_join(ds, info);
break;
case DSA_NOTIFIER_HSR_LEAVE:
err = dsa_switch_hsr_leave(ds, info);
break;
case DSA_NOTIFIER_LAG_CHANGE: case DSA_NOTIFIER_LAG_CHANGE:
err = dsa_switch_lag_change(ds, info); err = dsa_switch_lag_change(ds, info);
break; break;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment