net: dsa: Remove prepare phase for FDB
The prepare phase for FDB add is unneeded because most of DSA devices can have failures during bus transactions (SPI, I2C, etc.), thus, the prepare phase cannot guarantee success of the commit stage. The support for learning FDB through notification chain, which will be introduced in the following patches, will provide the ability to notify back the bridge about successful offload. Signed-off-by: Arkadi Sharshevsky <arkadis@mellanox.com> Reviewed-by: Vivien Didelot <vivien.didelot@savoirfairelinux.com> Reviewed-by: Florian Fainelli <f.fainelli@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:

committed by
David S. Miller

parent
6c2c1dcb18
commit
1b6dd556c3
@@ -44,7 +44,6 @@ struct dsa_notifier_bridge_info {
|
||||
/* DSA_NOTIFIER_FDB_* */
|
||||
struct dsa_notifier_fdb_info {
|
||||
const struct switchdev_obj_port_fdb *fdb;
|
||||
struct switchdev_trans *trans;
|
||||
int sw_index;
|
||||
int port;
|
||||
};
|
||||
@@ -122,8 +121,7 @@ int dsa_port_vlan_filtering(struct dsa_port *dp, bool vlan_filtering,
|
||||
int dsa_port_ageing_time(struct dsa_port *dp, clock_t ageing_clock,
|
||||
struct switchdev_trans *trans);
|
||||
int dsa_port_fdb_add(struct dsa_port *dp,
|
||||
const struct switchdev_obj_port_fdb *fdb,
|
||||
struct switchdev_trans *trans);
|
||||
const struct switchdev_obj_port_fdb *fdb);
|
||||
int dsa_port_fdb_del(struct dsa_port *dp,
|
||||
const struct switchdev_obj_port_fdb *fdb);
|
||||
int dsa_port_fdb_dump(struct dsa_port *dp, struct switchdev_obj_port_fdb *fdb,
|
||||
|
@@ -147,13 +147,11 @@ int dsa_port_ageing_time(struct dsa_port *dp, clock_t ageing_clock,
|
||||
}
|
||||
|
||||
int dsa_port_fdb_add(struct dsa_port *dp,
|
||||
const struct switchdev_obj_port_fdb *fdb,
|
||||
struct switchdev_trans *trans)
|
||||
const struct switchdev_obj_port_fdb *fdb)
|
||||
{
|
||||
struct dsa_notifier_fdb_info info = {
|
||||
.sw_index = dp->ds->index,
|
||||
.port = dp->index,
|
||||
.trans = trans,
|
||||
.fdb = fdb,
|
||||
};
|
||||
|
||||
|
@@ -251,7 +251,9 @@ static int dsa_slave_port_obj_add(struct net_device *dev,
|
||||
|
||||
switch (obj->id) {
|
||||
case SWITCHDEV_OBJ_ID_PORT_FDB:
|
||||
err = dsa_port_fdb_add(dp, SWITCHDEV_OBJ_PORT_FDB(obj), trans);
|
||||
if (switchdev_trans_ph_prepare(trans))
|
||||
return 0;
|
||||
err = dsa_port_fdb_add(dp, SWITCHDEV_OBJ_PORT_FDB(obj));
|
||||
break;
|
||||
case SWITCHDEV_OBJ_ID_PORT_MDB:
|
||||
err = dsa_port_mdb_add(dp, SWITCHDEV_OBJ_PORT_MDB(obj), trans);
|
||||
|
@@ -84,23 +84,15 @@ static int dsa_switch_fdb_add(struct dsa_switch *ds,
|
||||
struct dsa_notifier_fdb_info *info)
|
||||
{
|
||||
const struct switchdev_obj_port_fdb *fdb = info->fdb;
|
||||
struct switchdev_trans *trans = info->trans;
|
||||
|
||||
/* Do not care yet about other switch chips of the fabric */
|
||||
if (ds->index != info->sw_index)
|
||||
return 0;
|
||||
|
||||
if (switchdev_trans_ph_prepare(trans)) {
|
||||
if (!ds->ops->port_fdb_prepare || !ds->ops->port_fdb_add)
|
||||
return -EOPNOTSUPP;
|
||||
if (!ds->ops->port_fdb_add)
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
return ds->ops->port_fdb_prepare(ds, info->port, fdb->addr,
|
||||
fdb->vid);
|
||||
}
|
||||
|
||||
ds->ops->port_fdb_add(ds, info->port, fdb->addr, fdb->vid);
|
||||
|
||||
return 0;
|
||||
return ds->ops->port_fdb_add(ds, info->port, fdb->addr, fdb->vid);
|
||||
}
|
||||
|
||||
static int dsa_switch_fdb_del(struct dsa_switch *ds,
|
||||
|
Reference in New Issue
Block a user