aboutsummaryrefslogtreecommitdiffstats
path: root/net/dsa
diff options
context:
space:
mode:
authorScott Feldman <sfeldma@gmail.com>2015-05-10 12:47:51 -0400
committerDavid S. Miller <davem@davemloft.net>2015-05-12 18:43:53 -0400
commit3563606258cf3b8f02eabddb1cb45a94c44d9611 (patch)
treee8c03f3d9274f5dac86490342f9f46016e660113 /net/dsa
parentc4f20321d9680760a291991d77bc5b6d0eb2ed78 (diff)
switchdev: convert STP update to switchdev attr set
STP update is just a settable port attribute, so convert switchdev_port_stp_update to an attr set. For DSA, the prepare phase is skipped and STP updates are only done in the commit phase. This is because currently the DSA drivers don't need to allocate any memory for STP updates and the STP update will not fail to HW (unless something horrible goes wrong on the MDIO bus, in which case the prepare phase wouldn't have been able to predict anyway). Signed-off-by: Scott Feldman <sfeldma@gmail.com> Acked-by: Jiri Pirko <jiri@resnulli.us> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/dsa')
-rw-r--r--net/dsa/slave.c20
1 files changed, 19 insertions, 1 deletions
diff --git a/net/dsa/slave.c b/net/dsa/slave.c
index de705b674ac9..3fb5210e318c 100644
--- a/net/dsa/slave.c
+++ b/net/dsa/slave.c
@@ -345,6 +345,24 @@ static int dsa_slave_stp_update(struct net_device *dev, u8 state)
345 return ret; 345 return ret;
346} 346}
347 347
348static int dsa_slave_port_attr_set(struct net_device *dev,
349 struct switchdev_attr *attr)
350{
351 int ret = 0;
352
353 switch (attr->id) {
354 case SWITCHDEV_ATTR_PORT_STP_STATE:
355 if (attr->trans == SWITCHDEV_TRANS_COMMIT)
356 ret = dsa_slave_stp_update(dev, attr->stp_state);
357 break;
358 default:
359 ret = -EOPNOTSUPP;
360 break;
361 }
362
363 return ret;
364}
365
348static int dsa_slave_bridge_port_join(struct net_device *dev, 366static int dsa_slave_bridge_port_join(struct net_device *dev,
349 struct net_device *br) 367 struct net_device *br)
350{ 368{
@@ -683,7 +701,7 @@ static const struct net_device_ops dsa_slave_netdev_ops = {
683 701
684static const struct switchdev_ops dsa_slave_switchdev_ops = { 702static const struct switchdev_ops dsa_slave_switchdev_ops = {
685 .switchdev_port_attr_get = dsa_slave_port_attr_get, 703 .switchdev_port_attr_get = dsa_slave_port_attr_get,
686 .switchdev_port_stp_update = dsa_slave_stp_update, 704 .switchdev_port_attr_set = dsa_slave_port_attr_set,
687}; 705};
688 706
689static void dsa_slave_adjust_link(struct net_device *dev) 707static void dsa_slave_adjust_link(struct net_device *dev)