summaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorElad Raz <eladr@mellanox.com>2016-04-21 12:52:43 +0200
committerDavid S. Miller <davem@davemloft.net>2016-04-24 14:23:32 -0400
commit7ceb2afbd6aee4643056b47156baad6841db8e78 (patch)
tree036274876d95f82a6f64d2fb35409987522951e3 /include
parentf75cfbaddeef943aed479b80415c3dcc63ff4247 (diff)
downloadlinux-7ceb2afbd6aee4643056b47156baad6841db8e78.tar.gz
linux-7ceb2afbd6aee4643056b47156baad6841db8e78.tar.bz2
linux-7ceb2afbd6aee4643056b47156baad6841db8e78.zip
switchdev: Adding complete operation to deferred switchdev ops
When using switchdev deferred operation (SWITCHDEV_F_DEFER), the operation is executed in different context and the application doesn't have any way to get the operation real status. Adding a completion callback fixes that. This patch adds fields to switchdev_attr and switchdev_obj "complete_priv" field which is used by the "complete" callback. Application can set a complete function which will be called once the operation executed. Signed-off-by: Elad Raz <eladr@mellanox.com> Signed-off-by: Jiri Pirko <jiri@mellanox.com> Reviewed-by: Ido Schimmel <idosch@mellanox.com> Acked-by: Nikolay Aleksandrov <nikolay@cumulusnetworks.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'include')
-rw-r--r--include/net/switchdev.h4
1 files changed, 4 insertions, 0 deletions
diff --git a/include/net/switchdev.h b/include/net/switchdev.h
index d451122e8404..51d77b2ce2b2 100644
--- a/include/net/switchdev.h
+++ b/include/net/switchdev.h
@@ -54,6 +54,8 @@ struct switchdev_attr {
struct net_device *orig_dev;
enum switchdev_attr_id id;
u32 flags;
+ void *complete_priv;
+ void (*complete)(struct net_device *dev, int err, void *priv);
union {
struct netdev_phys_item_id ppid; /* PORT_PARENT_ID */
u8 stp_state; /* PORT_STP_STATE */
@@ -75,6 +77,8 @@ struct switchdev_obj {
struct net_device *orig_dev;
enum switchdev_obj_id id;
u32 flags;
+ void *complete_priv;
+ void (*complete)(struct net_device *dev, int err, void *priv);
};
/* SWITCHDEV_OBJ_ID_PORT_VLAN */