All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH net-next 0/5] switchdev: add swdev ops
@ 2015-03-15  6:15 sfeldma
  2015-03-15  6:15 ` [PATCH net-next 1/5] " sfeldma
                   ` (6 more replies)
  0 siblings, 7 replies; 12+ messages in thread
From: sfeldma @ 2015-03-15  6:15 UTC (permalink / raw)
  To: netdev; +Cc: jiri, roopa

From: Scott Feldman <sfeldma@gmail.com>

Per discussions at netconf, move switchdev ndo ops to a new swdev_ops to
keep ndo namespace clean and maintain switchdev-related ops into one place.

There are no functional changes here; just shuffling ops around for better
organization.

Scott Feldman (5):
  switchdev: add swdev ops
  switchdev: use new swdev ops
  rocker: move to new swdev ops
  dsa: move to new swdev ops
  netdev: remove ndo ops for switchdev

 drivers/net/ethernet/rocker/rocker.c |   64 +++++++++++++++++++---------------
 include/linux/netdevice.h            |   41 ++--------------------
 include/net/switchdev.h              |   38 ++++++++++++++++++++
 net/dsa/slave.c                      |    8 +++--
 net/switchdev/switchdev.c            |   42 +++++++++++-----------
 5 files changed, 104 insertions(+), 89 deletions(-)

-- 
1.7.10.4

^ permalink raw reply	[flat|nested] 12+ messages in thread

* [PATCH net-next 1/5] switchdev: add swdev ops
  2015-03-15  6:15 [PATCH net-next 0/5] switchdev: add swdev ops sfeldma
@ 2015-03-15  6:15 ` sfeldma
  2015-03-15  6:15 ` [PATCH net-next 2/5] switchdev: use new " sfeldma
                   ` (5 subsequent siblings)
  6 siblings, 0 replies; 12+ messages in thread
From: sfeldma @ 2015-03-15  6:15 UTC (permalink / raw)
  To: netdev; +Cc: jiri, roopa

From: Scott Feldman <sfeldma@gmail.com>

As discussed at netconf, introduce swdev_ops as first step to move switchdev
ops from ndo to swdev.  This will keep switchdev from cluttering up ndo ops
space.

Signed-off-by: Scott Feldman <sfeldma@gmail.com>
---
 include/linux/netdevice.h |    3 +++
 include/net/switchdev.h   |   38 ++++++++++++++++++++++++++++++++++++++
 2 files changed, 41 insertions(+)

diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h
index ddab1a2..9e8a2a9 100644
--- a/include/linux/netdevice.h
+++ b/include/linux/netdevice.h
@@ -1577,6 +1577,9 @@ struct net_device {
 	const struct net_device_ops *netdev_ops;
 	const struct ethtool_ops *ethtool_ops;
 	const struct forwarding_accel_ops *fwd_ops;
+#ifdef CONFIG_NET_SWITCHDEV
+	const struct swdev_ops *swdev_ops;
+#endif
 
 	const struct header_ops *header_ops;
 
diff --git a/include/net/switchdev.h b/include/net/switchdev.h
index 1a9382f..e5de53f 100644
--- a/include/net/switchdev.h
+++ b/include/net/switchdev.h
@@ -14,6 +14,44 @@
 #include <linux/netdevice.h>
 #include <linux/notifier.h>
 
+struct fib_info;
+
+/**
+ * struct switchdev_ops - switchdev operations
+ *
+ * int (*swdev_parent_id_get)(struct net_device *dev,
+ *			      struct netdev_phys_item_id *psid);
+ *	Called to get an ID of the switch chip this port is part of.
+ *	If driver implements this, it indicates that it represents a port
+ *	of a switch chip.
+ *
+ * int (*swdev_port_stp_update)(struct net_device *dev, u8 state);
+ *	Called to notify switch device port of bridge port STP
+ *	state change.
+ *
+ * int (*swdev_fib_ipv4_add)(struct net_device *dev, __be32 dst,
+ *			     int dst_len, struct fib_info *fi,
+ *			     u8 tos, u8 type, u32 nlflags, u32 tb_id);
+ *	Called to add/modify IPv4 route to switch device.
+ *
+ * int (*swdev_fib_ipv4_del)(struct net_device *dev, __be32 dst,
+ *			     int dst_len, struct fib_info *fi,
+ *			     u8 tos, u8 type, u32 tb_id);
+ *	Called to delete IPv4 route from switch device.
+ */
+struct swdev_ops {
+	int	(*swdev_parent_id_get)(struct net_device *dev,
+				       struct netdev_phys_item_id *psid);
+	int	(*swdev_port_stp_update)(struct net_device *dev, u8 state);
+	int	(*swdev_fib_ipv4_add)(struct net_device *dev, __be32 dst,
+				      int dst_len, struct fib_info *fi,
+				      u8 tos, u8 type, u32 nlflags,
+				      u32 tb_id);
+	int	(*swdev_fib_ipv4_del)(struct net_device *dev, __be32 dst,
+				      int dst_len, struct fib_info *fi,
+				      u8 tos, u8 type, u32 tb_id);
+};
+
 enum netdev_switch_notifier_type {
 	NETDEV_SWITCH_FDB_ADD = 1,
 	NETDEV_SWITCH_FDB_DEL,
-- 
1.7.10.4

^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [PATCH net-next 2/5] switchdev: use new swdev ops
  2015-03-15  6:15 [PATCH net-next 0/5] switchdev: add swdev ops sfeldma
  2015-03-15  6:15 ` [PATCH net-next 1/5] " sfeldma
@ 2015-03-15  6:15 ` sfeldma
  2015-03-15 23:44   ` Simon Horman
  2015-03-15  6:15 ` [PATCH net-next 3/5] rocker: move to " sfeldma
                   ` (4 subsequent siblings)
  6 siblings, 1 reply; 12+ messages in thread
From: sfeldma @ 2015-03-15  6:15 UTC (permalink / raw)
  To: netdev; +Cc: jiri, roopa

From: Scott Feldman <sfeldma@gmail.com>

Move swdev wrappers over to new swdev ops (from previous ndo ops).  No
functional changes to the implementation.

Signed-off-by: Scott Feldman <sfeldma@gmail.com>
---
 net/switchdev/switchdev.c |   42 +++++++++++++++++++++---------------------
 1 file changed, 21 insertions(+), 21 deletions(-)

diff --git a/net/switchdev/switchdev.c b/net/switchdev/switchdev.c
index b7a2313..c9bfa00 100644
--- a/net/switchdev/switchdev.c
+++ b/net/switchdev/switchdev.c
@@ -28,11 +28,11 @@
 int netdev_switch_parent_id_get(struct net_device *dev,
 				struct netdev_phys_item_id *psid)
 {
-	const struct net_device_ops *ops = dev->netdev_ops;
+	const struct swdev_ops *ops = dev->swdev_ops;
 
-	if (!ops->ndo_switch_parent_id_get)
+	if (!ops || !ops->swdev_parent_id_get)
 		return -EOPNOTSUPP;
-	return ops->ndo_switch_parent_id_get(dev, psid);
+	return ops->swdev_parent_id_get(dev, psid);
 }
 EXPORT_SYMBOL_GPL(netdev_switch_parent_id_get);
 
@@ -46,12 +46,12 @@ EXPORT_SYMBOL_GPL(netdev_switch_parent_id_get);
  */
 int netdev_switch_port_stp_update(struct net_device *dev, u8 state)
 {
-	const struct net_device_ops *ops = dev->netdev_ops;
+	const struct swdev_ops *ops = dev->swdev_ops;
 
-	if (!ops->ndo_switch_port_stp_update)
+	if (!ops || !ops->swdev_port_stp_update)
 		return -EOPNOTSUPP;
-	WARN_ON(!ops->ndo_switch_parent_id_get);
-	return ops->ndo_switch_port_stp_update(dev, state);
+	WARN_ON(!ops->swdev_parent_id_get);
+	return ops->swdev_port_stp_update(dev, state);
 }
 EXPORT_SYMBOL_GPL(netdev_switch_port_stp_update);
 
@@ -230,17 +230,17 @@ EXPORT_SYMBOL_GPL(ndo_dflt_netdev_switch_port_bridge_dellink);
 
 static struct net_device *netdev_switch_get_lowest_dev(struct net_device *dev)
 {
-	const struct net_device_ops *ops = dev->netdev_ops;
+	const struct swdev_ops *ops = dev->swdev_ops;
 	struct net_device *lower_dev;
 	struct net_device *port_dev;
 	struct list_head *iter;
 
 	/* Recusively search down until we find a sw port dev.
-	 * (A sw port dev supports ndo_switch_parent_id_get).
+	 * (A sw port dev supports swdev_parent_id_get).
 	 */
 
 	if (dev->features & NETIF_F_HW_SWITCH_OFFLOAD &&
-	    ops->ndo_switch_parent_id_get)
+	    ops && ops->swdev_parent_id_get)
 		return dev;
 
 	netdev_for_each_lower_dev(dev, lower_dev, iter) {
@@ -304,7 +304,7 @@ int netdev_switch_fib_ipv4_add(u32 dst, int dst_len, struct fib_info *fi,
 			       u8 tos, u8 type, u32 nlflags, u32 tb_id)
 {
 	struct net_device *dev;
-	const struct net_device_ops *ops;
+	const struct swdev_ops *ops;
 	int err = 0;
 
 	/* Don't offload route if using custom ip rules or if
@@ -322,12 +322,12 @@ int netdev_switch_fib_ipv4_add(u32 dst, int dst_len, struct fib_info *fi,
 	dev = netdev_switch_get_dev_by_nhs(fi);
 	if (!dev)
 		return 0;
-	ops = dev->netdev_ops;
+	ops = dev->swdev_ops;
 
-	if (ops->ndo_switch_fib_ipv4_add) {
-		err = ops->ndo_switch_fib_ipv4_add(dev, htonl(dst), dst_len,
-						   fi, tos, type, nlflags,
-						   tb_id);
+	if (ops->swdev_fib_ipv4_add) {
+		err = ops->swdev_fib_ipv4_add(dev, htonl(dst), dst_len,
+					      fi, tos, type, nlflags,
+					      tb_id);
 		if (!err)
 			fi->fib_flags |= RTNH_F_EXTERNAL;
 	}
@@ -352,7 +352,7 @@ int netdev_switch_fib_ipv4_del(u32 dst, int dst_len, struct fib_info *fi,
 			       u8 tos, u8 type, u32 tb_id)
 {
 	struct net_device *dev;
-	const struct net_device_ops *ops;
+	const struct swdev_ops *ops;
 	int err = 0;
 
 	if (!(fi->fib_flags & RTNH_F_EXTERNAL))
@@ -361,11 +361,11 @@ int netdev_switch_fib_ipv4_del(u32 dst, int dst_len, struct fib_info *fi,
 	dev = netdev_switch_get_dev_by_nhs(fi);
 	if (!dev)
 		return 0;
-	ops = dev->netdev_ops;
+	ops = dev->swdev_ops;
 
-	if (ops->ndo_switch_fib_ipv4_del) {
-		err = ops->ndo_switch_fib_ipv4_del(dev, htonl(dst), dst_len,
-						   fi, tos, type, tb_id);
+	if (ops->swdev_fib_ipv4_del) {
+		err = ops->swdev_fib_ipv4_del(dev, htonl(dst), dst_len,
+					      fi, tos, type, tb_id);
 		if (!err)
 			fi->fib_flags &= ~RTNH_F_EXTERNAL;
 	}
-- 
1.7.10.4

^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [PATCH net-next 3/5] rocker: move to new swdev ops
  2015-03-15  6:15 [PATCH net-next 0/5] switchdev: add swdev ops sfeldma
  2015-03-15  6:15 ` [PATCH net-next 1/5] " sfeldma
  2015-03-15  6:15 ` [PATCH net-next 2/5] switchdev: use new " sfeldma
@ 2015-03-15  6:15 ` sfeldma
  2015-03-15  6:15 ` [PATCH net-next 4/5] dsa: " sfeldma
                   ` (3 subsequent siblings)
  6 siblings, 0 replies; 12+ messages in thread
From: sfeldma @ 2015-03-15  6:15 UTC (permalink / raw)
  To: netdev; +Cc: jiri, roopa

From: Scott Feldman <sfeldma@gmail.com>

Signed-off-by: Scott Feldman <sfeldma@gmail.com>
---
 drivers/net/ethernet/rocker/rocker.c |   64 +++++++++++++++++++---------------
 1 file changed, 36 insertions(+), 28 deletions(-)

diff --git a/drivers/net/ethernet/rocker/rocker.c b/drivers/net/ethernet/rocker/rocker.c
index 223348d..bc5f27a 100644
--- a/drivers/net/ethernet/rocker/rocker.c
+++ b/drivers/net/ethernet/rocker/rocker.c
@@ -4131,8 +4131,26 @@ static int rocker_port_bridge_getlink(struct sk_buff *skb, u32 pid, u32 seq,
 				       rocker_port->brport_flags, mask);
 }
 
-static int rocker_port_switch_parent_id_get(struct net_device *dev,
-					    struct netdev_phys_item_id *psid)
+static const struct net_device_ops rocker_port_netdev_ops = {
+	.ndo_open			= rocker_port_open,
+	.ndo_stop			= rocker_port_stop,
+	.ndo_start_xmit			= rocker_port_xmit,
+	.ndo_set_mac_address		= rocker_port_set_mac_address,
+	.ndo_vlan_rx_add_vid		= rocker_port_vlan_rx_add_vid,
+	.ndo_vlan_rx_kill_vid		= rocker_port_vlan_rx_kill_vid,
+	.ndo_fdb_add			= rocker_port_fdb_add,
+	.ndo_fdb_del			= rocker_port_fdb_del,
+	.ndo_fdb_dump			= rocker_port_fdb_dump,
+	.ndo_bridge_setlink		= rocker_port_bridge_setlink,
+	.ndo_bridge_getlink		= rocker_port_bridge_getlink,
+};
+
+/********************
+ * swdev interface
+ ********************/
+
+static int rocker_port_swdev_parent_id_get(struct net_device *dev,
+					   struct netdev_phys_item_id *psid)
 {
 	struct rocker_port *rocker_port = netdev_priv(dev);
 	struct rocker *rocker = rocker_port->rocker;
@@ -4142,18 +4160,18 @@ static int rocker_port_switch_parent_id_get(struct net_device *dev,
 	return 0;
 }
 
-static int rocker_port_switch_port_stp_update(struct net_device *dev, u8 state)
+static int rocker_port_swdev_port_stp_update(struct net_device *dev, u8 state)
 {
 	struct rocker_port *rocker_port = netdev_priv(dev);
 
 	return rocker_port_stp_update(rocker_port, state);
 }
 
-static int rocker_port_switch_fib_ipv4_add(struct net_device *dev,
-					   __be32 dst, int dst_len,
-					   struct fib_info *fi,
-					   u8 tos, u8 type,
-					   u32 nlflags, u32 tb_id)
+static int rocker_port_swdev_fib_ipv4_add(struct net_device *dev,
+					  __be32 dst, int dst_len,
+					  struct fib_info *fi,
+					  u8 tos, u8 type,
+					  u32 nlflags, u32 tb_id)
 {
 	struct rocker_port *rocker_port = netdev_priv(dev);
 	int flags = 0;
@@ -4162,10 +4180,10 @@ static int rocker_port_switch_fib_ipv4_add(struct net_device *dev,
 				    fi, tb_id, flags);
 }
 
-static int rocker_port_switch_fib_ipv4_del(struct net_device *dev,
-					   __be32 dst, int dst_len,
-					   struct fib_info *fi,
-					   u8 tos, u8 type, u32 tb_id)
+static int rocker_port_swdev_fib_ipv4_del(struct net_device *dev,
+					  __be32 dst, int dst_len,
+					  struct fib_info *fi,
+					  u8 tos, u8 type, u32 tb_id)
 {
 	struct rocker_port *rocker_port = netdev_priv(dev);
 	int flags = ROCKER_OP_FLAG_REMOVE;
@@ -4174,22 +4192,11 @@ static int rocker_port_switch_fib_ipv4_del(struct net_device *dev,
 				    fi, tb_id, flags);
 }
 
-static const struct net_device_ops rocker_port_netdev_ops = {
-	.ndo_open			= rocker_port_open,
-	.ndo_stop			= rocker_port_stop,
-	.ndo_start_xmit			= rocker_port_xmit,
-	.ndo_set_mac_address		= rocker_port_set_mac_address,
-	.ndo_vlan_rx_add_vid		= rocker_port_vlan_rx_add_vid,
-	.ndo_vlan_rx_kill_vid		= rocker_port_vlan_rx_kill_vid,
-	.ndo_fdb_add			= rocker_port_fdb_add,
-	.ndo_fdb_del			= rocker_port_fdb_del,
-	.ndo_fdb_dump			= rocker_port_fdb_dump,
-	.ndo_bridge_setlink		= rocker_port_bridge_setlink,
-	.ndo_bridge_getlink		= rocker_port_bridge_getlink,
-	.ndo_switch_parent_id_get	= rocker_port_switch_parent_id_get,
-	.ndo_switch_port_stp_update	= rocker_port_switch_port_stp_update,
-	.ndo_switch_fib_ipv4_add	= rocker_port_switch_fib_ipv4_add,
-	.ndo_switch_fib_ipv4_del	= rocker_port_switch_fib_ipv4_del,
+static const struct swdev_ops rocker_port_swdev_ops = {
+	.swdev_parent_id_get		= rocker_port_swdev_parent_id_get,
+	.swdev_port_stp_update		= rocker_port_swdev_port_stp_update,
+	.swdev_fib_ipv4_add		= rocker_port_swdev_fib_ipv4_add,
+	.swdev_fib_ipv4_del		= rocker_port_swdev_fib_ipv4_del,
 };
 
 /********************
@@ -4544,6 +4551,7 @@ static int rocker_probe_port(struct rocker *rocker, unsigned int port_number)
 	rocker_port_dev_addr_init(rocker, rocker_port);
 	dev->netdev_ops = &rocker_port_netdev_ops;
 	dev->ethtool_ops = &rocker_port_ethtool_ops;
+	dev->swdev_ops = &rocker_port_swdev_ops;
 	netif_napi_add(dev, &rocker_port->napi_tx, rocker_port_poll_tx,
 		       NAPI_POLL_WEIGHT);
 	netif_napi_add(dev, &rocker_port->napi_rx, rocker_port_poll_rx,
-- 
1.7.10.4

^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [PATCH net-next 4/5] dsa: move to new swdev ops
  2015-03-15  6:15 [PATCH net-next 0/5] switchdev: add swdev ops sfeldma
                   ` (2 preceding siblings ...)
  2015-03-15  6:15 ` [PATCH net-next 3/5] rocker: move to " sfeldma
@ 2015-03-15  6:15 ` sfeldma
  2015-03-15  6:15 ` [PATCH net-next 5/5] netdev: remove ndo ops for switchdev sfeldma
                   ` (2 subsequent siblings)
  6 siblings, 0 replies; 12+ messages in thread
From: sfeldma @ 2015-03-15  6:15 UTC (permalink / raw)
  To: netdev; +Cc: jiri, roopa

From: Scott Feldman <sfeldma@gmail.com>

Signed-off-by: Scott Feldman <sfeldma@gmail.com>
---
 net/dsa/slave.c |    8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/net/dsa/slave.c b/net/dsa/slave.c
index 6511552..2138d99 100644
--- a/net/dsa/slave.c
+++ b/net/dsa/slave.c
@@ -572,8 +572,11 @@ static const struct net_device_ops dsa_slave_netdev_ops = {
 	.ndo_set_rx_mode	= dsa_slave_set_rx_mode,
 	.ndo_set_mac_address	= dsa_slave_set_mac_address,
 	.ndo_do_ioctl		= dsa_slave_ioctl,
-	.ndo_switch_parent_id_get = dsa_slave_parent_id_get,
-	.ndo_switch_port_stp_update = dsa_slave_stp_update,
+};
+
+static const struct swdev_ops dsa_slave_swdev_ops = {
+	.swdev_parent_id_get = dsa_slave_parent_id_get,
+	.swdev_port_stp_update = dsa_slave_stp_update,
 };
 
 static void dsa_slave_adjust_link(struct net_device *dev)
@@ -755,6 +758,7 @@ int dsa_slave_create(struct dsa_switch *ds, struct device *parent,
 	eth_hw_addr_inherit(slave_dev, master);
 	slave_dev->tx_queue_len = 0;
 	slave_dev->netdev_ops = &dsa_slave_netdev_ops;
+	slave_dev->swdev_ops = &dsa_slave_swdev_ops;
 
 	SET_NETDEV_DEV(slave_dev, parent);
 	slave_dev->dev.of_node = ds->pd->port_dn[port];
-- 
1.7.10.4

^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [PATCH net-next 5/5] netdev: remove ndo ops for switchdev
  2015-03-15  6:15 [PATCH net-next 0/5] switchdev: add swdev ops sfeldma
                   ` (3 preceding siblings ...)
  2015-03-15  6:15 ` [PATCH net-next 4/5] dsa: " sfeldma
@ 2015-03-15  6:15 ` sfeldma
  2015-03-15 17:03 ` [PATCH net-next 0/5] switchdev: add swdev ops Jiri Pirko
  2015-03-16  0:00 ` David Miller
  6 siblings, 0 replies; 12+ messages in thread
From: sfeldma @ 2015-03-15  6:15 UTC (permalink / raw)
  To: netdev; +Cc: jiri, roopa

From: Scott Feldman <sfeldma@gmail.com>

Signed-off-by: Scott Feldman <sfeldma@gmail.com>
---
 include/linux/netdevice.h |   38 --------------------------------------
 1 file changed, 38 deletions(-)

diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h
index 9e8a2a9..dd1d069 100644
--- a/include/linux/netdevice.h
+++ b/include/linux/netdevice.h
@@ -768,8 +768,6 @@ struct netdev_phys_item_id {
 typedef u16 (*select_queue_fallback_t)(struct net_device *dev,
 				       struct sk_buff *skb);
 
-struct fib_info;
-
 /*
  * This structure defines the management hooks for network devices.
  * The following hooks can be defined; unless noted otherwise, they are
@@ -1024,23 +1022,6 @@ struct fib_info;
  *	be otherwise expressed by feature flags. The check is called with
  *	the set of features that the stack has calculated and it returns
  *	those the driver believes to be appropriate.
- *
- * int (*ndo_switch_parent_id_get)(struct net_device *dev,
- *				   struct netdev_phys_item_id *psid);
- *	Called to get an ID of the switch chip this port is part of.
- *	If driver implements this, it indicates that it represents a port
- *	of a switch chip.
- * int (*ndo_switch_port_stp_update)(struct net_device *dev, u8 state);
- *	Called to notify switch device port of bridge port STP
- *	state change.
- * int (*ndo_sw_parent_fib_ipv4_add)(struct net_device *dev, __be32 dst,
- *				     int dst_len, struct fib_info *fi,
- *				     u8 tos, u8 type, u32 nlflags, u32 tb_id);
- *	Called to add/modify IPv4 route to switch device.
- * int (*ndo_sw_parent_fib_ipv4_del)(struct net_device *dev, __be32 dst,
- *				     int dst_len, struct fib_info *fi,
- *				     u8 tos, u8 type, u32 tb_id);
- *	Called to delete IPv4 route from switch device.
  */
 struct net_device_ops {
 	int			(*ndo_init)(struct net_device *dev);
@@ -1197,25 +1178,6 @@ struct net_device_ops {
 	netdev_features_t	(*ndo_features_check) (struct sk_buff *skb,
 						       struct net_device *dev,
 						       netdev_features_t features);
-#ifdef CONFIG_NET_SWITCHDEV
-	int			(*ndo_switch_parent_id_get)(struct net_device *dev,
-							    struct netdev_phys_item_id *psid);
-	int			(*ndo_switch_port_stp_update)(struct net_device *dev,
-							      u8 state);
-	int			(*ndo_switch_fib_ipv4_add)(struct net_device *dev,
-							   __be32 dst,
-							   int dst_len,
-							   struct fib_info *fi,
-							   u8 tos, u8 type,
-							   u32 nlflags,
-							   u32 tb_id);
-	int			(*ndo_switch_fib_ipv4_del)(struct net_device *dev,
-							   __be32 dst,
-							   int dst_len,
-							   struct fib_info *fi,
-							   u8 tos, u8 type,
-							   u32 tb_id);
-#endif
 };
 
 /**
-- 
1.7.10.4

^ permalink raw reply related	[flat|nested] 12+ messages in thread

* Re: [PATCH net-next 0/5] switchdev: add swdev ops
  2015-03-15  6:15 [PATCH net-next 0/5] switchdev: add swdev ops sfeldma
                   ` (4 preceding siblings ...)
  2015-03-15  6:15 ` [PATCH net-next 5/5] netdev: remove ndo ops for switchdev sfeldma
@ 2015-03-15 17:03 ` Jiri Pirko
  2015-03-15 17:56   ` Scott Feldman
  2015-03-16  0:00 ` David Miller
  6 siblings, 1 reply; 12+ messages in thread
From: Jiri Pirko @ 2015-03-15 17:03 UTC (permalink / raw)
  To: sfeldma; +Cc: netdev, roopa

Sun, Mar 15, 2015 at 07:15:02AM CET, sfeldma@gmail.com wrote:
>From: Scott Feldman <sfeldma@gmail.com>
>
>Per discussions at netconf, move switchdev ndo ops to a new swdev_ops to
>keep ndo namespace clean and maintain switchdev-related ops into one place.
>
>There are no functional changes here; just shuffling ops around for better
>organization.

Hmm, I'm not sure this is the right approach. I think we do not need
only switchdev ops to be pushed out. There are many more ndos that could
be pushed out as well. What I'm thinking about is some more generic ndo
struct partitioning. Have to think about the actual implementation some more.

Jiri

>
>Scott Feldman (5):
>  switchdev: add swdev ops
>  switchdev: use new swdev ops
>  rocker: move to new swdev ops
>  dsa: move to new swdev ops
>  netdev: remove ndo ops for switchdev
>
> drivers/net/ethernet/rocker/rocker.c |   64 +++++++++++++++++++---------------
> include/linux/netdevice.h            |   41 ++--------------------
> include/net/switchdev.h              |   38 ++++++++++++++++++++
> net/dsa/slave.c                      |    8 +++--
> net/switchdev/switchdev.c            |   42 +++++++++++-----------
> 5 files changed, 104 insertions(+), 89 deletions(-)
>
>-- 
>1.7.10.4
>

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH net-next 0/5] switchdev: add swdev ops
  2015-03-15 17:03 ` [PATCH net-next 0/5] switchdev: add swdev ops Jiri Pirko
@ 2015-03-15 17:56   ` Scott Feldman
  0 siblings, 0 replies; 12+ messages in thread
From: Scott Feldman @ 2015-03-15 17:56 UTC (permalink / raw)
  To: Jiri Pirko; +Cc: Netdev, Roopa Prabhu

On Sun, Mar 15, 2015 at 10:03 AM, Jiri Pirko <jiri@resnulli.us> wrote:
> Sun, Mar 15, 2015 at 07:15:02AM CET, sfeldma@gmail.com wrote:
>>From: Scott Feldman <sfeldma@gmail.com>
>>
>>Per discussions at netconf, move switchdev ndo ops to a new swdev_ops to
>>keep ndo namespace clean and maintain switchdev-related ops into one place.
>>
>>There are no functional changes here; just shuffling ops around for better
>>organization.
>
> Hmm, I'm not sure this is the right approach. I think we do not need
> only switchdev ops to be pushed out. There are many more ndos that could
> be pushed out as well. What I'm thinking about is some more generic ndo
> struct partitioning. Have to think about the actual implementation some more.

I couldn't see a way to make a more generic ndo struct without casting
args to void * and back, or using a big overlay union.  I may be
missing your idea; interested in what you come up with.

In the meantime, can we go with this simple partitioning?

-scott

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH net-next 2/5] switchdev: use new swdev ops
  2015-03-15  6:15 ` [PATCH net-next 2/5] switchdev: use new " sfeldma
@ 2015-03-15 23:44   ` Simon Horman
  2015-03-16  0:43     ` Scott Feldman
  0 siblings, 1 reply; 12+ messages in thread
From: Simon Horman @ 2015-03-15 23:44 UTC (permalink / raw)
  To: sfeldma; +Cc: netdev, jiri, roopa

Hi Scott,

On Sat, Mar 14, 2015 at 11:15:04PM -0700, sfeldma@gmail.com wrote:
> From: Scott Feldman <sfeldma@gmail.com>
> 
> Move swdev wrappers over to new swdev ops (from previous ndo ops).  No
> functional changes to the implementation.
> 
> Signed-off-by: Scott Feldman <sfeldma@gmail.com>

I am a little concerned that this patch will break rocker and dsa until
the 3rd and 4th patches of this series are applied.

Also it is not entirely obvious to me why you check for !ops in
netdev_switch_parent_id_get() and netdev_switch_port_stp_update()
but not in netdev_switch_fib_ipv4_add() and netdev_switch_fib_ipv4_del().

[snip]

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH net-next 0/5] switchdev: add swdev ops
  2015-03-15  6:15 [PATCH net-next 0/5] switchdev: add swdev ops sfeldma
                   ` (5 preceding siblings ...)
  2015-03-15 17:03 ` [PATCH net-next 0/5] switchdev: add swdev ops Jiri Pirko
@ 2015-03-16  0:00 ` David Miller
  6 siblings, 0 replies; 12+ messages in thread
From: David Miller @ 2015-03-16  0:00 UTC (permalink / raw)
  To: sfeldma; +Cc: netdev, jiri, roopa

From: sfeldma@gmail.com
Date: Sat, 14 Mar 2015 23:15:02 -0700

> From: Scott Feldman <sfeldma@gmail.com>
> 
> Per discussions at netconf, move switchdev ndo ops to a new swdev_ops to
> keep ndo namespace clean and maintain switchdev-related ops into one place.
> 
> There are no functional changes here; just shuffling ops around for better
> organization.

As Simon Horman mentioned, this series is not bisectable.

Someone trying to track down a bug in the switch code will
find that all the switch offloading stops happening after
patch #2.

You have to arrange these changes such that full functionality and no
regressions occur at each and every step of the patch seres.

Thanks.

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH net-next 2/5] switchdev: use new swdev ops
  2015-03-15 23:44   ` Simon Horman
@ 2015-03-16  0:43     ` Scott Feldman
  2015-03-16  8:10       ` Simon Horman
  0 siblings, 1 reply; 12+ messages in thread
From: Scott Feldman @ 2015-03-16  0:43 UTC (permalink / raw)
  To: Simon Horman; +Cc: Netdev, Jiří Pírko, Roopa Prabhu

On Sun, Mar 15, 2015 at 4:44 PM, Simon Horman
<simon.horman@netronome.com> wrote:
> Hi Scott,
>
> On Sat, Mar 14, 2015 at 11:15:04PM -0700, sfeldma@gmail.com wrote:
>> From: Scott Feldman <sfeldma@gmail.com>
>>
>> Move swdev wrappers over to new swdev ops (from previous ndo ops).  No
>> functional changes to the implementation.
>>
>> Signed-off-by: Scott Feldman <sfeldma@gmail.com>
>
> I am a little concerned that this patch will break rocker and dsa until
> the 3rd and 4th patches of this series are applied.

Ya, I think you're right.  I was trying to be careful to not break git
bisect, but looks like I only covered the compile case, and broke the
run-time case.  I don't see anyway around this other than squashing
the rocker/dsa patches in with this one.  I'll send v2.

>
> Also it is not entirely obvious to me why you check for !ops in
> netdev_switch_parent_id_get() and netdev_switch_port_stp_update()
> but not in netdev_switch_fib_ipv4_add() and netdev_switch_fib_ipv4_del().

In the fib cases, we find the port dev from the route nexthop dev by
checking if we had swdev_parent_id_get, so we already know ops is
valid.

-scott

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH net-next 2/5] switchdev: use new swdev ops
  2015-03-16  0:43     ` Scott Feldman
@ 2015-03-16  8:10       ` Simon Horman
  0 siblings, 0 replies; 12+ messages in thread
From: Simon Horman @ 2015-03-16  8:10 UTC (permalink / raw)
  To: Scott Feldman; +Cc: Netdev, Jiří Pírko, Roopa Prabhu

On Sun, Mar 15, 2015 at 05:43:13PM -0700, Scott Feldman wrote:
> On Sun, Mar 15, 2015 at 4:44 PM, Simon Horman
> <simon.horman@netronome.com> wrote:
> > Hi Scott,
> >
> > On Sat, Mar 14, 2015 at 11:15:04PM -0700, sfeldma@gmail.com wrote:
> >> From: Scott Feldman <sfeldma@gmail.com>
> >>
> >> Move swdev wrappers over to new swdev ops (from previous ndo ops).  No
> >> functional changes to the implementation.
> >>
> >> Signed-off-by: Scott Feldman <sfeldma@gmail.com>
> >
> > I am a little concerned that this patch will break rocker and dsa until
> > the 3rd and 4th patches of this series are applied.
> 
> Ya, I think you're right.  I was trying to be careful to not break git
> bisect, but looks like I only covered the compile case, and broke the
> run-time case.  I don't see anyway around this other than squashing
> the rocker/dsa patches in with this one.  I'll send v2.
> 
> > Also it is not entirely obvious to me why you check for !ops in
> > netdev_switch_parent_id_get() and netdev_switch_port_stp_update()
> > but not in netdev_switch_fib_ipv4_add() and netdev_switch_fib_ipv4_del().
> 
> In the fib cases, we find the port dev from the route nexthop dev by
> checking if we had swdev_parent_id_get, so we already know ops is
> valid.

Thanks, I see that now.

^ permalink raw reply	[flat|nested] 12+ messages in thread

end of thread, other threads:[~2015-03-16  8:11 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-03-15  6:15 [PATCH net-next 0/5] switchdev: add swdev ops sfeldma
2015-03-15  6:15 ` [PATCH net-next 1/5] " sfeldma
2015-03-15  6:15 ` [PATCH net-next 2/5] switchdev: use new " sfeldma
2015-03-15 23:44   ` Simon Horman
2015-03-16  0:43     ` Scott Feldman
2015-03-16  8:10       ` Simon Horman
2015-03-15  6:15 ` [PATCH net-next 3/5] rocker: move to " sfeldma
2015-03-15  6:15 ` [PATCH net-next 4/5] dsa: " sfeldma
2015-03-15  6:15 ` [PATCH net-next 5/5] netdev: remove ndo ops for switchdev sfeldma
2015-03-15 17:03 ` [PATCH net-next 0/5] switchdev: add swdev ops Jiri Pirko
2015-03-15 17:56   ` Scott Feldman
2015-03-16  0:00 ` David Miller

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.