summaryrefslogtreecommitdiffstats
path: root/net
diff options
context:
space:
mode:
authorJiri Pirko <jiri@mellanox.com>2015-09-24 10:02:42 +0200
committerDavid S. Miller <davem@davemloft.net>2015-09-25 07:59:21 +0200
commitf8db83486e316ff50f97961a82b614985645508e (patch)
tree21341c02bf5bf3f38fe44f72561d8f08d2e55e8f /net
parentswitchdev: introduce transaction item queue for attr_set and obj_add (diff)
downloadlinux-f8db83486e316ff50f97961a82b614985645508e.tar.xz
linux-f8db83486e316ff50f97961a82b614985645508e.zip
switchdev: move transaction phase enum under transaction structure
Before it disappears completely, move transaction phase enum under transaction structure and make attr/obj structures a bit cleaner. Signed-off-by: Jiri Pirko <jiri@mellanox.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net')
-rw-r--r--net/dsa/slave.c18
-rw-r--r--net/switchdev/switchdev.c12
2 files changed, 16 insertions, 14 deletions
diff --git a/net/dsa/slave.c b/net/dsa/slave.c
index ac76fd15ad8b..748cc6394bbb 100644
--- a/net/dsa/slave.c
+++ b/net/dsa/slave.c
@@ -242,7 +242,8 @@ static int dsa_bridge_check_vlan_range(struct dsa_switch *ds,
}
static int dsa_slave_port_vlan_add(struct net_device *dev,
- struct switchdev_obj *obj)
+ struct switchdev_obj *obj,
+ struct switchdev_trans *trans)
{
struct switchdev_obj_vlan *vlan = &obj->u.vlan;
struct dsa_slave_priv *p = netdev_priv(dev);
@@ -250,7 +251,7 @@ static int dsa_slave_port_vlan_add(struct net_device *dev,
u16 vid;
int err;
- switch (obj->trans_ph) {
+ switch (trans->ph) {
case SWITCHDEV_TRANS_PREPARE:
if (!ds->drv->port_vlan_add || !ds->drv->port_pvid_set)
return -EOPNOTSUPP;
@@ -347,16 +348,17 @@ static int dsa_slave_port_vlan_dump(struct net_device *dev,
}
static int dsa_slave_port_fdb_add(struct net_device *dev,
- struct switchdev_obj *obj)
+ struct switchdev_obj *obj,
+ struct switchdev_trans *trans)
{
struct switchdev_obj_fdb *fdb = &obj->u.fdb;
struct dsa_slave_priv *p = netdev_priv(dev);
struct dsa_switch *ds = p->parent;
int ret = -EOPNOTSUPP;
- if (obj->trans_ph == SWITCHDEV_TRANS_PREPARE)
+ if (trans->ph == SWITCHDEV_TRANS_PREPARE)
ret = ds->drv->port_fdb_add ? 0 : -EOPNOTSUPP;
- else if (obj->trans_ph == SWITCHDEV_TRANS_COMMIT)
+ else if (trans->ph == SWITCHDEV_TRANS_COMMIT)
ret = ds->drv->port_fdb_add(ds, p->port, fdb->addr, fdb->vid);
return ret;
@@ -463,7 +465,7 @@ static int dsa_slave_port_attr_set(struct net_device *dev,
switch (attr->id) {
case SWITCHDEV_ATTR_PORT_STP_STATE:
- if (attr->trans_ph == SWITCHDEV_TRANS_COMMIT)
+ if (trans->ph == SWITCHDEV_TRANS_COMMIT)
ret = dsa_slave_stp_update(dev, attr->u.stp_state);
break;
default:
@@ -487,10 +489,10 @@ static int dsa_slave_port_obj_add(struct net_device *dev,
switch (obj->id) {
case SWITCHDEV_OBJ_PORT_FDB:
- err = dsa_slave_port_fdb_add(dev, obj);
+ err = dsa_slave_port_fdb_add(dev, obj, trans);
break;
case SWITCHDEV_OBJ_PORT_VLAN:
- err = dsa_slave_port_vlan_add(dev, obj);
+ err = dsa_slave_port_vlan_add(dev, obj, trans);
break;
default:
err = -EOPNOTSUPP;
diff --git a/net/switchdev/switchdev.c b/net/switchdev/switchdev.c
index 35e2967ffa18..d1c7d51620b1 100644
--- a/net/switchdev/switchdev.c
+++ b/net/switchdev/switchdev.c
@@ -240,7 +240,7 @@ int switchdev_port_attr_set(struct net_device *dev, struct switchdev_attr *attr)
* but should not commit the attr.
*/
- attr->trans_ph = SWITCHDEV_TRANS_PREPARE;
+ trans.ph = SWITCHDEV_TRANS_PREPARE;
err = __switchdev_port_attr_set(dev, attr, &trans);
if (err) {
/* Prepare phase failed: abort the transaction. Any
@@ -249,7 +249,7 @@ int switchdev_port_attr_set(struct net_device *dev, struct switchdev_attr *attr)
*/
if (err != -EOPNOTSUPP) {
- attr->trans_ph = SWITCHDEV_TRANS_ABORT;
+ trans.ph = SWITCHDEV_TRANS_ABORT;
__switchdev_port_attr_set(dev, attr, &trans);
switchdev_trans_items_destroy(&trans);
}
@@ -262,7 +262,7 @@ int switchdev_port_attr_set(struct net_device *dev, struct switchdev_attr *attr)
* because the driver said everythings was OK in phase I.
*/
- attr->trans_ph = SWITCHDEV_TRANS_COMMIT;
+ trans.ph = SWITCHDEV_TRANS_COMMIT;
err = __switchdev_port_attr_set(dev, attr, &trans);
WARN(err, "%s: Commit of attribute (id=%d) failed.\n",
dev->name, attr->id);
@@ -326,7 +326,7 @@ int switchdev_port_obj_add(struct net_device *dev, struct switchdev_obj *obj)
* but should not commit the obj.
*/
- obj->trans_ph = SWITCHDEV_TRANS_PREPARE;
+ trans.ph = SWITCHDEV_TRANS_PREPARE;
err = __switchdev_port_obj_add(dev, obj, &trans);
if (err) {
/* Prepare phase failed: abort the transaction. Any
@@ -335,7 +335,7 @@ int switchdev_port_obj_add(struct net_device *dev, struct switchdev_obj *obj)
*/
if (err != -EOPNOTSUPP) {
- obj->trans_ph = SWITCHDEV_TRANS_ABORT;
+ trans.ph = SWITCHDEV_TRANS_ABORT;
__switchdev_port_obj_add(dev, obj, &trans);
switchdev_trans_items_destroy(&trans);
}
@@ -348,7 +348,7 @@ int switchdev_port_obj_add(struct net_device *dev, struct switchdev_obj *obj)
* because the driver said everythings was OK in phase I.
*/
- obj->trans_ph = SWITCHDEV_TRANS_COMMIT;
+ trans.ph = SWITCHDEV_TRANS_COMMIT;
err = __switchdev_port_obj_add(dev, obj, &trans);
WARN(err, "%s: Commit of object (id=%d) failed.\n", dev->name, obj->id);
switchdev_trans_items_warn_destroy(dev, &trans);