diff options
author | David S. Miller <davem@davemloft.net> | 2015-10-11 05:28:57 -0700 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2015-10-11 05:28:57 -0700 |
commit | 5010ea59e1b986d89023c0552fa38e32b519a617 (patch) | |
tree | 079695ca71bcde8fcb2b7ce89beec414d64082ce /net | |
parent | 6e86ac120e144154d345ebb5839d50b6f713149b (diff) | |
parent | 8057b3e7a1cfb4da61717ba609e1ea642bb82f9b (diff) | |
download | op-kernel-dev-5010ea59e1b986d89023c0552fa38e32b519a617.zip op-kernel-dev-5010ea59e1b986d89023c0552fa38e32b519a617.tar.gz |
Merge branch 'dsa-next'
Vivien Didelot says:
====================
net: dsa: push switchdev prepare phase in FDB ops
This patchset pushes the switchdev prepare phase for the FDB add and del
operations down to the DSA drivers. Currently only mv88e6xxx is affected.
Since the dump requires a bit of refactoring in the driver, it'll come in a
future patchset.
Changes in v2:
* forward declare switchdev structs instead of fixing the dsa.h include.
====================
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net')
-rw-r--r-- | net/dsa/slave.c | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/net/dsa/slave.c b/net/dsa/slave.c index 4f607bc..bb2bd3b 100644 --- a/net/dsa/slave.c +++ b/net/dsa/slave.c @@ -346,12 +346,15 @@ static int dsa_slave_port_fdb_add(struct net_device *dev, { struct dsa_slave_priv *p = netdev_priv(dev); struct dsa_switch *ds = p->parent; - int ret = -EOPNOTSUPP; + int ret; + + if (!ds->drv->port_fdb_prepare || !ds->drv->port_fdb_add) + return -EOPNOTSUPP; if (switchdev_trans_ph_prepare(trans)) - ret = ds->drv->port_fdb_add ? 0 : -EOPNOTSUPP; + ret = ds->drv->port_fdb_prepare(ds, p->port, fdb, trans); else - ret = ds->drv->port_fdb_add(ds, p->port, fdb->addr, fdb->vid); + ret = ds->drv->port_fdb_add(ds, p->port, fdb, trans); return ret; } @@ -364,7 +367,7 @@ static int dsa_slave_port_fdb_del(struct net_device *dev, int ret = -EOPNOTSUPP; if (ds->drv->port_fdb_del) - ret = ds->drv->port_fdb_del(ds, p->port, fdb->addr, fdb->vid); + ret = ds->drv->port_fdb_del(ds, p->port, fdb); return ret; } |