netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [patch net-next 00/12] mlxsw: driver update
@ 2015-10-28  9:16 Jiri Pirko
  2015-10-28  9:16 ` [patch net-next 01/12] switchdev: Add support for flood control Jiri Pirko
                   ` (12 more replies)
  0 siblings, 13 replies; 14+ messages in thread
From: Jiri Pirko @ 2015-10-28  9:16 UTC (permalink / raw)
  To: netdev; +Cc: davem, idosch, eladr, yotamg, ogerlitz, sagir

From: Jiri Pirko <jiri@mellanox.com>

This driver update mainly brings support for user to be able to setup
flooding on specified port, via bridge flag. Also, there is a fix in ageing
time conversion. The rest is just cosmetics.

Ido Schimmel (4):
  switchdev: Add support for flood control
  switchdev: Make flood to CPU optional
  mlxsw: spectrum: Add support for VLAN ranges in flooding configuration
  mlxsw: spectrum: Add support for flood control

Jiri Pirko (6):
  mlxsw: spectrum: move "bridged" bool to u8 flags
  mlxsw: reg: Fix description for reg_sfd_uc_sub_port
  mlxsw: reg: Fix desription typos of couple of SFN items
  mlxsw: reg: Avoid unnecessary line wrap for mlxsw_reg_sfd_uc_unpack
  mlxsw: spectrum: Fix ageing time value
  mlxsw: spectrum: Make mlxsw_sp_port_switchdev_ops static

Or Gerlitz (2):
  mlxsw: Put constant on the right side of comparisons
  mlxsw: Put braces on all arms of branch statement

 Documentation/networking/switchdev.txt             |   7 +-
 drivers/net/ethernet/mellanox/mlxsw/core.c         |   4 +-
 drivers/net/ethernet/mellanox/mlxsw/pci.c          |   3 +-
 drivers/net/ethernet/mellanox/mlxsw/reg.h          |  18 +--
 drivers/net/ethernet/mellanox/mlxsw/spectrum.c     |   5 +-
 drivers/net/ethernet/mellanox/mlxsw/spectrum.h     |   7 +-
 .../ethernet/mellanox/mlxsw/spectrum_switchdev.c   | 144 +++++++++++++--------
 drivers/net/ethernet/mellanox/mlxsw/switchx2.c     |   2 +-
 net/switchdev/switchdev.c                          |   5 +-
 9 files changed, 122 insertions(+), 73 deletions(-)

-- 
1.9.3

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

* [patch net-next 01/12] switchdev: Add support for flood control
  2015-10-28  9:16 [patch net-next 00/12] mlxsw: driver update Jiri Pirko
@ 2015-10-28  9:16 ` Jiri Pirko
  2015-10-28  9:16 ` [patch net-next 02/12] switchdev: Make flood to CPU optional Jiri Pirko
                   ` (11 subsequent siblings)
  12 siblings, 0 replies; 14+ messages in thread
From: Jiri Pirko @ 2015-10-28  9:16 UTC (permalink / raw)
  To: netdev; +Cc: davem, idosch, eladr, yotamg, ogerlitz, sagir

From: Ido Schimmel <idosch@mellanox.com>

Allow devices supporting this feature to control the flooding of unknown
unicast traffic, by making switchdev infrastructure propagate this setting
to the switch driver.

Signed-off-by: Ido Schimmel <idosch@mellanox.com>
Signed-off-by: Jiri Pirko <jiri@mellanox.com>
---
 Documentation/networking/switchdev.txt | 3 +++
 net/switchdev/switchdev.c              | 5 ++++-
 2 files changed, 7 insertions(+), 1 deletion(-)

diff --git a/Documentation/networking/switchdev.txt b/Documentation/networking/switchdev.txt
index 0714fe5..ce510e1 100644
--- a/Documentation/networking/switchdev.txt
+++ b/Documentation/networking/switchdev.txt
@@ -298,6 +298,9 @@ packets up to the bridge driver for flooding.  This is not ideal as the number
 of ports scale in the L2 domain as the device is much more efficient at
 flooding packets that software.
 
+If supported by the device, flood control can be offloaded to it, preventing
+certain netdevs from flooding unicast traffic for which there is no FDB entry.
+
 IGMP Snooping
 ^^^^^^^^^^^^^
 
diff --git a/net/switchdev/switchdev.c b/net/switchdev/switchdev.c
index 1eb76956..8950d39 100644
--- a/net/switchdev/switchdev.c
+++ b/net/switchdev/switchdev.c
@@ -746,7 +746,7 @@ int switchdev_port_bridge_getlink(struct sk_buff *skb, u32 pid, u32 seq,
 		.id = SWITCHDEV_ATTR_ID_PORT_BRIDGE_FLAGS,
 	};
 	u16 mode = BRIDGE_MODE_UNDEF;
-	u32 mask = BR_LEARNING | BR_LEARNING_SYNC;
+	u32 mask = BR_LEARNING | BR_LEARNING_SYNC | BR_FLOOD;
 	int err;
 
 	err = switchdev_port_attr_get(dev, &attr);
@@ -817,6 +817,9 @@ static int switchdev_port_br_setlink_protinfo(struct net_device *dev,
 			err = switchdev_port_br_setflag(dev, attr,
 							BR_LEARNING_SYNC);
 			break;
+		case IFLA_BRPORT_UNICAST_FLOOD:
+			err = switchdev_port_br_setflag(dev, attr, BR_FLOOD);
+			break;
 		default:
 			err = -EOPNOTSUPP;
 			break;
-- 
1.9.3

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

* [patch net-next 02/12] switchdev: Make flood to CPU optional
  2015-10-28  9:16 [patch net-next 00/12] mlxsw: driver update Jiri Pirko
  2015-10-28  9:16 ` [patch net-next 01/12] switchdev: Add support for flood control Jiri Pirko
@ 2015-10-28  9:16 ` Jiri Pirko
  2015-10-28  9:16 ` [patch net-next 03/12] mlxsw: spectrum: move "bridged" bool to u8 flags Jiri Pirko
                   ` (10 subsequent siblings)
  12 siblings, 0 replies; 14+ messages in thread
From: Jiri Pirko @ 2015-10-28  9:16 UTC (permalink / raw)
  To: netdev; +Cc: davem, idosch, eladr, yotamg, ogerlitz, sagir

From: Ido Schimmel <idosch@mellanox.com>

In certain use cases it is not always desirable for the switch device to
flood traffic to CPU port. Instead, only certain packet types (e.g.
STP, LACP) should be trapped to it.

Signed-off-by: Ido Schimmel <idosch@mellanox.com>
Signed-off-by: Jiri Pirko <jiri@mellanox.com>
---
 Documentation/networking/switchdev.txt | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/Documentation/networking/switchdev.txt b/Documentation/networking/switchdev.txt
index ce510e1..9199413 100644
--- a/Documentation/networking/switchdev.txt
+++ b/Documentation/networking/switchdev.txt
@@ -278,8 +278,8 @@ Flooding L2 domain
 For a given L2 VLAN domain, the switch device should flood multicast/broadcast
 and unknown unicast packets to all ports in domain, if allowed by port's
 current STP state.  The switch driver, knowing which ports are within which
-vlan L2 domain, can program the switch device for flooding.  The packet should
-also be sent to the port netdev for processing by the bridge driver.  The
+vlan L2 domain, can program the switch device for flooding.  The packet may
+be sent to the port netdev for processing by the bridge driver.  The
 bridge should not reflood the packet to the same ports the device flooded,
 otherwise there will be duplicate packets on the wire.
 
-- 
1.9.3

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

* [patch net-next 03/12] mlxsw: spectrum: move "bridged" bool to u8 flags
  2015-10-28  9:16 [patch net-next 00/12] mlxsw: driver update Jiri Pirko
  2015-10-28  9:16 ` [patch net-next 01/12] switchdev: Add support for flood control Jiri Pirko
  2015-10-28  9:16 ` [patch net-next 02/12] switchdev: Make flood to CPU optional Jiri Pirko
@ 2015-10-28  9:16 ` Jiri Pirko
  2015-10-28  9:16 ` [patch net-next 04/12] mlxsw: spectrum: Add support for VLAN ranges in flooding configuration Jiri Pirko
                   ` (9 subsequent siblings)
  12 siblings, 0 replies; 14+ messages in thread
From: Jiri Pirko @ 2015-10-28  9:16 UTC (permalink / raw)
  To: netdev; +Cc: davem, idosch, eladr, yotamg, ogerlitz, sagir

From: Jiri Pirko <jiri@mellanox.com>

It is a flag anyway, so move it to existing u8 flag and don't waste mem.
Fix the flags to be in single u8 on the way.

Signed-off-by: Jiri Pirko <jiri@mellanox.com>
Signed-off-by: Ido Schimmel <idosch@mellanox.com>
---
 drivers/net/ethernet/mellanox/mlxsw/spectrum.c | 4 ++--
 drivers/net/ethernet/mellanox/mlxsw/spectrum.h | 6 +++---
 2 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum.c b/drivers/net/ethernet/mellanox/mlxsw/spectrum.c
index 6e9906d..e30b2da 100644
--- a/drivers/net/ethernet/mellanox/mlxsw/spectrum.c
+++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum.c
@@ -1899,12 +1899,12 @@ static int mlxsw_sp_netdevice_event(struct notifier_block *unused,
 				if (err)
 					netdev_err(dev, "Failed to join bridge\n");
 				mlxsw_sp_master_bridge_inc(mlxsw_sp, upper_dev);
-				mlxsw_sp_port->bridged = true;
+				mlxsw_sp_port->bridged = 1;
 			} else {
 				err = mlxsw_sp_port_bridge_leave(mlxsw_sp_port);
 				if (err)
 					netdev_err(dev, "Failed to leave bridge\n");
-				mlxsw_sp_port->bridged = false;
+				mlxsw_sp_port->bridged = 0;
 				mlxsw_sp_master_bridge_dec(mlxsw_sp, upper_dev);
 			}
 		}
diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum.h b/drivers/net/ethernet/mellanox/mlxsw/spectrum.h
index fc00749..b4d8393 100644
--- a/drivers/net/ethernet/mellanox/mlxsw/spectrum.h
+++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum.h
@@ -84,10 +84,10 @@ struct mlxsw_sp_port {
 	struct mlxsw_sp *mlxsw_sp;
 	u8 local_port;
 	u8 stp_state;
-	u8 learning:1;
-	u8 learning_sync:1;
+	u8 learning:1,
+	   learning_sync:1,
+	   bridged:1;
 	u16 pvid;
-	bool bridged;
 	/* 802.1Q bridge VLANs */
 	unsigned long active_vlans[BITS_TO_LONGS(VLAN_N_VID)];
 	/* VLAN interfaces */
-- 
1.9.3

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

* [patch net-next 04/12] mlxsw: spectrum: Add support for VLAN ranges in flooding configuration
  2015-10-28  9:16 [patch net-next 00/12] mlxsw: driver update Jiri Pirko
                   ` (2 preceding siblings ...)
  2015-10-28  9:16 ` [patch net-next 03/12] mlxsw: spectrum: move "bridged" bool to u8 flags Jiri Pirko
@ 2015-10-28  9:16 ` Jiri Pirko
  2015-10-28  9:16 ` [patch net-next 05/12] mlxsw: spectrum: Add support for flood control Jiri Pirko
                   ` (8 subsequent siblings)
  12 siblings, 0 replies; 14+ messages in thread
From: Jiri Pirko @ 2015-10-28  9:16 UTC (permalink / raw)
  To: netdev; +Cc: davem, idosch, eladr, yotamg, ogerlitz, sagir

From: Ido Schimmel <idosch@mellanox.com>

When enabling a range of VLANs on a bridged port we can configure
flooding for these VLANs by one register access instead of calling the
same register for each VLAN. This is accomplished by using the 'range'
field of the Switch Flooding Table Register (SFTR).

Signed-off-by: Ido Schimmel <idosch@mellanox.com>
Signed-off-by: Jiri Pirko <jiri@mellanox.com>
---
 .../ethernet/mellanox/mlxsw/spectrum_switchdev.c   | 40 +++++++++++-----------
 1 file changed, 20 insertions(+), 20 deletions(-)

diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum_switchdev.c b/drivers/net/ethernet/mellanox/mlxsw/spectrum_switchdev.c
index c39b7a1..c3881c9 100644
--- a/drivers/net/ethernet/mellanox/mlxsw/spectrum_switchdev.c
+++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum_switchdev.c
@@ -248,9 +248,11 @@ static int mlxsw_sp_port_fid_unmap(struct mlxsw_sp_port *mlxsw_sp_port, u16 fid)
 }
 
 static int __mlxsw_sp_port_flood_set(struct mlxsw_sp_port *mlxsw_sp_port,
-				     u16 fid, bool set, bool only_uc)
+				     u16 fid_begin, u16 fid_end, bool set,
+				     bool only_uc)
 {
 	struct mlxsw_sp *mlxsw_sp = mlxsw_sp_port->mlxsw_sp;
+	u16 range = fid_end - fid_begin + 1;
 	char *sftr_pl;
 	int err;
 
@@ -258,8 +260,8 @@ static int __mlxsw_sp_port_flood_set(struct mlxsw_sp_port *mlxsw_sp_port,
 	if (!sftr_pl)
 		return -ENOMEM;
 
-	mlxsw_reg_sftr_pack(sftr_pl, MLXSW_SP_FLOOD_TABLE_UC, fid,
-			    MLXSW_REG_SFGC_TABLE_TYPE_FID_OFFEST, 0,
+	mlxsw_reg_sftr_pack(sftr_pl, MLXSW_SP_FLOOD_TABLE_UC, fid_begin,
+			    MLXSW_REG_SFGC_TABLE_TYPE_FID_OFFEST, range,
 			    mlxsw_sp_port->local_port, set);
 	err = mlxsw_reg_write(mlxsw_sp->core, MLXSW_REG(sftr), sftr_pl);
 	if (err)
@@ -271,8 +273,8 @@ static int __mlxsw_sp_port_flood_set(struct mlxsw_sp_port *mlxsw_sp_port,
 	if (only_uc)
 		goto buffer_out;
 
-	mlxsw_reg_sftr_pack(sftr_pl, MLXSW_SP_FLOOD_TABLE_BM, fid,
-			    MLXSW_REG_SFGC_TABLE_TYPE_FID_OFFEST, 0,
+	mlxsw_reg_sftr_pack(sftr_pl, MLXSW_SP_FLOOD_TABLE_BM, fid_begin,
+			    MLXSW_REG_SFGC_TABLE_TYPE_FID_OFFEST, range,
 			    mlxsw_sp_port->local_port, set);
 	err = mlxsw_reg_write(mlxsw_sp->core, MLXSW_REG(sftr), sftr_pl);
 
@@ -345,14 +347,13 @@ static int __mlxsw_sp_port_vlans_add(struct mlxsw_sp_port *mlxsw_sp_port,
 			netdev_err(dev, "Failed to map FID=%d", vid);
 			return err;
 		}
+	}
 
-		err = __mlxsw_sp_port_flood_set(mlxsw_sp_port, vid, true,
-						false);
-		if (err) {
-			netdev_err(dev, "Failed to set flooding for FID=%d",
-				   vid);
-			return err;
-		}
+	err = __mlxsw_sp_port_flood_set(mlxsw_sp_port, vid_begin, vid_end,
+					true, false);
+	if (err) {
+		netdev_err(dev, "Failed to configure flooding\n");
+		return err;
 	}
 
 	for (vid = vid_begin; vid <= vid_end;
@@ -530,15 +531,14 @@ static int __mlxsw_sp_port_vlans_del(struct mlxsw_sp_port *mlxsw_sp_port,
 	if (init)
 		goto out;
 
-	for (vid = vid_begin; vid <= vid_end; vid++) {
-		err = __mlxsw_sp_port_flood_set(mlxsw_sp_port, vid, false,
-						false);
-		if (err) {
-			netdev_err(dev, "Failed to clear flooding for FID=%d",
-				   vid);
-			return err;
-		}
+	err = __mlxsw_sp_port_flood_set(mlxsw_sp_port, vid_begin, vid_end,
+					false, false);
+	if (err) {
+		netdev_err(dev, "Failed to clear flooding\n");
+		return err;
+	}
 
+	for (vid = vid_begin; vid <= vid_end; vid++) {
 		/* Remove FID mapping in case of Virtual mode */
 		err = mlxsw_sp_port_fid_unmap(mlxsw_sp_port, vid);
 		if (err) {
-- 
1.9.3

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

* [patch net-next 05/12] mlxsw: spectrum: Add support for flood control
  2015-10-28  9:16 [patch net-next 00/12] mlxsw: driver update Jiri Pirko
                   ` (3 preceding siblings ...)
  2015-10-28  9:16 ` [patch net-next 04/12] mlxsw: spectrum: Add support for VLAN ranges in flooding configuration Jiri Pirko
@ 2015-10-28  9:16 ` Jiri Pirko
  2015-10-28  9:16 ` [patch net-next 06/12] mlxsw: reg: Fix description for reg_sfd_uc_sub_port Jiri Pirko
                   ` (7 subsequent siblings)
  12 siblings, 0 replies; 14+ messages in thread
From: Jiri Pirko @ 2015-10-28  9:16 UTC (permalink / raw)
  To: netdev; +Cc: davem, idosch, eladr, yotamg, ogerlitz, sagir

From: Ido Schimmel <idosch@mellanox.com>

Add or remove a bridged port from the flooding domain of unknown unicast
packets according to user configuration.

Signed-off-by: Ido Schimmel <idosch@mellanox.com>
Signed-off-by: Jiri Pirko <jiri@mellanox.com>
---
 drivers/net/ethernet/mellanox/mlxsw/spectrum.c     |   1 +
 drivers/net/ethernet/mellanox/mlxsw/spectrum.h     |   1 +
 .../ethernet/mellanox/mlxsw/spectrum_switchdev.c   | 113 ++++++++++++++-------
 3 files changed, 78 insertions(+), 37 deletions(-)

diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum.c b/drivers/net/ethernet/mellanox/mlxsw/spectrum.c
index e30b2da..3be4a23 100644
--- a/drivers/net/ethernet/mellanox/mlxsw/spectrum.c
+++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum.c
@@ -1227,6 +1227,7 @@ static int mlxsw_sp_port_create(struct mlxsw_sp *mlxsw_sp, u8 local_port)
 	mlxsw_sp_port->local_port = local_port;
 	mlxsw_sp_port->learning = 1;
 	mlxsw_sp_port->learning_sync = 1;
+	mlxsw_sp_port->uc_flood = 1;
 	mlxsw_sp_port->pvid = 1;
 
 	mlxsw_sp_port->pcpu_stats =
diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum.h b/drivers/net/ethernet/mellanox/mlxsw/spectrum.h
index b4d8393..4365c8b 100644
--- a/drivers/net/ethernet/mellanox/mlxsw/spectrum.h
+++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum.h
@@ -86,6 +86,7 @@ struct mlxsw_sp_port {
 	u8 stp_state;
 	u8 learning:1,
 	   learning_sync:1,
+	   uc_flood:1,
 	   bridged:1;
 	u16 pvid;
 	/* 802.1Q bridge VLANs */
diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum_switchdev.c b/drivers/net/ethernet/mellanox/mlxsw/spectrum_switchdev.c
index c3881c9..1f3b12e 100644
--- a/drivers/net/ethernet/mellanox/mlxsw/spectrum_switchdev.c
+++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum_switchdev.c
@@ -66,7 +66,8 @@ static int mlxsw_sp_port_attr_get(struct net_device *dev,
 	case SWITCHDEV_ATTR_ID_PORT_BRIDGE_FLAGS:
 		attr->u.brport_flags =
 			(mlxsw_sp_port->learning ? BR_LEARNING : 0) |
-			(mlxsw_sp_port->learning_sync ? BR_LEARNING_SYNC : 0);
+			(mlxsw_sp_port->learning_sync ? BR_LEARNING_SYNC : 0) |
+			(mlxsw_sp_port->uc_flood ? BR_FLOOD : 0);
 		break;
 	default:
 		return -EOPNOTSUPP;
@@ -123,15 +124,89 @@ static int mlxsw_sp_port_attr_stp_state_set(struct mlxsw_sp_port *mlxsw_sp_port,
 	return mlxsw_sp_port_stp_state_set(mlxsw_sp_port, state);
 }
 
+static int __mlxsw_sp_port_flood_set(struct mlxsw_sp_port *mlxsw_sp_port,
+				     u16 fid_begin, u16 fid_end, bool set,
+				     bool only_uc)
+{
+	struct mlxsw_sp *mlxsw_sp = mlxsw_sp_port->mlxsw_sp;
+	u16 range = fid_end - fid_begin + 1;
+	char *sftr_pl;
+	int err;
+
+	sftr_pl = kmalloc(MLXSW_REG_SFTR_LEN, GFP_KERNEL);
+	if (!sftr_pl)
+		return -ENOMEM;
+
+	mlxsw_reg_sftr_pack(sftr_pl, MLXSW_SP_FLOOD_TABLE_UC, fid_begin,
+			    MLXSW_REG_SFGC_TABLE_TYPE_FID_OFFEST, range,
+			    mlxsw_sp_port->local_port, set);
+	err = mlxsw_reg_write(mlxsw_sp->core, MLXSW_REG(sftr), sftr_pl);
+	if (err)
+		goto buffer_out;
+
+	/* Flooding control allows one to decide whether a given port will
+	 * flood unicast traffic for which there is no FDB entry.
+	 */
+	if (only_uc)
+		goto buffer_out;
+
+	mlxsw_reg_sftr_pack(sftr_pl, MLXSW_SP_FLOOD_TABLE_BM, fid_begin,
+			    MLXSW_REG_SFGC_TABLE_TYPE_FID_OFFEST, range,
+			    mlxsw_sp_port->local_port, set);
+	err = mlxsw_reg_write(mlxsw_sp->core, MLXSW_REG(sftr), sftr_pl);
+
+buffer_out:
+	kfree(sftr_pl);
+	return err;
+}
+
+static int mlxsw_sp_port_uc_flood_set(struct mlxsw_sp_port *mlxsw_sp_port,
+				      bool set)
+{
+	struct net_device *dev = mlxsw_sp_port->dev;
+	u16 vid, last_visited_vid;
+	int err;
+
+	for_each_set_bit(vid, mlxsw_sp_port->active_vlans, VLAN_N_VID) {
+		err = __mlxsw_sp_port_flood_set(mlxsw_sp_port, vid, vid, set,
+						true);
+		if (err) {
+			last_visited_vid = vid;
+			goto err_port_flood_set;
+		}
+	}
+
+	return 0;
+
+err_port_flood_set:
+	for_each_set_bit(vid, mlxsw_sp_port->active_vlans, last_visited_vid)
+		__mlxsw_sp_port_flood_set(mlxsw_sp_port, vid, vid, !set, true);
+	netdev_err(dev, "Failed to configure unicast flooding\n");
+	return err;
+}
+
 static int mlxsw_sp_port_attr_br_flags_set(struct mlxsw_sp_port *mlxsw_sp_port,
 					   struct switchdev_trans *trans,
 					   unsigned long brport_flags)
 {
+	unsigned long uc_flood = mlxsw_sp_port->uc_flood ? BR_FLOOD : 0;
+	bool set;
+	int err;
+
 	if (switchdev_trans_ph_prepare(trans))
 		return 0;
 
+	if ((uc_flood ^ brport_flags) & BR_FLOOD) {
+		set = mlxsw_sp_port->uc_flood ? false : true;
+		err = mlxsw_sp_port_uc_flood_set(mlxsw_sp_port, set);
+		if (err)
+			return err;
+	}
+
+	mlxsw_sp_port->uc_flood = brport_flags & BR_FLOOD ? 1 : 0;
 	mlxsw_sp_port->learning = brport_flags & BR_LEARNING ? 1 : 0;
 	mlxsw_sp_port->learning_sync = brport_flags & BR_LEARNING_SYNC ? 1 : 0;
+
 	return 0;
 }
 
@@ -247,42 +322,6 @@ static int mlxsw_sp_port_fid_unmap(struct mlxsw_sp_port *mlxsw_sp_port, u16 fid)
 	return mlxsw_sp_port_vid_to_fid_set(mlxsw_sp_port, mt, false, fid, fid);
 }
 
-static int __mlxsw_sp_port_flood_set(struct mlxsw_sp_port *mlxsw_sp_port,
-				     u16 fid_begin, u16 fid_end, bool set,
-				     bool only_uc)
-{
-	struct mlxsw_sp *mlxsw_sp = mlxsw_sp_port->mlxsw_sp;
-	u16 range = fid_end - fid_begin + 1;
-	char *sftr_pl;
-	int err;
-
-	sftr_pl = kmalloc(MLXSW_REG_SFTR_LEN, GFP_KERNEL);
-	if (!sftr_pl)
-		return -ENOMEM;
-
-	mlxsw_reg_sftr_pack(sftr_pl, MLXSW_SP_FLOOD_TABLE_UC, fid_begin,
-			    MLXSW_REG_SFGC_TABLE_TYPE_FID_OFFEST, range,
-			    mlxsw_sp_port->local_port, set);
-	err = mlxsw_reg_write(mlxsw_sp->core, MLXSW_REG(sftr), sftr_pl);
-	if (err)
-		goto buffer_out;
-
-	/* Flooding control allows one to decide whether a given port will
-	 * flood unicast traffic for which there is no FDB entry.
-	 */
-	if (only_uc)
-		goto buffer_out;
-
-	mlxsw_reg_sftr_pack(sftr_pl, MLXSW_SP_FLOOD_TABLE_BM, fid_begin,
-			    MLXSW_REG_SFGC_TABLE_TYPE_FID_OFFEST, range,
-			    mlxsw_sp_port->local_port, set);
-	err = mlxsw_reg_write(mlxsw_sp->core, MLXSW_REG(sftr), sftr_pl);
-
-buffer_out:
-	kfree(sftr_pl);
-	return err;
-}
-
 static int mlxsw_sp_port_add_vids(struct net_device *dev, u16 vid_begin,
 				  u16 vid_end)
 {
-- 
1.9.3

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

* [patch net-next 06/12] mlxsw: reg: Fix description for reg_sfd_uc_sub_port
  2015-10-28  9:16 [patch net-next 00/12] mlxsw: driver update Jiri Pirko
                   ` (4 preceding siblings ...)
  2015-10-28  9:16 ` [patch net-next 05/12] mlxsw: spectrum: Add support for flood control Jiri Pirko
@ 2015-10-28  9:16 ` Jiri Pirko
  2015-10-28  9:17 ` [patch net-next 07/12] mlxsw: reg: Fix desription typos of couple of SFN items Jiri Pirko
                   ` (6 subsequent siblings)
  12 siblings, 0 replies; 14+ messages in thread
From: Jiri Pirko @ 2015-10-28  9:16 UTC (permalink / raw)
  To: netdev; +Cc: davem, idosch, eladr, yotamg, ogerlitz, sagir

From: Jiri Pirko <jiri@mellanox.com>

The original description was for LAG, so fix it.

Signed-off-by: Jiri Pirko <jiri@mellanox.com>
Signed-off-by: Ido Schimmel <idosch@mellanox.com>
---
 drivers/net/ethernet/mellanox/mlxsw/reg.h | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/drivers/net/ethernet/mellanox/mlxsw/reg.h b/drivers/net/ethernet/mellanox/mlxsw/reg.h
index 4fcba46..c24283a 100644
--- a/drivers/net/ethernet/mellanox/mlxsw/reg.h
+++ b/drivers/net/ethernet/mellanox/mlxsw/reg.h
@@ -348,8 +348,9 @@ MLXSW_ITEM32_INDEXED(reg, sfd, rec_action, MLXSW_REG_SFD_BASE_LEN, 28, 4,
 		     MLXSW_REG_SFD_REC_LEN, 0x0C, false);
 
 /* reg_sfd_uc_sub_port
- * LAG sub port.
- * Must be 0 if multichannel VEPA is not enabled.
+ * VEPA channel on local port.
+ * Valid only if local port is a non-stacking port. Must be 0 if multichannel
+ * VEPA is not enabled.
  * Access: RW
  */
 MLXSW_ITEM32_INDEXED(reg, sfd, uc_sub_port, MLXSW_REG_SFD_BASE_LEN, 16, 8,
-- 
1.9.3

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

* [patch net-next 07/12] mlxsw: reg: Fix desription typos of couple of SFN items
  2015-10-28  9:16 [patch net-next 00/12] mlxsw: driver update Jiri Pirko
                   ` (5 preceding siblings ...)
  2015-10-28  9:16 ` [patch net-next 06/12] mlxsw: reg: Fix description for reg_sfd_uc_sub_port Jiri Pirko
@ 2015-10-28  9:17 ` Jiri Pirko
  2015-10-28  9:17 ` [patch net-next 08/12] mlxsw: reg: Avoid unnecessary line wrap for mlxsw_reg_sfd_uc_unpack Jiri Pirko
                   ` (5 subsequent siblings)
  12 siblings, 0 replies; 14+ messages in thread
From: Jiri Pirko @ 2015-10-28  9:17 UTC (permalink / raw)
  To: netdev; +Cc: davem, idosch, eladr, yotamg, ogerlitz, sagir

From: Jiri Pirko <jiri@mellanox.com>

Fix copy-paste errors.

Signed-off-by: Jiri Pirko <jiri@mellanox.com>
Signed-off-by: Ido Schimmel <idosch@mellanox.com>
---
 drivers/net/ethernet/mellanox/mlxsw/reg.h | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/drivers/net/ethernet/mellanox/mlxsw/reg.h b/drivers/net/ethernet/mellanox/mlxsw/reg.h
index c24283a..2bf230c 100644
--- a/drivers/net/ethernet/mellanox/mlxsw/reg.h
+++ b/drivers/net/ethernet/mellanox/mlxsw/reg.h
@@ -475,7 +475,7 @@ MLXSW_ITEM32_INDEXED(reg, sfn, rec_type, MLXSW_REG_SFN_BASE_LEN, 20, 4,
 MLXSW_ITEM_BUF_INDEXED(reg, sfn, rec_mac, MLXSW_REG_SFN_BASE_LEN, 6,
 		       MLXSW_REG_SFN_REC_LEN, 0x02);
 
-/* reg_sfd_mac_sub_port
+/* reg_sfn_mac_sub_port
  * VEPA channel on the local port.
  * 0 if multichannel VEPA is not enabled.
  * Access: RO
@@ -483,14 +483,14 @@ MLXSW_ITEM_BUF_INDEXED(reg, sfn, rec_mac, MLXSW_REG_SFN_BASE_LEN, 6,
 MLXSW_ITEM32_INDEXED(reg, sfn, mac_sub_port, MLXSW_REG_SFN_BASE_LEN, 16, 8,
 		     MLXSW_REG_SFN_REC_LEN, 0x08, false);
 
-/* reg_sfd_mac_fid
+/* reg_sfn_mac_fid
  * Filtering identifier.
  * Access: RO
  */
 MLXSW_ITEM32_INDEXED(reg, sfn, mac_fid, MLXSW_REG_SFN_BASE_LEN, 0, 16,
 		     MLXSW_REG_SFN_REC_LEN, 0x08, false);
 
-/* reg_sfd_mac_system_port
+/* reg_sfn_mac_system_port
  * Unique port identifier for the final destination of the packet.
  * Access: RO
  */
-- 
1.9.3

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

* [patch net-next 08/12] mlxsw: reg: Avoid unnecessary line wrap for mlxsw_reg_sfd_uc_unpack
  2015-10-28  9:16 [patch net-next 00/12] mlxsw: driver update Jiri Pirko
                   ` (6 preceding siblings ...)
  2015-10-28  9:17 ` [patch net-next 07/12] mlxsw: reg: Fix desription typos of couple of SFN items Jiri Pirko
@ 2015-10-28  9:17 ` Jiri Pirko
  2015-10-28  9:17 ` [patch net-next 09/12] mlxsw: spectrum: Fix ageing time value Jiri Pirko
                   ` (4 subsequent siblings)
  12 siblings, 0 replies; 14+ messages in thread
From: Jiri Pirko @ 2015-10-28  9:17 UTC (permalink / raw)
  To: netdev; +Cc: davem, idosch, eladr, yotamg, ogerlitz, sagir

From: Jiri Pirko <jiri@mellanox.com>

Signed-off-by: Jiri Pirko <jiri@mellanox.com>
Signed-off-by: Ido Schimmel <idosch@mellanox.com>
---
 drivers/net/ethernet/mellanox/mlxsw/reg.h | 7 +++----
 1 file changed, 3 insertions(+), 4 deletions(-)

diff --git a/drivers/net/ethernet/mellanox/mlxsw/reg.h b/drivers/net/ethernet/mellanox/mlxsw/reg.h
index 2bf230c..236fb5d 100644
--- a/drivers/net/ethernet/mellanox/mlxsw/reg.h
+++ b/drivers/net/ethernet/mellanox/mlxsw/reg.h
@@ -397,10 +397,9 @@ static inline void mlxsw_reg_sfd_uc_pack(char *payload, int rec_index,
 	mlxsw_reg_sfd_uc_system_port_set(payload, rec_index, local_port);
 }
 
-static inline void
-mlxsw_reg_sfd_uc_unpack(char *payload, int rec_index,
-			char *mac, u16 *p_vid,
-			u8 *p_local_port)
+static inline void mlxsw_reg_sfd_uc_unpack(char *payload, int rec_index,
+					   char *mac, u16 *p_vid,
+					   u8 *p_local_port)
 {
 	mlxsw_reg_sfd_rec_mac_memcpy_from(payload, rec_index, mac);
 	*p_vid = mlxsw_reg_sfd_uc_fid_vid_get(payload, rec_index);
-- 
1.9.3

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

* [patch net-next 09/12] mlxsw: spectrum: Fix ageing time value
  2015-10-28  9:16 [patch net-next 00/12] mlxsw: driver update Jiri Pirko
                   ` (7 preceding siblings ...)
  2015-10-28  9:17 ` [patch net-next 08/12] mlxsw: reg: Avoid unnecessary line wrap for mlxsw_reg_sfd_uc_unpack Jiri Pirko
@ 2015-10-28  9:17 ` Jiri Pirko
  2015-10-28  9:17 ` [patch net-next 10/12] mlxsw: Put constant on the right side of comparisons Jiri Pirko
                   ` (3 subsequent siblings)
  12 siblings, 0 replies; 14+ messages in thread
From: Jiri Pirko @ 2015-10-28  9:17 UTC (permalink / raw)
  To: netdev; +Cc: davem, idosch, eladr, yotamg, ogerlitz, sagir

From: Jiri Pirko <jiri@mellanox.com>

The value passed through switchdev attr set is not in jiffies, but in
clock_t, so fix the convert.

Reported-by: Sagi Rotem <sagir@mellanox.com>
Fixes: 56ade8fe3f ("mlxsw: spectrum: Add initial support for Spectrum ASIC")
Signed-off-by: Jiri Pirko <jiri@mellanox.com>
Signed-off-by: Ido Schimmel <idosch@mellanox.com>
---
 drivers/net/ethernet/mellanox/mlxsw/spectrum_switchdev.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum_switchdev.c b/drivers/net/ethernet/mellanox/mlxsw/spectrum_switchdev.c
index 1f3b12e..c2d0969 100644
--- a/drivers/net/ethernet/mellanox/mlxsw/spectrum_switchdev.c
+++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum_switchdev.c
@@ -225,9 +225,10 @@ static int mlxsw_sp_ageing_set(struct mlxsw_sp *mlxsw_sp, u32 ageing_time)
 
 static int mlxsw_sp_port_attr_br_ageing_set(struct mlxsw_sp_port *mlxsw_sp_port,
 					    struct switchdev_trans *trans,
-					    unsigned long ageing_jiffies)
+					    unsigned long ageing_clock_t)
 {
 	struct mlxsw_sp *mlxsw_sp = mlxsw_sp_port->mlxsw_sp;
+	unsigned long ageing_jiffies = clock_t_to_jiffies(ageing_clock_t);
 	u32 ageing_time = jiffies_to_msecs(ageing_jiffies) / 1000;
 
 	if (switchdev_trans_ph_prepare(trans))
-- 
1.9.3

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

* [patch net-next 10/12] mlxsw: Put constant on the right side of comparisons
  2015-10-28  9:16 [patch net-next 00/12] mlxsw: driver update Jiri Pirko
                   ` (8 preceding siblings ...)
  2015-10-28  9:17 ` [patch net-next 09/12] mlxsw: spectrum: Fix ageing time value Jiri Pirko
@ 2015-10-28  9:17 ` Jiri Pirko
  2015-10-28  9:17 ` [patch net-next 11/12] mlxsw: Put braces on all arms of branch statement Jiri Pirko
                   ` (2 subsequent siblings)
  12 siblings, 0 replies; 14+ messages in thread
From: Jiri Pirko @ 2015-10-28  9:17 UTC (permalink / raw)
  To: netdev; +Cc: davem, idosch, eladr, yotamg, ogerlitz, sagir

From: Or Gerlitz <ogerlitz@mellanox.com>

Fixes those places where checkpatch complains that comparisons
should place the constant on the right side of the test.

Signed-off-by: Or Gerlitz <ogerlitz@mellanox.com>
Signed-off-by: Jiri Pirko <jiri@mellanox.com>
Signed-off-by: Ido Schimmel <idosch@mellanox.com>
---
 drivers/net/ethernet/mellanox/mlxsw/core.c     | 4 ++--
 drivers/net/ethernet/mellanox/mlxsw/switchx2.c | 2 +-
 2 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/drivers/net/ethernet/mellanox/mlxsw/core.c b/drivers/net/ethernet/mellanox/mlxsw/core.c
index bd80ac7..97f0d93 100644
--- a/drivers/net/ethernet/mellanox/mlxsw/core.c
+++ b/drivers/net/ethernet/mellanox/mlxsw/core.c
@@ -287,7 +287,7 @@ static void mlxsw_emad_pack_op_tlv(char *op_tlv,
 	mlxsw_emad_op_tlv_status_set(op_tlv, 0);
 	mlxsw_emad_op_tlv_register_id_set(op_tlv, reg->id);
 	mlxsw_emad_op_tlv_r_set(op_tlv, MLXSW_EMAD_OP_TLV_REQUEST);
-	if (MLXSW_CORE_REG_ACCESS_TYPE_QUERY == type)
+	if (type == MLXSW_CORE_REG_ACCESS_TYPE_QUERY)
 		mlxsw_emad_op_tlv_method_set(op_tlv,
 					     MLXSW_EMAD_OP_TLV_METHOD_QUERY);
 	else
@@ -362,7 +362,7 @@ static bool mlxsw_emad_is_resp(const struct sk_buff *skb)
 	char *op_tlv;
 
 	op_tlv = mlxsw_emad_op_tlv(skb);
-	return (MLXSW_EMAD_OP_TLV_RESPONSE == mlxsw_emad_op_tlv_r_get(op_tlv));
+	return (mlxsw_emad_op_tlv_r_get(op_tlv) == MLXSW_EMAD_OP_TLV_RESPONSE);
 }
 
 #define MLXSW_EMAD_TIMEOUT_MS 200
diff --git a/drivers/net/ethernet/mellanox/mlxsw/switchx2.c b/drivers/net/ethernet/mellanox/mlxsw/switchx2.c
index 50e29c4..d85960c 100644
--- a/drivers/net/ethernet/mellanox/mlxsw/switchx2.c
+++ b/drivers/net/ethernet/mellanox/mlxsw/switchx2.c
@@ -1147,7 +1147,7 @@ static void mlxsw_sx_pude_event_func(const struct mlxsw_reg_info *reg,
 	}
 
 	status = mlxsw_reg_pude_oper_status_get(pude_pl);
-	if (MLXSW_PORT_OPER_STATUS_UP == status) {
+	if (status == MLXSW_PORT_OPER_STATUS_UP) {
 		netdev_info(mlxsw_sx_port->dev, "link up\n");
 		netif_carrier_on(mlxsw_sx_port->dev);
 	} else {
-- 
1.9.3

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

* [patch net-next 11/12] mlxsw: Put braces on all arms of branch statement
  2015-10-28  9:16 [patch net-next 00/12] mlxsw: driver update Jiri Pirko
                   ` (9 preceding siblings ...)
  2015-10-28  9:17 ` [patch net-next 10/12] mlxsw: Put constant on the right side of comparisons Jiri Pirko
@ 2015-10-28  9:17 ` Jiri Pirko
  2015-10-28  9:17 ` [patch net-next 12/12] mlxsw: spectrum: Make mlxsw_sp_port_switchdev_ops static Jiri Pirko
  2015-10-30  3:27 ` [patch net-next 00/12] mlxsw: driver update David Miller
  12 siblings, 0 replies; 14+ messages in thread
From: Jiri Pirko @ 2015-10-28  9:17 UTC (permalink / raw)
  To: netdev; +Cc: davem, idosch, eladr, yotamg, ogerlitz, sagir

From: Or Gerlitz <ogerlitz@mellanox.com>

Fix a place where checkpatch complains that braces should be used
on all arms of this statement.

Signed-off-by: Or Gerlitz <ogerlitz@mellanox.com>
Signed-off-by: Jiri Pirko <jiri@mellanox.com>
Signed-off-by: Ido Schimmel <idosch@mellanox.com>
---
 drivers/net/ethernet/mellanox/mlxsw/pci.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/drivers/net/ethernet/mellanox/mlxsw/pci.c b/drivers/net/ethernet/mellanox/mlxsw/pci.c
index 371ea3f..de69e71 100644
--- a/drivers/net/ethernet/mellanox/mlxsw/pci.c
+++ b/drivers/net/ethernet/mellanox/mlxsw/pci.c
@@ -1662,8 +1662,9 @@ static int mlxsw_pci_cmd_exec(void *bus_priv, u16 opcode, u8 opcode_mod,
 							   CIR_OUT_PARAM_LO));
 			memcpy(out_mbox + sizeof(tmp), &tmp, sizeof(tmp));
 		}
-	} else if (!err && out_mbox)
+	} else if (!err && out_mbox) {
 		memcpy(out_mbox, mlxsw_pci->cmd.out_mbox.buf, out_mbox_size);
+	}
 
 	mutex_unlock(&mlxsw_pci->cmd.lock);
 
-- 
1.9.3

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

* [patch net-next 12/12] mlxsw: spectrum: Make mlxsw_sp_port_switchdev_ops static
  2015-10-28  9:16 [patch net-next 00/12] mlxsw: driver update Jiri Pirko
                   ` (10 preceding siblings ...)
  2015-10-28  9:17 ` [patch net-next 11/12] mlxsw: Put braces on all arms of branch statement Jiri Pirko
@ 2015-10-28  9:17 ` Jiri Pirko
  2015-10-30  3:27 ` [patch net-next 00/12] mlxsw: driver update David Miller
  12 siblings, 0 replies; 14+ messages in thread
From: Jiri Pirko @ 2015-10-28  9:17 UTC (permalink / raw)
  To: netdev; +Cc: davem, idosch, eladr, yotamg, ogerlitz, sagir

From: Jiri Pirko <jiri@mellanox.com>

Signed-off-by: Jiri Pirko <jiri@mellanox.com>
---
 drivers/net/ethernet/mellanox/mlxsw/spectrum_switchdev.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum_switchdev.c b/drivers/net/ethernet/mellanox/mlxsw/spectrum_switchdev.c
index c2d0969..617fb22 100644
--- a/drivers/net/ethernet/mellanox/mlxsw/spectrum_switchdev.c
+++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum_switchdev.c
@@ -732,7 +732,7 @@ static int mlxsw_sp_port_obj_dump(struct net_device *dev,
 	return err;
 }
 
-const struct switchdev_ops mlxsw_sp_port_switchdev_ops = {
+static const struct switchdev_ops mlxsw_sp_port_switchdev_ops = {
 	.switchdev_port_attr_get	= mlxsw_sp_port_attr_get,
 	.switchdev_port_attr_set	= mlxsw_sp_port_attr_set,
 	.switchdev_port_obj_add		= mlxsw_sp_port_obj_add,
-- 
1.9.3

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

* Re: [patch net-next 00/12] mlxsw: driver update
  2015-10-28  9:16 [patch net-next 00/12] mlxsw: driver update Jiri Pirko
                   ` (11 preceding siblings ...)
  2015-10-28  9:17 ` [patch net-next 12/12] mlxsw: spectrum: Make mlxsw_sp_port_switchdev_ops static Jiri Pirko
@ 2015-10-30  3:27 ` David Miller
  12 siblings, 0 replies; 14+ messages in thread
From: David Miller @ 2015-10-30  3:27 UTC (permalink / raw)
  To: jiri; +Cc: netdev, idosch, eladr, yotamg, ogerlitz, sagir

From: Jiri Pirko <jiri@resnulli.us>
Date: Wed, 28 Oct 2015 10:16:53 +0100

> This driver update mainly brings support for user to be able to setup
> flooding on specified port, via bridge flag. Also, there is a fix in ageing
> time conversion. The rest is just cosmetics.

Series applied, thanks Jiri.

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

end of thread, other threads:[~2015-10-30  3:27 UTC | newest]

Thread overview: 14+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-10-28  9:16 [patch net-next 00/12] mlxsw: driver update Jiri Pirko
2015-10-28  9:16 ` [patch net-next 01/12] switchdev: Add support for flood control Jiri Pirko
2015-10-28  9:16 ` [patch net-next 02/12] switchdev: Make flood to CPU optional Jiri Pirko
2015-10-28  9:16 ` [patch net-next 03/12] mlxsw: spectrum: move "bridged" bool to u8 flags Jiri Pirko
2015-10-28  9:16 ` [patch net-next 04/12] mlxsw: spectrum: Add support for VLAN ranges in flooding configuration Jiri Pirko
2015-10-28  9:16 ` [patch net-next 05/12] mlxsw: spectrum: Add support for flood control Jiri Pirko
2015-10-28  9:16 ` [patch net-next 06/12] mlxsw: reg: Fix description for reg_sfd_uc_sub_port Jiri Pirko
2015-10-28  9:17 ` [patch net-next 07/12] mlxsw: reg: Fix desription typos of couple of SFN items Jiri Pirko
2015-10-28  9:17 ` [patch net-next 08/12] mlxsw: reg: Avoid unnecessary line wrap for mlxsw_reg_sfd_uc_unpack Jiri Pirko
2015-10-28  9:17 ` [patch net-next 09/12] mlxsw: spectrum: Fix ageing time value Jiri Pirko
2015-10-28  9:17 ` [patch net-next 10/12] mlxsw: Put constant on the right side of comparisons Jiri Pirko
2015-10-28  9:17 ` [patch net-next 11/12] mlxsw: Put braces on all arms of branch statement Jiri Pirko
2015-10-28  9:17 ` [patch net-next 12/12] mlxsw: spectrum: Make mlxsw_sp_port_switchdev_ops static Jiri Pirko
2015-10-30  3:27 ` [patch net-next 00/12] mlxsw: driver update David Miller

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).