From: Jiri Pirko <jiri@resnulli.us>
To: netdev@vger.kernel.org
Cc: davem@davemloft.net, idosch@mellanox.com, eladr@mellanox.com,
sfeldma@gmail.com, f.fainelli@gmail.com, linux@roeck-us.net,
vivien.didelot@savoirfairelinux.com
Subject: [patch net-next RFC 4/6] switchdev: move transaction phase enum under transaction structure
Date: Sat, 19 Sep 2015 14:29:09 +0200 [thread overview]
Message-ID: <1442665751-10949-5-git-send-email-jiri@resnulli.us> (raw)
In-Reply-To: <1442665751-10949-1-git-send-email-jiri@resnulli.us>
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@resnulli.us>
---
drivers/net/ethernet/rocker/rocker.c | 4 ++--
include/net/switchdev.h | 3 +--
net/dsa/slave.c | 18 ++++++++++--------
net/switchdev/switchdev.c | 12 ++++++------
4 files changed, 19 insertions(+), 18 deletions(-)
diff --git a/drivers/net/ethernet/rocker/rocker.c b/drivers/net/ethernet/rocker/rocker.c
index de1a367..9750840 100644
--- a/drivers/net/ethernet/rocker/rocker.c
+++ b/drivers/net/ethernet/rocker/rocker.c
@@ -4356,7 +4356,7 @@ static int rocker_port_attr_set(struct net_device *dev,
{
struct rocker_port *rocker_port = netdev_priv(dev);
struct rocker_trans rtrans = {
- .ph = attr->trans_ph,
+ .ph = trans->ph,
};
int err = 0;
@@ -4444,7 +4444,7 @@ static int rocker_port_obj_add(struct net_device *dev,
{
struct rocker_port *rocker_port = netdev_priv(dev);
struct rocker_trans rtrans = {
- .ph = obj->trans_ph,
+ .ph = trans->ph,
};
const struct switchdev_obj_ipv4_fib *fib4;
int err = 0;
diff --git a/include/net/switchdev.h b/include/net/switchdev.h
index 1e394f1..368a642 100644
--- a/include/net/switchdev.h
+++ b/include/net/switchdev.h
@@ -32,6 +32,7 @@ struct switchdev_trans_item {
struct switchdev_trans {
struct list_head item_list;
+ enum switchdev_trans_ph ph;
};
enum switchdev_attr_id {
@@ -43,7 +44,6 @@ enum switchdev_attr_id {
struct switchdev_attr {
enum switchdev_attr_id id;
- enum switchdev_trans_ph trans_ph;
u32 flags;
union {
struct netdev_phys_item_id ppid; /* PORT_PARENT_ID */
@@ -63,7 +63,6 @@ enum switchdev_obj_id {
struct switchdev_obj {
enum switchdev_obj_id id;
- enum switchdev_trans_ph trans_ph;
int (*cb)(struct net_device *dev, struct switchdev_obj *obj);
union {
struct switchdev_obj_vlan { /* PORT_VLAN */
diff --git a/net/dsa/slave.c b/net/dsa/slave.c
index ac76fd1..748cc63 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 a3647bf..82f8bcd 100644
--- a/net/switchdev/switchdev.c
+++ b/net/switchdev/switchdev.c
@@ -216,7 +216,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
@@ -225,7 +225,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);
}
@@ -238,7 +238,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);
@@ -302,7 +302,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
@@ -311,7 +311,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);
}
@@ -324,7 +324,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_destroy(&trans);
--
1.9.3
next prev parent reply other threads:[~2015-09-19 12:29 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-09-19 12:29 [patch net-next RFC 0/6] switchdev: introduce tranction enfra and for pre-commit split Jiri Pirko
2015-09-19 12:29 ` [patch net-next RFC 1/6] switchdev: rename "trans" to "trans_ph" Jiri Pirko
2015-09-19 12:29 ` [patch net-next RFC 2/6] switchdev: introduce transaction infrastructure for attr_set and obj_add Jiri Pirko
2015-09-19 12:29 ` [patch net-next RFC 3/6] rocker: switch to local transaction phase enum Jiri Pirko
2015-09-19 19:25 ` Vivien Didelot
2015-09-20 8:59 ` Jiri Pirko
2015-09-19 12:29 ` Jiri Pirko [this message]
2015-09-19 12:29 ` [patch net-next RFC 5/6] rocker: use switchdev transaction queue for allocated memory Jiri Pirko
2015-09-19 12:29 ` [patch net-next RFC 6/6] switchdev: split commit and prepare phase into two callbacks Jiri Pirko
2015-09-19 13:35 ` [patch net-next RFC 0/6] switchdev: introduce tranction enfra and for pre-commit split Rosen, Rami
2015-09-19 16:23 ` Jiri Pirko
2015-09-19 19:02 ` Vivien Didelot
2015-09-20 8:33 ` Jiri Pirko
2015-09-19 17:46 ` Scott Feldman
2015-09-20 8:34 ` Jiri Pirko
2015-09-21 7:23 ` Scott Feldman
2015-09-21 8:09 ` Jiri Pirko
2015-09-21 16:34 ` Scott Feldman
2015-09-21 19:06 ` Jiri Pirko
2015-09-21 17:13 ` Vivien Didelot
2015-09-21 18:25 ` Jiri Pirko
2015-09-22 1:36 ` Vivien Didelot
2015-09-22 6:12 ` Jiri Pirko
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1442665751-10949-5-git-send-email-jiri@resnulli.us \
--to=jiri@resnulli.us \
--cc=davem@davemloft.net \
--cc=eladr@mellanox.com \
--cc=f.fainelli@gmail.com \
--cc=idosch@mellanox.com \
--cc=linux@roeck-us.net \
--cc=netdev@vger.kernel.org \
--cc=sfeldma@gmail.com \
--cc=vivien.didelot@savoirfairelinux.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).