mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-25 21:24:08 +08:00
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: Vladimir Oltean <vladimir.oltean@nxp.com> Reviewed-by: George McCollister <george.mccollister@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
cad69019f2
commit
a68dc7b938
@ -25,8 +25,6 @@ enum {
|
||||
DSA_NOTIFIER_FDB_DEL,
|
||||
DSA_NOTIFIER_HOST_FDB_ADD,
|
||||
DSA_NOTIFIER_HOST_FDB_DEL,
|
||||
DSA_NOTIFIER_HSR_JOIN,
|
||||
DSA_NOTIFIER_HSR_LEAVE,
|
||||
DSA_NOTIFIER_LAG_CHANGE,
|
||||
DSA_NOTIFIER_LAG_JOIN,
|
||||
DSA_NOTIFIER_LAG_LEAVE,
|
||||
@ -125,13 +123,6 @@ struct dsa_switchdev_event_work {
|
||||
bool host_addr;
|
||||
};
|
||||
|
||||
/* DSA_NOTIFIER_HSR_* */
|
||||
struct dsa_notifier_hsr_info {
|
||||
struct net_device *hsr;
|
||||
int sw_index;
|
||||
int port;
|
||||
};
|
||||
|
||||
struct dsa_slave_priv {
|
||||
/* Copy of CPU port xmit for faster access in slave transmit hot path */
|
||||
struct sk_buff * (*xmit)(struct sk_buff *skb,
|
||||
|
@ -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)
|
||||
{
|
||||
struct dsa_notifier_hsr_info info = {
|
||||
.sw_index = dp->ds->index,
|
||||
.port = dp->index,
|
||||
.hsr = hsr,
|
||||
};
|
||||
struct dsa_switch *ds = dp->ds;
|
||||
int err;
|
||||
|
||||
if (!ds->ops->port_hsr_join)
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
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)
|
||||
dp->hsr_dev = NULL;
|
||||
|
||||
@ -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)
|
||||
{
|
||||
struct dsa_notifier_hsr_info info = {
|
||||
.sw_index = dp->ds->index,
|
||||
.port = dp->index,
|
||||
.hsr = hsr,
|
||||
};
|
||||
struct dsa_switch *ds = dp->ds;
|
||||
int err;
|
||||
|
||||
dp->hsr_dev = NULL;
|
||||
|
||||
err = dsa_port_notify(dp, DSA_NOTIFIER_HSR_LEAVE, &info);
|
||||
if (err)
|
||||
dev_err(dp->ds->dev,
|
||||
"port %d failed to notify DSA_NOTIFIER_HSR_LEAVE: %pe\n",
|
||||
dp->index, ERR_PTR(err));
|
||||
if (ds->ops->port_hsr_leave) {
|
||||
err = ds->ops->port_hsr_leave(ds, dp->index, hsr);
|
||||
if (err)
|
||||
dev_err(dp->ds->dev,
|
||||
"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)
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
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,
|
||||
struct dsa_notifier_lag_info *info)
|
||||
{
|
||||
@ -729,12 +711,6 @@ static int dsa_switch_event(struct notifier_block *nb,
|
||||
case DSA_NOTIFIER_HOST_FDB_DEL:
|
||||
err = dsa_switch_host_fdb_del(ds, info);
|
||||
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:
|
||||
err = dsa_switch_lag_change(ds, info);
|
||||
break;
|
||||
|
Loading…
Reference in New Issue
Block a user