netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [pull request][net-next 00/14] Mellanox, mlx5 cleanups & port congestion stats
@ 2019-09-05 21:50 Saeed Mahameed
  2019-09-05 21:50 ` [net-next 01/14] net/mlx5e: Fix static checker warning of potential pointer math issue Saeed Mahameed
                   ` (14 more replies)
  0 siblings, 15 replies; 16+ messages in thread
From: Saeed Mahameed @ 2019-09-05 21:50 UTC (permalink / raw)
  To: David S. Miller; +Cc: netdev, Saeed Mahameed

Hi Dave,

This series provides 12 mlx5 cleanup patches and last 2 patches provide
port congestion stats to ethtool.

For more information please see tag log below.

Please pull and let me know if there is any problem.

Thanks,
Saeed.

---
The following changes since commit 0e5b36bc4c1fccfc18dd851d960781589c16dae8:

  r8152: adjust the settings of ups flags (2019-09-05 12:41:11 +0200)

are available in the Git repository at:

  git://git.kernel.org/pub/scm/linux/kernel/git/saeed/linux.git tags/mlx5-updates-2019-09-05

for you to fetch changes up to 1297d97f4862ad690d882ae5b0487e3d1ff15953:

  net/mlx5e: Add port buffer's congestion counters (2019-09-05 14:44:43 -0700)

----------------------------------------------------------------
mlx5-updates-2019-09-05

1) Allover mlx5 cleanups

2) Added port congestion counters to ethtool stats:

Add 3 counters per priority to ethtool using PPCNT:
  2.1) rx_prio[p]_buf_discard - the number of packets discarded by device
       due to lack of per host receive buffers
  2.2) rx_prio[p]_cong_discard - the number of packets discarded by device
       due to per host congestion
  2.3) rx_prio[p]_marked - the number of packets ECN marked by device due
       to per host congestion

----------------------------------------------------------------
Aya Levin (2):
      net/mlx5: Expose HW capability bits for port buffer per priority congestion counters
      net/mlx5e: Add port buffer's congestion counters

Colin Ian King (2):
      net/mlx5: fix spelling mistake "offlaods" -> "offloads"
      net/mlx5: fix missing assignment of variable err

Eran Ben Elisha (1):
      net/mlx5e: Fix static checker warning of potential pointer math issue

Mao Wenan (1):
      net/mlx5: Kconfig: Fix MLX5_CORE dependency with PCI_HYPERV_INTERFACE

Maxim Mikityanskiy (1):
      net/mlx5e: Remove unnecessary clear_bit()s

Roi Dayan (1):
      net/mlx5e: Remove leftover declaration

Saeed Mahameed (2):
      net/mlx5e: Use ipv6_stub to avoid dependency with ipv6 being a module
      net/mlx5: DR, Remove redundant dev_name print from err log

Tariq Toukan (1):
      net/mlx5e: kTLS, Remove unused function parameter

Wei Yongjun (2):
      net/mlx5: DR, Remove useless set memory to zero use memset()
      net/mlx5: DR, Fix error return code in dr_domain_init_resources()

zhong jiang (1):
      net/mlx5: Use PTR_ERR_OR_ZERO rather than its implementation

 drivers/net/ethernet/mellanox/mlx5/core/Kconfig    |   2 +-
 drivers/net/ethernet/mellanox/mlx5/core/devlink.c  |   2 +-
 .../ethernet/mellanox/mlx5/core/en/hv_vhca_stats.c |   9 +-
 .../ethernet/mellanox/mlx5/core/en_accel/ktls_tx.c |   6 +-
 drivers/net/ethernet/mellanox/mlx5/core/en_main.c  |   2 -
 drivers/net/ethernet/mellanox/mlx5/core/en_rep.c   |  23 ++--
 drivers/net/ethernet/mellanox/mlx5/core/en_rep.h   |   1 -
 drivers/net/ethernet/mellanox/mlx5/core/en_stats.c | 149 ++++++++++++++++++++-
 drivers/net/ethernet/mellanox/mlx5/core/en_stats.h |   2 +
 drivers/net/ethernet/mellanox/mlx5/core/en_tc.c    |   7 +-
 .../ethernet/mellanox/mlx5/core/eswitch_offloads.c |   2 +-
 .../mellanox/mlx5/core/steering/dr_domain.c        |  18 ++-
 .../ethernet/mellanox/mlx5/core/steering/dr_send.c |   1 -
 include/linux/mlx5/device.h                        |   1 +
 include/linux/mlx5/mlx5_ifc.h                      |  29 +++-
 15 files changed, 207 insertions(+), 47 deletions(-)

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

* [net-next 01/14] net/mlx5e: Fix static checker warning of potential pointer math issue
  2019-09-05 21:50 [pull request][net-next 00/14] Mellanox, mlx5 cleanups & port congestion stats Saeed Mahameed
@ 2019-09-05 21:50 ` Saeed Mahameed
  2019-09-05 21:50 ` [net-next 02/14] net/mlx5: Kconfig: Fix MLX5_CORE dependency with PCI_HYPERV_INTERFACE Saeed Mahameed
                   ` (13 subsequent siblings)
  14 siblings, 0 replies; 16+ messages in thread
From: Saeed Mahameed @ 2019-09-05 21:50 UTC (permalink / raw)
  To: David S. Miller; +Cc: netdev, Eran Ben Elisha, Dan Carpenter, Saeed Mahameed

From: Eran Ben Elisha <eranbe@mellanox.com>

Cited patch have an issue in WARN_ON_ONCE check, with wrong address ranges
are compared. Fix that by changing pointer types from u64* to void*. This
will also make code simpler to read.

In addition mlx5e_hv_vhca_fill_ring_stats can get void pointer, so remove
the unnecessary casting when calling it.

Found by static checker:
drivers/net/ethernet/mellanox/mlx5/core/en/hv_vhca_stats.c:41 mlx5e_hv_vhca_fill_stats()
warn: potential pointer math issue ('buf' is a u64 pointer)

Fixes: cef35af34d6d ("net/mlx5e: Add mlx5e HV VHCA stats agent")
Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
Signed-off-by: Eran Ben Elisha <eranbe@mellanox.com>
Signed-off-by: Saeed Mahameed <saeedm@mellanox.com>
---
 .../net/ethernet/mellanox/mlx5/core/en/hv_vhca_stats.c   | 9 ++++-----
 1 file changed, 4 insertions(+), 5 deletions(-)

diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en/hv_vhca_stats.c b/drivers/net/ethernet/mellanox/mlx5/core/en/hv_vhca_stats.c
index c37b4acd9bd5..b3a249b2a482 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/en/hv_vhca_stats.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/en/hv_vhca_stats.c
@@ -30,22 +30,21 @@ mlx5e_hv_vhca_fill_ring_stats(struct mlx5e_priv *priv, int ch,
 	}
 }
 
-static void mlx5e_hv_vhca_fill_stats(struct mlx5e_priv *priv, u64 *data,
+static void mlx5e_hv_vhca_fill_stats(struct mlx5e_priv *priv, void *data,
 				     int buf_len)
 {
 	int ch, i = 0;
 
 	for (ch = 0; ch < priv->max_nch; ch++) {
-		u64 *buf = data + i;
+		void *buf = data + i;
 
 		if (WARN_ON_ONCE(buf +
 				 sizeof(struct mlx5e_hv_vhca_per_ring_stats) >
 				 data + buf_len))
 			return;
 
-		mlx5e_hv_vhca_fill_ring_stats(priv, ch,
-					      (struct mlx5e_hv_vhca_per_ring_stats *)buf);
-		i += sizeof(struct mlx5e_hv_vhca_per_ring_stats) / sizeof(u64);
+		mlx5e_hv_vhca_fill_ring_stats(priv, ch, buf);
+		i += sizeof(struct mlx5e_hv_vhca_per_ring_stats);
 	}
 }
 
-- 
2.21.0


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

* [net-next 02/14] net/mlx5: Kconfig: Fix MLX5_CORE dependency with PCI_HYPERV_INTERFACE
  2019-09-05 21:50 [pull request][net-next 00/14] Mellanox, mlx5 cleanups & port congestion stats Saeed Mahameed
  2019-09-05 21:50 ` [net-next 01/14] net/mlx5e: Fix static checker warning of potential pointer math issue Saeed Mahameed
@ 2019-09-05 21:50 ` Saeed Mahameed
  2019-09-05 21:50 ` [net-next 03/14] net/mlx5e: Use ipv6_stub to avoid dependency with ipv6 being a module Saeed Mahameed
                   ` (12 subsequent siblings)
  14 siblings, 0 replies; 16+ messages in thread
From: Saeed Mahameed @ 2019-09-05 21:50 UTC (permalink / raw)
  To: David S. Miller; +Cc: netdev, Mao Wenan, Saeed Mahameed

From: Mao Wenan <maowenan@huawei.com>

When MLX5_CORE=y and PCI_HYPERV_INTERFACE=m, below errors are found:
drivers/net/ethernet/mellanox/mlx5/core/en_main.o: In function `mlx5e_nic_enable':
en_main.c:(.text+0xb649): undefined reference to `mlx5e_hv_vhca_stats_create'
drivers/net/ethernet/mellanox/mlx5/core/en_main.o: In function `mlx5e_nic_disable':
en_main.c:(.text+0xb8c4): undefined reference to `mlx5e_hv_vhca_stats_destroy'

Fix this by making MLX5_CORE imply PCI_HYPERV_INTERFACE.

Fixes: cef35af34d6d ("net/mlx5e: Add mlx5e HV VHCA stats agent")
Signed-off-by: Mao Wenan <maowenan@huawei.com>
Signed-off-by: Saeed Mahameed <saeedm@mellanox.com>
---
 drivers/net/ethernet/mellanox/mlx5/core/Kconfig | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/net/ethernet/mellanox/mlx5/core/Kconfig b/drivers/net/ethernet/mellanox/mlx5/core/Kconfig
index 0d8dd885b7d6..a496f2ac20b0 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/Kconfig
+++ b/drivers/net/ethernet/mellanox/mlx5/core/Kconfig
@@ -10,6 +10,7 @@ config MLX5_CORE
 	imply PTP_1588_CLOCK
 	imply VXLAN
 	imply MLXFW
+	imply PCI_HYPERV_INTERFACE
 	default n
 	---help---
 	  Core driver for low level functionality of the ConnectX-4 and
-- 
2.21.0


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

* [net-next 03/14] net/mlx5e: Use ipv6_stub to avoid dependency with ipv6 being a module
  2019-09-05 21:50 [pull request][net-next 00/14] Mellanox, mlx5 cleanups & port congestion stats Saeed Mahameed
  2019-09-05 21:50 ` [net-next 01/14] net/mlx5e: Fix static checker warning of potential pointer math issue Saeed Mahameed
  2019-09-05 21:50 ` [net-next 02/14] net/mlx5: Kconfig: Fix MLX5_CORE dependency with PCI_HYPERV_INTERFACE Saeed Mahameed
@ 2019-09-05 21:50 ` Saeed Mahameed
  2019-09-05 21:51 ` [net-next 04/14] net/mlx5e: Remove leftover declaration Saeed Mahameed
                   ` (11 subsequent siblings)
  14 siblings, 0 replies; 16+ messages in thread
From: Saeed Mahameed @ 2019-09-05 21:50 UTC (permalink / raw)
  To: David S. Miller
  Cc: netdev, Saeed Mahameed, Walter Harms, Mark Bloch, Vlad Buslov

mlx5 is dependent on IPv6 tristate since we use ipv6's nd_tbl directly,
alternatively we can use ipv6_stub->nd_tbl and remove the dependency.

Reported-by: Walter Harms <wharms@bfs.de>
Reviewed-by: Mark Bloch <markb@mellanox.com>
Reviewed-by: Vlad Buslov <vladbu@mellanox.com>
Signed-off-by: Saeed Mahameed <saeedm@mellanox.com>
---
 .../net/ethernet/mellanox/mlx5/core/Kconfig   |  1 -
 .../net/ethernet/mellanox/mlx5/core/en_rep.c  | 23 +++++++++++--------
 .../net/ethernet/mellanox/mlx5/core/en_tc.c   |  2 +-
 3 files changed, 14 insertions(+), 12 deletions(-)

diff --git a/drivers/net/ethernet/mellanox/mlx5/core/Kconfig b/drivers/net/ethernet/mellanox/mlx5/core/Kconfig
index a496f2ac20b0..0dba272a5b2f 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/Kconfig
+++ b/drivers/net/ethernet/mellanox/mlx5/core/Kconfig
@@ -33,7 +33,6 @@ config MLX5_FPGA
 config MLX5_CORE_EN
 	bool "Mellanox 5th generation network adapters (ConnectX series) Ethernet support"
 	depends on NETDEVICES && ETHERNET && INET && PCI && MLX5_CORE
-	depends on IPV6=y || IPV6=n || MLX5_CORE=m
 	select PAGE_POOL
 	select DIMLIB
 	default n
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_rep.c b/drivers/net/ethernet/mellanox/mlx5/core/en_rep.c
index 1623cd32f303..95892a3b63a1 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/en_rep.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/en_rep.c
@@ -38,6 +38,7 @@
 #include <net/netevent.h>
 #include <net/arp.h>
 #include <net/devlink.h>
+#include <net/ipv6_stubs.h>
 
 #include "eswitch.h"
 #include "en.h"
@@ -499,16 +500,18 @@ void mlx5e_remove_sqs_fwd_rules(struct mlx5e_priv *priv)
 	mlx5e_sqs2vport_stop(esw, rep);
 }
 
+static unsigned long mlx5e_rep_ipv6_interval(void)
+{
+	if (IS_ENABLED(CONFIG_IPV6) && ipv6_stub->nd_tbl)
+		return NEIGH_VAR(&ipv6_stub->nd_tbl->parms, DELAY_PROBE_TIME);
+
+	return ~0UL;
+}
+
 static void mlx5e_rep_neigh_update_init_interval(struct mlx5e_rep_priv *rpriv)
 {
-#if IS_ENABLED(CONFIG_IPV6)
-	unsigned long ipv6_interval = NEIGH_VAR(&nd_tbl.parms,
-						DELAY_PROBE_TIME);
-#else
-	unsigned long ipv6_interval = ~0UL;
-#endif
-	unsigned long ipv4_interval = NEIGH_VAR(&arp_tbl.parms,
-						DELAY_PROBE_TIME);
+	unsigned long ipv4_interval = NEIGH_VAR(&arp_tbl.parms, DELAY_PROBE_TIME);
+	unsigned long ipv6_interval = mlx5e_rep_ipv6_interval();
 	struct net_device *netdev = rpriv->netdev;
 	struct mlx5e_priv *priv = netdev_priv(netdev);
 
@@ -917,7 +920,7 @@ static int mlx5e_rep_netevent_event(struct notifier_block *nb,
 	case NETEVENT_NEIGH_UPDATE:
 		n = ptr;
 #if IS_ENABLED(CONFIG_IPV6)
-		if (n->tbl != &nd_tbl && n->tbl != &arp_tbl)
+		if (n->tbl != ipv6_stub->nd_tbl && n->tbl != &arp_tbl)
 #else
 		if (n->tbl != &arp_tbl)
 #endif
@@ -944,7 +947,7 @@ static int mlx5e_rep_netevent_event(struct notifier_block *nb,
 		 * done per device delay prob time parameter.
 		 */
 #if IS_ENABLED(CONFIG_IPV6)
-		if (!p->dev || (p->tbl != &nd_tbl && p->tbl != &arp_tbl))
+		if (!p->dev || (p->tbl != ipv6_stub->nd_tbl && p->tbl != &arp_tbl))
 #else
 		if (!p->dev || p->tbl != &arp_tbl)
 #endif
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_tc.c b/drivers/net/ethernet/mellanox/mlx5/core/en_tc.c
index 30d26eba75a3..98d1f7a48304 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/en_tc.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/en_tc.c
@@ -1492,7 +1492,7 @@ void mlx5e_tc_update_neigh_used_value(struct mlx5e_neigh_hash_entry *nhe)
 		tbl = &arp_tbl;
 #if IS_ENABLED(CONFIG_IPV6)
 	else if (m_neigh->family == AF_INET6)
-		tbl = &nd_tbl;
+		tbl = ipv6_stub->nd_tbl;
 #endif
 	else
 		return;
-- 
2.21.0


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

* [net-next 04/14] net/mlx5e: Remove leftover declaration
  2019-09-05 21:50 [pull request][net-next 00/14] Mellanox, mlx5 cleanups & port congestion stats Saeed Mahameed
                   ` (2 preceding siblings ...)
  2019-09-05 21:50 ` [net-next 03/14] net/mlx5e: Use ipv6_stub to avoid dependency with ipv6 being a module Saeed Mahameed
@ 2019-09-05 21:51 ` Saeed Mahameed
  2019-09-05 21:51 ` [net-next 05/14] net/mlx5: fix spelling mistake "offlaods" -> "offloads" Saeed Mahameed
                   ` (10 subsequent siblings)
  14 siblings, 0 replies; 16+ messages in thread
From: Saeed Mahameed @ 2019-09-05 21:51 UTC (permalink / raw)
  To: David S. Miller; +Cc: netdev, Roi Dayan, Vlad Buslov, Saeed Mahameed

From: Roi Dayan <roid@mellanox.com>

This function was removed in the cited commit below.

Fixes: 13e509a4c194 ("net/mlx5e: Remove leftover code from the PF netdev being uplink rep")
Signed-off-by: Roi Dayan <roid@mellanox.com>
Reviewed-by: Vlad Buslov <vladbu@mellanox.com>
Signed-off-by: Saeed Mahameed <saeedm@mellanox.com>
---
 drivers/net/ethernet/mellanox/mlx5/core/en_rep.h | 1 -
 1 file changed, 1 deletion(-)

diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_rep.h b/drivers/net/ethernet/mellanox/mlx5/core/en_rep.h
index 8e512216deb8..31f83c8adcc9 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/en_rep.h
+++ b/drivers/net/ethernet/mellanox/mlx5/core/en_rep.h
@@ -183,7 +183,6 @@ struct mlx5e_rep_sq {
 	struct list_head	 list;
 };
 
-void *mlx5e_alloc_nic_rep_priv(struct mlx5_core_dev *mdev);
 void mlx5e_rep_register_vport_reps(struct mlx5_core_dev *mdev);
 void mlx5e_rep_unregister_vport_reps(struct mlx5_core_dev *mdev);
 bool mlx5e_is_uplink_rep(struct mlx5e_priv *priv);
-- 
2.21.0


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

* [net-next 05/14] net/mlx5: fix spelling mistake "offlaods" -> "offloads"
  2019-09-05 21:50 [pull request][net-next 00/14] Mellanox, mlx5 cleanups & port congestion stats Saeed Mahameed
                   ` (3 preceding siblings ...)
  2019-09-05 21:51 ` [net-next 04/14] net/mlx5e: Remove leftover declaration Saeed Mahameed
@ 2019-09-05 21:51 ` Saeed Mahameed
  2019-09-05 21:51 ` [net-next 06/14] net/mlx5: fix missing assignment of variable err Saeed Mahameed
                   ` (9 subsequent siblings)
  14 siblings, 0 replies; 16+ messages in thread
From: Saeed Mahameed @ 2019-09-05 21:51 UTC (permalink / raw)
  To: David S. Miller; +Cc: netdev, Colin Ian King, Saeed Mahameed

From: Colin Ian King <colin.king@canonical.com>

There is a spelling mistake in a NL_SET_ERR_MSG_MOD error message.
Fix it.

Signed-off-by: Colin Ian King <colin.king@canonical.com>
Signed-off-by: Saeed Mahameed <saeedm@mellanox.com>
---
 drivers/net/ethernet/mellanox/mlx5/core/devlink.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/net/ethernet/mellanox/mlx5/core/devlink.c b/drivers/net/ethernet/mellanox/mlx5/core/devlink.c
index 7bf7b6fbc776..381925c90d94 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/devlink.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/devlink.c
@@ -133,7 +133,7 @@ static int mlx5_devlink_fs_mode_validate(struct devlink *devlink, u32 id,
 
 		else if (eswitch_mode == MLX5_ESWITCH_OFFLOADS) {
 			NL_SET_ERR_MSG_MOD(extack,
-					   "Software managed steering is not supported when eswitch offlaods enabled.");
+					   "Software managed steering is not supported when eswitch offloads enabled.");
 			err = -EOPNOTSUPP;
 		}
 	} else {
-- 
2.21.0


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

* [net-next 06/14] net/mlx5: fix missing assignment of variable err
  2019-09-05 21:50 [pull request][net-next 00/14] Mellanox, mlx5 cleanups & port congestion stats Saeed Mahameed
                   ` (4 preceding siblings ...)
  2019-09-05 21:51 ` [net-next 05/14] net/mlx5: fix spelling mistake "offlaods" -> "offloads" Saeed Mahameed
@ 2019-09-05 21:51 ` Saeed Mahameed
  2019-09-05 21:51 ` [net-next 07/14] net/mlx5: Use PTR_ERR_OR_ZERO rather than its implementation Saeed Mahameed
                   ` (8 subsequent siblings)
  14 siblings, 0 replies; 16+ messages in thread
From: Saeed Mahameed @ 2019-09-05 21:51 UTC (permalink / raw)
  To: David S. Miller; +Cc: netdev, Colin Ian King, Saeed Mahameed

From: Colin Ian King <colin.king@canonical.com>

The error return from a call to mlx5_flow_namespace_set_peer is not
being assigned to variable err and hence the error check following
the call is currently not working.  Fix this by assigning ret as
intended.

Addresses-Coverity: ("Logically dead code")
Fixes: 8463daf17e80 ("net/mlx5: Add support to use SMFS in switchdev mode")
Signed-off-by: Colin Ian King <colin.king@canonical.com>
Signed-off-by: Saeed Mahameed <saeedm@mellanox.com>
---
 drivers/net/ethernet/mellanox/mlx5/core/eswitch_offloads.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/net/ethernet/mellanox/mlx5/core/eswitch_offloads.c b/drivers/net/ethernet/mellanox/mlx5/core/eswitch_offloads.c
index afa623b15a38..00d71db15f22 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/eswitch_offloads.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/eswitch_offloads.c
@@ -1651,7 +1651,7 @@ static int mlx5_esw_offloads_set_ns_peer(struct mlx5_eswitch *esw,
 		if (err)
 			return err;
 
-		mlx5_flow_namespace_set_peer(peer_ns, ns);
+		err = mlx5_flow_namespace_set_peer(peer_ns, ns);
 		if (err) {
 			mlx5_flow_namespace_set_peer(ns, NULL);
 			return err;
-- 
2.21.0


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

* [net-next 07/14] net/mlx5: Use PTR_ERR_OR_ZERO rather than its implementation
  2019-09-05 21:50 [pull request][net-next 00/14] Mellanox, mlx5 cleanups & port congestion stats Saeed Mahameed
                   ` (5 preceding siblings ...)
  2019-09-05 21:51 ` [net-next 06/14] net/mlx5: fix missing assignment of variable err Saeed Mahameed
@ 2019-09-05 21:51 ` Saeed Mahameed
  2019-09-05 21:51 ` [net-next 08/14] net/mlx5e: kTLS, Remove unused function parameter Saeed Mahameed
                   ` (7 subsequent siblings)
  14 siblings, 0 replies; 16+ messages in thread
From: Saeed Mahameed @ 2019-09-05 21:51 UTC (permalink / raw)
  To: David S. Miller; +Cc: netdev, zhong jiang, Saeed Mahameed

From: zhong jiang <zhongjiang@huawei.com>

PTR_ERR_OR_ZERO contains if(IS_ERR(...)) + PTR_ERR. It is better
to use it directly. hence just replace it.

Signed-off-by: zhong jiang <zhongjiang@huawei.com>
Acked-by: Saeed Mahameed <saeedm@mellanox.com>
Signed-off-by: Saeed Mahameed <saeedm@mellanox.com>
---
 drivers/net/ethernet/mellanox/mlx5/core/en_tc.c | 5 +----
 1 file changed, 1 insertion(+), 4 deletions(-)

diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_tc.c b/drivers/net/ethernet/mellanox/mlx5/core/en_tc.c
index 98d1f7a48304..da7555fdb4d5 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/en_tc.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/en_tc.c
@@ -988,10 +988,7 @@ mlx5e_tc_add_nic_flow(struct mlx5e_priv *priv,
 					    &flow_act, dest, dest_ix);
 	mutex_unlock(&priv->fs.tc.t_lock);
 
-	if (IS_ERR(flow->rule[0]))
-		return PTR_ERR(flow->rule[0]);
-
-	return 0;
+	return PTR_ERR_OR_ZERO(flow->rule[0]);
 }
 
 static void mlx5e_tc_del_nic_flow(struct mlx5e_priv *priv,
-- 
2.21.0


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

* [net-next 08/14] net/mlx5e: kTLS, Remove unused function parameter
  2019-09-05 21:50 [pull request][net-next 00/14] Mellanox, mlx5 cleanups & port congestion stats Saeed Mahameed
                   ` (6 preceding siblings ...)
  2019-09-05 21:51 ` [net-next 07/14] net/mlx5: Use PTR_ERR_OR_ZERO rather than its implementation Saeed Mahameed
@ 2019-09-05 21:51 ` Saeed Mahameed
  2019-09-05 21:51 ` [net-next 09/14] net/mlx5e: Remove unnecessary clear_bit()s Saeed Mahameed
                   ` (6 subsequent siblings)
  14 siblings, 0 replies; 16+ messages in thread
From: Saeed Mahameed @ 2019-09-05 21:51 UTC (permalink / raw)
  To: David S. Miller; +Cc: netdev, Tariq Toukan, Eran Ben Elisha, Saeed Mahameed

From: Tariq Toukan <tariqt@mellanox.com>

SKB parameter is no longer used in tx_post_resync_dump(),
remove it.

Signed-off-by: Tariq Toukan <tariqt@mellanox.com>
Reviewed-by: Eran Ben Elisha <eranbe@mellanox.com>
Signed-off-by: Saeed Mahameed <saeedm@mellanox.com>
---
 drivers/net/ethernet/mellanox/mlx5/core/en_accel/ktls_tx.c | 6 ++----
 1 file changed, 2 insertions(+), 4 deletions(-)

diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_accel/ktls_tx.c b/drivers/net/ethernet/mellanox/mlx5/core/en_accel/ktls_tx.c
index e5222d17df35..d195366461c9 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/en_accel/ktls_tx.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/en_accel/ktls_tx.c
@@ -256,8 +256,7 @@ struct mlx5e_dump_wqe {
 };
 
 static int
-tx_post_resync_dump(struct mlx5e_txqsq *sq, struct sk_buff *skb,
-		    skb_frag_t *frag, u32 tisn, bool first)
+tx_post_resync_dump(struct mlx5e_txqsq *sq, skb_frag_t *frag, u32 tisn, bool first)
 {
 	struct mlx5_wqe_ctrl_seg *cseg;
 	struct mlx5_wqe_data_seg *dseg;
@@ -371,8 +370,7 @@ mlx5e_ktls_tx_handle_ooo(struct mlx5e_ktls_offload_context_tx *priv_tx,
 	tx_post_resync_params(sq, priv_tx, info.rcd_sn);
 
 	for (i = 0; i < info.nr_frags; i++)
-		if (tx_post_resync_dump(sq, skb, info.frags[i],
-					priv_tx->tisn, !i))
+		if (tx_post_resync_dump(sq, info.frags[i], priv_tx->tisn, !i))
 			goto err_out;
 
 	/* If no dump WQE was sent, we need to have a fence NOP WQE before the
-- 
2.21.0


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

* [net-next 09/14] net/mlx5e: Remove unnecessary clear_bit()s
  2019-09-05 21:50 [pull request][net-next 00/14] Mellanox, mlx5 cleanups & port congestion stats Saeed Mahameed
                   ` (7 preceding siblings ...)
  2019-09-05 21:51 ` [net-next 08/14] net/mlx5e: kTLS, Remove unused function parameter Saeed Mahameed
@ 2019-09-05 21:51 ` Saeed Mahameed
  2019-09-05 21:51 ` [net-next 10/14] net/mlx5: DR, Remove useless set memory to zero use memset() Saeed Mahameed
                   ` (5 subsequent siblings)
  14 siblings, 0 replies; 16+ messages in thread
From: Saeed Mahameed @ 2019-09-05 21:51 UTC (permalink / raw)
  To: David S. Miller; +Cc: netdev, Maxim Mikityanskiy, Saeed Mahameed

From: Maxim Mikityanskiy <maximmi@mellanox.com>

Don't clear MLX5E_SQ_STATE_ENABLED on error in mlx5e_open_txqsq and
mlx5e_open_icosq, because it's not set there, and is 0 by default.

Fixes: acc6c5953af1 ("net/mlx5e: Split open/close channels to stages")
Fixes: 9d18b5144a0a ("net/mlx5e: Split open/close ICOSQ into stages")
Signed-off-by: Maxim Mikityanskiy <maximmi@mellanox.com>
Signed-off-by: Saeed Mahameed <saeedm@mellanox.com>
---
 drivers/net/ethernet/mellanox/mlx5/core/en_main.c | 2 --
 1 file changed, 2 deletions(-)

diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_main.c b/drivers/net/ethernet/mellanox/mlx5/core/en_main.c
index dadadf221087..cd51cd56484b 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/en_main.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/en_main.c
@@ -1315,7 +1315,6 @@ static int mlx5e_open_txqsq(struct mlx5e_channel *c,
 	return 0;
 
 err_free_txqsq:
-	clear_bit(MLX5E_SQ_STATE_ENABLED, &sq->state);
 	mlx5e_free_txqsq(sq);
 
 	return err;
@@ -1403,7 +1402,6 @@ int mlx5e_open_icosq(struct mlx5e_channel *c, struct mlx5e_params *params,
 	return 0;
 
 err_free_icosq:
-	clear_bit(MLX5E_SQ_STATE_ENABLED, &sq->state);
 	mlx5e_free_icosq(sq);
 
 	return err;
-- 
2.21.0


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

* [net-next 10/14] net/mlx5: DR, Remove useless set memory to zero use memset()
  2019-09-05 21:50 [pull request][net-next 00/14] Mellanox, mlx5 cleanups & port congestion stats Saeed Mahameed
                   ` (8 preceding siblings ...)
  2019-09-05 21:51 ` [net-next 09/14] net/mlx5e: Remove unnecessary clear_bit()s Saeed Mahameed
@ 2019-09-05 21:51 ` Saeed Mahameed
  2019-09-05 21:51 ` [net-next 11/14] net/mlx5: DR, Fix error return code in dr_domain_init_resources() Saeed Mahameed
                   ` (4 subsequent siblings)
  14 siblings, 0 replies; 16+ messages in thread
From: Saeed Mahameed @ 2019-09-05 21:51 UTC (permalink / raw)
  To: David S. Miller; +Cc: netdev, Wei Yongjun, Saeed Mahameed

From: Wei Yongjun <weiyongjun1@huawei.com>

The memory return by kzalloc() has already be set to zero, so
remove useless memset(0).

Signed-off-by: Wei Yongjun <weiyongjun1@huawei.com>
Signed-off-by: Saeed Mahameed <saeedm@mellanox.com>
---
 drivers/net/ethernet/mellanox/mlx5/core/steering/dr_send.c | 1 -
 1 file changed, 1 deletion(-)

diff --git a/drivers/net/ethernet/mellanox/mlx5/core/steering/dr_send.c b/drivers/net/ethernet/mellanox/mlx5/core/steering/dr_send.c
index ef0dea44f3b3..5df8436b2ae3 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/steering/dr_send.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/steering/dr_send.c
@@ -899,7 +899,6 @@ int mlx5dr_send_ring_alloc(struct mlx5dr_domain *dmn)
 		goto clean_qp;
 	}
 
-	memset(dmn->send_ring->buf, 0, size);
 	dmn->send_ring->buf_size = size;
 
 	dmn->send_ring->mr = dr_reg_mr(dmn->mdev,
-- 
2.21.0


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

* [net-next 11/14] net/mlx5: DR, Fix error return code in dr_domain_init_resources()
  2019-09-05 21:50 [pull request][net-next 00/14] Mellanox, mlx5 cleanups & port congestion stats Saeed Mahameed
                   ` (9 preceding siblings ...)
  2019-09-05 21:51 ` [net-next 10/14] net/mlx5: DR, Remove useless set memory to zero use memset() Saeed Mahameed
@ 2019-09-05 21:51 ` Saeed Mahameed
  2019-09-05 21:51 ` [net-next 12/14] net/mlx5: DR, Remove redundant dev_name print from err log Saeed Mahameed
                   ` (3 subsequent siblings)
  14 siblings, 0 replies; 16+ messages in thread
From: Saeed Mahameed @ 2019-09-05 21:51 UTC (permalink / raw)
  To: David S. Miller; +Cc: netdev, Wei Yongjun, Saeed Mahameed

From: Wei Yongjun <weiyongjun1@huawei.com>

Fix to return negative error code -ENOMEM from the error handling
case instead of 0, as done elsewhere in this function.

Fixes: 4ec9e7b02697 ("net/mlx5: DR, Expose steering domain functionality")
Signed-off-by: Wei Yongjun <weiyongjun1@huawei.com>
Signed-off-by: Saeed Mahameed <saeedm@mellanox.com>
---
 drivers/net/ethernet/mellanox/mlx5/core/steering/dr_domain.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/drivers/net/ethernet/mellanox/mlx5/core/steering/dr_domain.c b/drivers/net/ethernet/mellanox/mlx5/core/steering/dr_domain.c
index 3b9cf0bccf4d..461cc2c30538 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/steering/dr_domain.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/steering/dr_domain.c
@@ -66,6 +66,7 @@ static int dr_domain_init_resources(struct mlx5dr_domain *dmn)
 	dmn->uar = mlx5_get_uars_page(dmn->mdev);
 	if (!dmn->uar) {
 		mlx5dr_err(dmn, "Couldn't allocate UAR\n");
+		ret = -ENOMEM;
 		goto clean_pd;
 	}
 
@@ -73,6 +74,7 @@ static int dr_domain_init_resources(struct mlx5dr_domain *dmn)
 	if (!dmn->ste_icm_pool) {
 		mlx5dr_err(dmn, "Couldn't get icm memory for %s\n",
 			   dev_name(dmn->mdev->device));
+		ret = -ENOMEM;
 		goto clean_uar;
 	}
 
@@ -80,6 +82,7 @@ static int dr_domain_init_resources(struct mlx5dr_domain *dmn)
 	if (!dmn->action_icm_pool) {
 		mlx5dr_err(dmn, "Couldn't get action icm memory for %s\n",
 			   dev_name(dmn->mdev->device));
+		ret = -ENOMEM;
 		goto free_ste_icm_pool;
 	}
 
-- 
2.21.0


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

* [net-next 12/14] net/mlx5: DR, Remove redundant dev_name print from err log
  2019-09-05 21:50 [pull request][net-next 00/14] Mellanox, mlx5 cleanups & port congestion stats Saeed Mahameed
                   ` (10 preceding siblings ...)
  2019-09-05 21:51 ` [net-next 11/14] net/mlx5: DR, Fix error return code in dr_domain_init_resources() Saeed Mahameed
@ 2019-09-05 21:51 ` Saeed Mahameed
  2019-09-05 21:51 ` [net-next 13/14] net/mlx5: Expose HW capability bits for port buffer per priority congestion counters Saeed Mahameed
                   ` (2 subsequent siblings)
  14 siblings, 0 replies; 16+ messages in thread
From: Saeed Mahameed @ 2019-09-05 21:51 UTC (permalink / raw)
  To: David S. Miller; +Cc: netdev, Saeed Mahameed

mlx5_core_err already prints the name of the device.

Signed-off-by: Saeed Mahameed <saeedm@mellanox.com>
---
 .../mellanox/mlx5/core/steering/dr_domain.c       | 15 +++++----------
 1 file changed, 5 insertions(+), 10 deletions(-)

diff --git a/drivers/net/ethernet/mellanox/mlx5/core/steering/dr_domain.c b/drivers/net/ethernet/mellanox/mlx5/core/steering/dr_domain.c
index 461cc2c30538..5b24732b18c0 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/steering/dr_domain.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/steering/dr_domain.c
@@ -72,24 +72,21 @@ static int dr_domain_init_resources(struct mlx5dr_domain *dmn)
 
 	dmn->ste_icm_pool = mlx5dr_icm_pool_create(dmn, DR_ICM_TYPE_STE);
 	if (!dmn->ste_icm_pool) {
-		mlx5dr_err(dmn, "Couldn't get icm memory for %s\n",
-			   dev_name(dmn->mdev->device));
+		mlx5dr_err(dmn, "Couldn't get icm memory\n");
 		ret = -ENOMEM;
 		goto clean_uar;
 	}
 
 	dmn->action_icm_pool = mlx5dr_icm_pool_create(dmn, DR_ICM_TYPE_MODIFY_ACTION);
 	if (!dmn->action_icm_pool) {
-		mlx5dr_err(dmn, "Couldn't get action icm memory for %s\n",
-			   dev_name(dmn->mdev->device));
+		mlx5dr_err(dmn, "Couldn't get action icm memory\n");
 		ret = -ENOMEM;
 		goto free_ste_icm_pool;
 	}
 
 	ret = mlx5dr_send_ring_alloc(dmn);
 	if (ret) {
-		mlx5dr_err(dmn, "Couldn't create send-ring for %s\n",
-			   dev_name(dmn->mdev->device));
+		mlx5dr_err(dmn, "Couldn't create send-ring\n");
 		goto free_action_icm_pool;
 	}
 
@@ -312,16 +309,14 @@ mlx5dr_domain_create(struct mlx5_core_dev *mdev, enum mlx5dr_domain_type type)
 					    dmn->info.caps.log_icm_size);
 
 	if (!dmn->info.supp_sw_steering) {
-		mlx5dr_err(dmn, "SW steering not supported for %s\n",
-			   dev_name(mdev->device));
+		mlx5dr_err(dmn, "SW steering is not supported\n");
 		goto uninit_caps;
 	}
 
 	/* Allocate resources */
 	ret = dr_domain_init_resources(dmn);
 	if (ret) {
-		mlx5dr_err(dmn, "Failed init domain resources for %s\n",
-			   dev_name(mdev->device));
+		mlx5dr_err(dmn, "Failed init domain resources\n");
 		goto uninit_caps;
 	}
 
-- 
2.21.0


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

* [net-next 13/14] net/mlx5: Expose HW capability bits for port buffer per priority congestion counters
  2019-09-05 21:50 [pull request][net-next 00/14] Mellanox, mlx5 cleanups & port congestion stats Saeed Mahameed
                   ` (11 preceding siblings ...)
  2019-09-05 21:51 ` [net-next 12/14] net/mlx5: DR, Remove redundant dev_name print from err log Saeed Mahameed
@ 2019-09-05 21:51 ` Saeed Mahameed
  2019-09-05 21:51 ` [net-next 14/14] net/mlx5e: Add port buffer's " Saeed Mahameed
  2019-09-07 15:40 ` [pull request][net-next 00/14] Mellanox, mlx5 cleanups & port congestion stats David Miller
  14 siblings, 0 replies; 16+ messages in thread
From: Saeed Mahameed @ 2019-09-05 21:51 UTC (permalink / raw)
  To: David S. Miller; +Cc: netdev, Aya Levin, Moshe Shemesh, Saeed Mahameed

From: Aya Levin <ayal@mellanox.com>

Map capability bit indicating that HCA supports port buffer's congestion
counters. Also map registers with the corresponding counters.

Signed-off-by: Aya Levin <ayal@mellanox.com>
Reviewed-by: Moshe Shemesh <moshe@mellanox.com>
Signed-off-by: Saeed Mahameed <saeedm@mellanox.com>
---
 include/linux/mlx5/device.h   |  1 +
 include/linux/mlx5/mlx5_ifc.h | 29 ++++++++++++++++++++++++-----
 2 files changed, 25 insertions(+), 5 deletions(-)

diff --git a/include/linux/mlx5/device.h b/include/linux/mlx5/device.h
index 8dd081051a79..f3773e8536bb 100644
--- a/include/linux/mlx5/device.h
+++ b/include/linux/mlx5/device.h
@@ -1316,6 +1316,7 @@ enum {
 	MLX5_PER_PRIORITY_COUNTERS_GROUP      = 0x10,
 	MLX5_PER_TRAFFIC_CLASS_COUNTERS_GROUP = 0x11,
 	MLX5_PHYSICAL_LAYER_COUNTERS_GROUP    = 0x12,
+	MLX5_PER_TRAFFIC_CLASS_CONGESTION_GROUP = 0x13,
 	MLX5_PHYSICAL_LAYER_STATISTICAL_GROUP = 0x16,
 	MLX5_INFINIBAND_PORT_COUNTERS_GROUP   = 0x20,
 };
diff --git a/include/linux/mlx5/mlx5_ifc.h b/include/linux/mlx5/mlx5_ifc.h
index 7d65c0578ac9..a487b681b516 100644
--- a/include/linux/mlx5/mlx5_ifc.h
+++ b/include/linux/mlx5/mlx5_ifc.h
@@ -1196,7 +1196,8 @@ struct mlx5_ifc_cmd_hca_cap_bits {
 	u8         rts2rts_qp_counters_set_id[0x1];
 	u8         reserved_at_16a[0x2];
 	u8         vnic_env_int_rq_oob[0x1];
-	u8         reserved_at_16d[0x2];
+	u8         sbcam_reg[0x1];
+	u8         reserved_at_16e[0x1];
 	u8         qcam_reg[0x1];
 	u8         gid_table_size[0x10];
 
@@ -1960,12 +1961,28 @@ struct mlx5_ifc_ib_port_cntrs_grp_data_layout_bits {
 	u8         port_xmit_wait[0x20];
 };
 
-struct mlx5_ifc_eth_per_traffic_grp_data_layout_bits {
+struct mlx5_ifc_eth_per_tc_prio_grp_data_layout_bits {
 	u8         transmit_queue_high[0x20];
 
 	u8         transmit_queue_low[0x20];
 
-	u8         reserved_at_40[0x780];
+	u8         no_buffer_discard_uc_high[0x20];
+
+	u8         no_buffer_discard_uc_low[0x20];
+
+	u8         reserved_at_80[0x740];
+};
+
+struct mlx5_ifc_eth_per_tc_congest_prio_grp_data_layout_bits {
+	u8         wred_discard_high[0x20];
+
+	u8         wred_discard_low[0x20];
+
+	u8         ecn_marked_tc_high[0x20];
+
+	u8         ecn_marked_tc_low[0x20];
+
+	u8         reserved_at_80[0x740];
 };
 
 struct mlx5_ifc_eth_per_prio_grp_data_layout_bits {
@@ -3642,7 +3659,8 @@ union mlx5_ifc_eth_cntrs_grp_data_layout_auto_bits {
 	struct mlx5_ifc_eth_3635_cntrs_grp_data_layout_bits eth_3635_cntrs_grp_data_layout;
 	struct mlx5_ifc_eth_extended_cntrs_grp_data_layout_bits eth_extended_cntrs_grp_data_layout;
 	struct mlx5_ifc_eth_per_prio_grp_data_layout_bits eth_per_prio_grp_data_layout;
-	struct mlx5_ifc_eth_per_traffic_grp_data_layout_bits eth_per_traffic_grp_data_layout;
+	struct mlx5_ifc_eth_per_tc_prio_grp_data_layout_bits eth_per_tc_prio_grp_data_layout;
+	struct mlx5_ifc_eth_per_tc_congest_prio_grp_data_layout_bits eth_per_tc_congest_prio_grp_data_layout;
 	struct mlx5_ifc_ib_port_cntrs_grp_data_layout_bits ib_port_cntrs_grp_data_layout;
 	struct mlx5_ifc_phys_layer_cntrs_bits phys_layer_cntrs;
 	struct mlx5_ifc_phys_layer_statistical_cntrs_bits phys_layer_statistical_cntrs;
@@ -9422,7 +9440,8 @@ union mlx5_ifc_ports_control_registers_document_bits {
 	struct mlx5_ifc_eth_802_3_cntrs_grp_data_layout_bits eth_802_3_cntrs_grp_data_layout;
 	struct mlx5_ifc_eth_extended_cntrs_grp_data_layout_bits eth_extended_cntrs_grp_data_layout;
 	struct mlx5_ifc_eth_per_prio_grp_data_layout_bits eth_per_prio_grp_data_layout;
-	struct mlx5_ifc_eth_per_traffic_grp_data_layout_bits eth_per_traffic_grp_data_layout;
+	struct mlx5_ifc_eth_per_tc_prio_grp_data_layout_bits eth_per_tc_prio_grp_data_layout;
+	struct mlx5_ifc_eth_per_tc_congest_prio_grp_data_layout_bits eth_per_tc_congest_prio_grp_data_layout;
 	struct mlx5_ifc_lane_2_module_mapping_bits lane_2_module_mapping;
 	struct mlx5_ifc_pamp_reg_bits pamp_reg;
 	struct mlx5_ifc_paos_reg_bits paos_reg;
-- 
2.21.0


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

* [net-next 14/14] net/mlx5e: Add port buffer's congestion counters
  2019-09-05 21:50 [pull request][net-next 00/14] Mellanox, mlx5 cleanups & port congestion stats Saeed Mahameed
                   ` (12 preceding siblings ...)
  2019-09-05 21:51 ` [net-next 13/14] net/mlx5: Expose HW capability bits for port buffer per priority congestion counters Saeed Mahameed
@ 2019-09-05 21:51 ` Saeed Mahameed
  2019-09-07 15:40 ` [pull request][net-next 00/14] Mellanox, mlx5 cleanups & port congestion stats David Miller
  14 siblings, 0 replies; 16+ messages in thread
From: Saeed Mahameed @ 2019-09-05 21:51 UTC (permalink / raw)
  To: David S. Miller; +Cc: netdev, Aya Levin, Moshe Shemesh, Saeed Mahameed

From: Aya Levin <ayal@mellanox.com>

Add 3 counters per priority to ethtool using PPCNT:
1) rx_prio[p]_buf_discard - the number of packets discarded by device
   due to lack of per host receive buffers
2) rx_prio[p]_cong_discard - the number of packets discarded by device
   due to per host congestion
3) rx_prio[p]_marked - the number of packets ECN marked by device due
   to per host congestion

Signed-off-by: Aya Levin <ayal@mellanox.com>
Reviewed-by: Moshe Shemesh <moshe@mellanox.com>
Signed-off-by: Saeed Mahameed <saeedm@mellanox.com>
---
 .../ethernet/mellanox/mlx5/core/en_stats.c    | 149 +++++++++++++++++-
 .../ethernet/mellanox/mlx5/core/en_stats.h    |   2 +
 2 files changed, 150 insertions(+), 1 deletion(-)

diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_stats.c b/drivers/net/ethernet/mellanox/mlx5/core/en_stats.c
index f1065e78086a..ac6fdcda7019 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/en_stats.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/en_stats.c
@@ -981,6 +981,147 @@ static void mlx5e_grp_pcie_update_stats(struct mlx5e_priv *priv)
 	mlx5_core_access_reg(mdev, in, sz, out, sz, MLX5_REG_MPCNT, 0, 0);
 }
 
+#define PPORT_PER_TC_PRIO_OFF(c) \
+	MLX5_BYTE_OFF(ppcnt_reg, \
+		      counter_set.eth_per_tc_prio_grp_data_layout.c##_high)
+
+static const struct counter_desc pport_per_tc_prio_stats_desc[] = {
+	{ "rx_prio%d_buf_discard", PPORT_PER_TC_PRIO_OFF(no_buffer_discard_uc) },
+};
+
+#define NUM_PPORT_PER_TC_PRIO_COUNTERS	ARRAY_SIZE(pport_per_tc_prio_stats_desc)
+
+#define PPORT_PER_TC_CONGEST_PRIO_OFF(c) \
+	MLX5_BYTE_OFF(ppcnt_reg, \
+		      counter_set.eth_per_tc_congest_prio_grp_data_layout.c##_high)
+
+static const struct counter_desc pport_per_tc_congest_prio_stats_desc[] = {
+	{ "rx_prio%d_cong_discard", PPORT_PER_TC_CONGEST_PRIO_OFF(wred_discard) },
+	{ "rx_prio%d_marked", PPORT_PER_TC_CONGEST_PRIO_OFF(ecn_marked_tc) },
+};
+
+#define NUM_PPORT_PER_TC_CONGEST_PRIO_COUNTERS \
+	ARRAY_SIZE(pport_per_tc_congest_prio_stats_desc)
+
+static int mlx5e_grp_per_tc_prio_get_num_stats(struct mlx5e_priv *priv)
+{
+	struct mlx5_core_dev *mdev = priv->mdev;
+
+	if (!MLX5_CAP_GEN(mdev, sbcam_reg))
+		return 0;
+
+	return NUM_PPORT_PER_TC_PRIO_COUNTERS * NUM_PPORT_PRIO;
+}
+
+static int mlx5e_grp_per_port_buffer_congest_fill_strings(struct mlx5e_priv *priv,
+							  u8 *data, int idx)
+{
+	struct mlx5_core_dev *mdev = priv->mdev;
+	int i, prio;
+
+	if (!MLX5_CAP_GEN(mdev, sbcam_reg))
+		return idx;
+
+	for (prio = 0; prio < NUM_PPORT_PRIO; prio++) {
+		for (i = 0; i < NUM_PPORT_PER_TC_PRIO_COUNTERS; i++)
+			sprintf(data + (idx++) * ETH_GSTRING_LEN,
+				pport_per_tc_prio_stats_desc[i].format, prio);
+		for (i = 0; i < NUM_PPORT_PER_TC_CONGEST_PRIO_COUNTERS; i++)
+			sprintf(data + (idx++) * ETH_GSTRING_LEN,
+				pport_per_tc_congest_prio_stats_desc[i].format, prio);
+	}
+
+	return idx;
+}
+
+static int mlx5e_grp_per_port_buffer_congest_fill_stats(struct mlx5e_priv *priv,
+							u64 *data, int idx)
+{
+	struct mlx5e_pport_stats *pport = &priv->stats.pport;
+	struct mlx5_core_dev *mdev = priv->mdev;
+	int i, prio;
+
+	if (!MLX5_CAP_GEN(mdev, sbcam_reg))
+		return idx;
+
+	for (prio = 0; prio < NUM_PPORT_PRIO; prio++) {
+		for (i = 0; i < NUM_PPORT_PER_TC_PRIO_COUNTERS; i++)
+			data[idx++] =
+				MLX5E_READ_CTR64_BE(&pport->per_tc_prio_counters[prio],
+						    pport_per_tc_prio_stats_desc, i);
+		for (i = 0; i < NUM_PPORT_PER_TC_CONGEST_PRIO_COUNTERS ; i++)
+			data[idx++] =
+				MLX5E_READ_CTR64_BE(&pport->per_tc_congest_prio_counters[prio],
+						    pport_per_tc_congest_prio_stats_desc, i);
+	}
+
+	return idx;
+}
+
+static void mlx5e_grp_per_tc_prio_update_stats(struct mlx5e_priv *priv)
+{
+	struct mlx5e_pport_stats *pstats = &priv->stats.pport;
+	struct mlx5_core_dev *mdev = priv->mdev;
+	u32 in[MLX5_ST_SZ_DW(ppcnt_reg)] = {};
+	int sz = MLX5_ST_SZ_BYTES(ppcnt_reg);
+	void *out;
+	int prio;
+
+	if (!MLX5_CAP_GEN(mdev, sbcam_reg))
+		return;
+
+	MLX5_SET(ppcnt_reg, in, pnat, 2);
+	MLX5_SET(ppcnt_reg, in, grp, MLX5_PER_TRAFFIC_CLASS_COUNTERS_GROUP);
+	for (prio = 0; prio < NUM_PPORT_PRIO; prio++) {
+		out = pstats->per_tc_prio_counters[prio];
+		MLX5_SET(ppcnt_reg, in, prio_tc, prio);
+		mlx5_core_access_reg(mdev, in, sz, out, sz, MLX5_REG_PPCNT, 0, 0);
+	}
+}
+
+static int mlx5e_grp_per_tc_congest_prio_get_num_stats(struct mlx5e_priv *priv)
+{
+	struct mlx5_core_dev *mdev = priv->mdev;
+
+	if (!MLX5_CAP_GEN(mdev, sbcam_reg))
+		return 0;
+
+	return NUM_PPORT_PER_TC_CONGEST_PRIO_COUNTERS * NUM_PPORT_PRIO;
+}
+
+static void mlx5e_grp_per_tc_congest_prio_update_stats(struct mlx5e_priv *priv)
+{
+	struct mlx5e_pport_stats *pstats = &priv->stats.pport;
+	struct mlx5_core_dev *mdev = priv->mdev;
+	u32 in[MLX5_ST_SZ_DW(ppcnt_reg)] = {};
+	int sz = MLX5_ST_SZ_BYTES(ppcnt_reg);
+	void *out;
+	int prio;
+
+	if (!MLX5_CAP_GEN(mdev, sbcam_reg))
+		return;
+
+	MLX5_SET(ppcnt_reg, in, pnat, 2);
+	MLX5_SET(ppcnt_reg, in, grp, MLX5_PER_TRAFFIC_CLASS_CONGESTION_GROUP);
+	for (prio = 0; prio < NUM_PPORT_PRIO; prio++) {
+		out = pstats->per_tc_congest_prio_counters[prio];
+		MLX5_SET(ppcnt_reg, in, prio_tc, prio);
+		mlx5_core_access_reg(mdev, in, sz, out, sz, MLX5_REG_PPCNT, 0, 0);
+	}
+}
+
+static int mlx5e_grp_per_port_buffer_congest_get_num_stats(struct mlx5e_priv *priv)
+{
+	return mlx5e_grp_per_tc_prio_get_num_stats(priv) +
+		mlx5e_grp_per_tc_congest_prio_get_num_stats(priv);
+}
+
+static void mlx5e_grp_per_port_buffer_congest_update_stats(struct mlx5e_priv *priv)
+{
+	mlx5e_grp_per_tc_prio_update_stats(priv);
+	mlx5e_grp_per_tc_congest_prio_update_stats(priv);
+}
+
 #define PPORT_PER_PRIO_OFF(c) \
 	MLX5_BYTE_OFF(ppcnt_reg, \
 		      counter_set.eth_per_prio_grp_data_layout.c##_high)
@@ -1610,7 +1751,13 @@ const struct mlx5e_stats_grp mlx5e_stats_grps[] = {
 		.get_num_stats = mlx5e_grp_channels_get_num_stats,
 		.fill_strings = mlx5e_grp_channels_fill_strings,
 		.fill_stats = mlx5e_grp_channels_fill_stats,
-	}
+	},
+	{
+		.get_num_stats = mlx5e_grp_per_port_buffer_congest_get_num_stats,
+		.fill_strings = mlx5e_grp_per_port_buffer_congest_fill_strings,
+		.fill_stats = mlx5e_grp_per_port_buffer_congest_fill_stats,
+		.update_stats = mlx5e_grp_per_port_buffer_congest_update_stats,
+	},
 };
 
 const int mlx5e_num_stats_grps = ARRAY_SIZE(mlx5e_stats_grps);
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_stats.h b/drivers/net/ethernet/mellanox/mlx5/core/en_stats.h
index c281e567711d..79f261bf86ac 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/en_stats.h
+++ b/drivers/net/ethernet/mellanox/mlx5/core/en_stats.h
@@ -207,6 +207,8 @@ struct mlx5e_pport_stats {
 	__be64 phy_counters[MLX5_ST_SZ_QW(ppcnt_reg)];
 	__be64 phy_statistical_counters[MLX5_ST_SZ_QW(ppcnt_reg)];
 	__be64 eth_ext_counters[MLX5_ST_SZ_QW(ppcnt_reg)];
+	__be64 per_tc_prio_counters[NUM_PPORT_PRIO][MLX5_ST_SZ_QW(ppcnt_reg)];
+	__be64 per_tc_congest_prio_counters[NUM_PPORT_PRIO][MLX5_ST_SZ_QW(ppcnt_reg)];
 };
 
 #define PCIE_PERF_GET(pcie_stats, c) \
-- 
2.21.0


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

* Re: [pull request][net-next 00/14] Mellanox, mlx5 cleanups & port congestion stats
  2019-09-05 21:50 [pull request][net-next 00/14] Mellanox, mlx5 cleanups & port congestion stats Saeed Mahameed
                   ` (13 preceding siblings ...)
  2019-09-05 21:51 ` [net-next 14/14] net/mlx5e: Add port buffer's " Saeed Mahameed
@ 2019-09-07 15:40 ` David Miller
  14 siblings, 0 replies; 16+ messages in thread
From: David Miller @ 2019-09-07 15:40 UTC (permalink / raw)
  To: saeedm; +Cc: netdev

From: Saeed Mahameed <saeedm@mellanox.com>
Date: Thu, 5 Sep 2019 21:50:52 +0000

> This series provides 12 mlx5 cleanup patches and last 2 patches provide
> port congestion stats to ethtool.
> 
> For more information please see tag log below.
> 
> Please pull and let me know if there is any problem.

Pulled, thanks Saeed.

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

end of thread, other threads:[~2019-09-07 15:40 UTC | newest]

Thread overview: 16+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-09-05 21:50 [pull request][net-next 00/14] Mellanox, mlx5 cleanups & port congestion stats Saeed Mahameed
2019-09-05 21:50 ` [net-next 01/14] net/mlx5e: Fix static checker warning of potential pointer math issue Saeed Mahameed
2019-09-05 21:50 ` [net-next 02/14] net/mlx5: Kconfig: Fix MLX5_CORE dependency with PCI_HYPERV_INTERFACE Saeed Mahameed
2019-09-05 21:50 ` [net-next 03/14] net/mlx5e: Use ipv6_stub to avoid dependency with ipv6 being a module Saeed Mahameed
2019-09-05 21:51 ` [net-next 04/14] net/mlx5e: Remove leftover declaration Saeed Mahameed
2019-09-05 21:51 ` [net-next 05/14] net/mlx5: fix spelling mistake "offlaods" -> "offloads" Saeed Mahameed
2019-09-05 21:51 ` [net-next 06/14] net/mlx5: fix missing assignment of variable err Saeed Mahameed
2019-09-05 21:51 ` [net-next 07/14] net/mlx5: Use PTR_ERR_OR_ZERO rather than its implementation Saeed Mahameed
2019-09-05 21:51 ` [net-next 08/14] net/mlx5e: kTLS, Remove unused function parameter Saeed Mahameed
2019-09-05 21:51 ` [net-next 09/14] net/mlx5e: Remove unnecessary clear_bit()s Saeed Mahameed
2019-09-05 21:51 ` [net-next 10/14] net/mlx5: DR, Remove useless set memory to zero use memset() Saeed Mahameed
2019-09-05 21:51 ` [net-next 11/14] net/mlx5: DR, Fix error return code in dr_domain_init_resources() Saeed Mahameed
2019-09-05 21:51 ` [net-next 12/14] net/mlx5: DR, Remove redundant dev_name print from err log Saeed Mahameed
2019-09-05 21:51 ` [net-next 13/14] net/mlx5: Expose HW capability bits for port buffer per priority congestion counters Saeed Mahameed
2019-09-05 21:51 ` [net-next 14/14] net/mlx5e: Add port buffer's " Saeed Mahameed
2019-09-07 15:40 ` [pull request][net-next 00/14] Mellanox, mlx5 cleanups & port congestion stats 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).