All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH net 0/4] Mellaox 40G driver fixes for 4.6-rc
@ 2016-04-20 13:01 Or Gerlitz
  2016-04-20 13:01 ` [PATCH net 1/4] net/mlx4_core: Implement pci_resume callback Or Gerlitz
                   ` (4 more replies)
  0 siblings, 5 replies; 11+ messages in thread
From: Or Gerlitz @ 2016-04-20 13:01 UTC (permalink / raw)
  To: David S. Miller; +Cc: netdev, Eran Ben Elisha, Yishai Hadas, Or Gerlitz

Hi Dave,

With the fix for ARM bug being under the works, these are 
few other fixes for mlx4 we have ready to go.

Eran addressed the problematic/wrong reporting of dropped packets, Daniel 
fixed some matters related to PPC EEH's and Jenny's patch makes sure
VFs can't change the port's pause settings.

Or.

Daniel Jurgens (2):
  net/mlx4_core: Implement pci_resume callback
  net/mlx4_core: Avoid repeated calls to pci enable/disable

Eran Ben Elisha (1):
  net/mlx4_en: Split SW RX dropped counter per RX ring

Eugenia Emantayev (1):
  net/mlx4_core: Don't allow to VF change global pause settings

 drivers/net/ethernet/mellanox/mlx4/en_ethtool.c |  5 +-
 drivers/net/ethernet/mellanox/mlx4/en_port.c    |  5 +-
 drivers/net/ethernet/mellanox/mlx4/en_rx.c      |  2 +-
 drivers/net/ethernet/mellanox/mlx4/main.c       | 76 ++++++++++++++++++-------
 drivers/net/ethernet/mellanox/mlx4/mlx4.h       |  2 +
 drivers/net/ethernet/mellanox/mlx4/mlx4_en.h    |  1 +
 drivers/net/ethernet/mellanox/mlx4/port.c       | 13 +++++
 include/linux/mlx4/device.h                     |  7 +++
 8 files changed, 89 insertions(+), 22 deletions(-)

-- 
2.3.7

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

* [PATCH net 1/4] net/mlx4_core: Implement pci_resume callback
  2016-04-20 13:01 [PATCH net 0/4] Mellaox 40G driver fixes for 4.6-rc Or Gerlitz
@ 2016-04-20 13:01 ` Or Gerlitz
  2016-04-20 13:01 ` [PATCH net 2/4] net/mlx4_core: Avoid repeated calls to pci enable/disable Or Gerlitz
                   ` (3 subsequent siblings)
  4 siblings, 0 replies; 11+ messages in thread
From: Or Gerlitz @ 2016-04-20 13:01 UTC (permalink / raw)
  To: David S. Miller
  Cc: netdev, Eran Ben Elisha, Yishai Hadas, Daniel Jurgens, Or Gerlitz

From: Daniel Jurgens <danielj@mellanox.com>

Move resume related activities to a new pci_resume function instead of
performing them in mlx4_pci_slot_reset.  This change is needed to avoid
a hotplug during EEH recovery due to commit f2da4ccf8bd4 ("powerpc/eeh:
More relaxed hotplug criterion").

Fixes: 2ba5fbd62b25 ('net/mlx4_core: Handle AER flow properly')
Signed-off-by: Daniel Jurgens <danielj@mellanox.com>
Signed-off-by: Yishai Hadas <yishaih@mellanox.com>
Signed-off-by: Or Gerlitz <ogerlitz@mellanox.com>
---
 drivers/net/ethernet/mellanox/mlx4/main.c | 39 +++++++++++++++++++------------
 1 file changed, 24 insertions(+), 15 deletions(-)

diff --git a/drivers/net/ethernet/mellanox/mlx4/main.c b/drivers/net/ethernet/mellanox/mlx4/main.c
index 358f723..5d45aa3 100644
--- a/drivers/net/ethernet/mellanox/mlx4/main.c
+++ b/drivers/net/ethernet/mellanox/mlx4/main.c
@@ -4050,45 +4050,53 @@ static pci_ers_result_t mlx4_pci_slot_reset(struct pci_dev *pdev)
 {
 	struct mlx4_dev_persistent *persist = pci_get_drvdata(pdev);
 	struct mlx4_dev	 *dev  = persist->dev;
-	struct mlx4_priv *priv = mlx4_priv(dev);
-	int               ret;
-	int nvfs[MLX4_MAX_PORTS + 1] = {0, 0, 0};
-	int total_vfs;
+	int err;
 
 	mlx4_err(dev, "mlx4_pci_slot_reset was called\n");
-	ret = pci_enable_device(pdev);
-	if (ret) {
-		mlx4_err(dev, "Can not re-enable device, ret=%d\n", ret);
+	err = pci_enable_device(pdev);
+	if (err) {
+		mlx4_err(dev, "Can not re-enable device, err=%d\n", err);
 		return PCI_ERS_RESULT_DISCONNECT;
 	}
 
 	pci_set_master(pdev);
 	pci_restore_state(pdev);
 	pci_save_state(pdev);
+	return PCI_ERS_RESULT_RECOVERED;
+}
+
+static void mlx4_pci_resume(struct pci_dev *pdev)
+{
+	struct mlx4_dev_persistent *persist = pci_get_drvdata(pdev);
+	struct mlx4_dev	 *dev  = persist->dev;
+	struct mlx4_priv *priv = mlx4_priv(dev);
+	int nvfs[MLX4_MAX_PORTS + 1] = {0, 0, 0};
+	int total_vfs;
+	int err;
 
+	mlx4_err(dev, "%s was called\n", __func__);
 	total_vfs = dev->persist->num_vfs;
 	memcpy(nvfs, dev->persist->nvfs, sizeof(dev->persist->nvfs));
 
 	mutex_lock(&persist->interface_state_mutex);
 	if (!(persist->interface_state & MLX4_INTERFACE_STATE_UP)) {
-		ret = mlx4_load_one(pdev, priv->pci_dev_data, total_vfs, nvfs,
+		err = mlx4_load_one(pdev, priv->pci_dev_data, total_vfs, nvfs,
 				    priv, 1);
-		if (ret) {
-			mlx4_err(dev, "%s: mlx4_load_one failed, ret=%d\n",
-				 __func__,  ret);
+		if (err) {
+			mlx4_err(dev, "%s: mlx4_load_one failed, err=%d\n",
+				 __func__,  err);
 			goto end;
 		}
 
-		ret = restore_current_port_types(dev, dev->persist->
+		err = restore_current_port_types(dev, dev->persist->
 						 curr_port_type, dev->persist->
 						 curr_port_poss_type);
-		if (ret)
-			mlx4_err(dev, "could not restore original port types (%d)\n", ret);
+		if (err)
+			mlx4_err(dev, "could not restore original port types (%d)\n", err);
 	}
 end:
 	mutex_unlock(&persist->interface_state_mutex);
 
-	return ret ? PCI_ERS_RESULT_DISCONNECT : PCI_ERS_RESULT_RECOVERED;
 }
 
 static void mlx4_shutdown(struct pci_dev *pdev)
@@ -4105,6 +4113,7 @@ static void mlx4_shutdown(struct pci_dev *pdev)
 static const struct pci_error_handlers mlx4_err_handler = {
 	.error_detected = mlx4_pci_err_detected,
 	.slot_reset     = mlx4_pci_slot_reset,
+	.resume		= mlx4_pci_resume,
 };
 
 static struct pci_driver mlx4_driver = {
-- 
2.3.7

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

* [PATCH net 2/4] net/mlx4_core: Avoid repeated calls to pci enable/disable
  2016-04-20 13:01 [PATCH net 0/4] Mellaox 40G driver fixes for 4.6-rc Or Gerlitz
  2016-04-20 13:01 ` [PATCH net 1/4] net/mlx4_core: Implement pci_resume callback Or Gerlitz
@ 2016-04-20 13:01 ` Or Gerlitz
  2016-04-20 13:01 ` [PATCH net 3/4] net/mlx4_core: Don't allow to VF change global pause settings Or Gerlitz
                   ` (2 subsequent siblings)
  4 siblings, 0 replies; 11+ messages in thread
From: Or Gerlitz @ 2016-04-20 13:01 UTC (permalink / raw)
  To: David S. Miller
  Cc: netdev, Eran Ben Elisha, Yishai Hadas, Daniel Jurgens, Or Gerlitz

From: Daniel Jurgens <danielj@mellanox.com>

Maintain the PCI status and provide wrappers for enabling and disabling
the PCI device.  Performing the actions more than once without doing
its opposite results in warning logs.

This occurred when EEH hotplugged the device causing a warning for
disabling an already disabled device.

Fixes: 2ba5fbd62b25 ('net/mlx4_core: Handle AER flow properly')
Signed-off-by: Daniel Jurgens <danielj@mellanox.com>
Signed-off-by: Yishai Hadas <yishaih@mellanox.com>
Signed-off-by: Or Gerlitz <ogerlitz@mellanox.com>
---
 drivers/net/ethernet/mellanox/mlx4/main.c | 39 +++++++++++++++++++++++++++----
 include/linux/mlx4/device.h               |  7 ++++++
 2 files changed, 41 insertions(+), 5 deletions(-)

diff --git a/drivers/net/ethernet/mellanox/mlx4/main.c b/drivers/net/ethernet/mellanox/mlx4/main.c
index 5d45aa3..12c77a7 100644
--- a/drivers/net/ethernet/mellanox/mlx4/main.c
+++ b/drivers/net/ethernet/mellanox/mlx4/main.c
@@ -3172,6 +3172,34 @@ static int mlx4_check_dev_cap(struct mlx4_dev *dev, struct mlx4_dev_cap *dev_cap
 	return 0;
 }
 
+static int mlx4_pci_enable_device(struct mlx4_dev *dev)
+{
+	struct pci_dev *pdev = dev->persist->pdev;
+	int err = 0;
+
+	mutex_lock(&dev->persist->pci_status_mutex);
+	if (dev->persist->pci_status == MLX4_PCI_STATUS_DISABLED) {
+		err = pci_enable_device(pdev);
+		if (!err)
+			dev->persist->pci_status = MLX4_PCI_STATUS_ENABLED;
+	}
+	mutex_unlock(&dev->persist->pci_status_mutex);
+
+	return err;
+}
+
+static void mlx4_pci_disable_device(struct mlx4_dev *dev)
+{
+	struct pci_dev *pdev = dev->persist->pdev;
+
+	mutex_lock(&dev->persist->pci_status_mutex);
+	if (dev->persist->pci_status == MLX4_PCI_STATUS_ENABLED) {
+		pci_disable_device(pdev);
+		dev->persist->pci_status = MLX4_PCI_STATUS_DISABLED;
+	}
+	mutex_unlock(&dev->persist->pci_status_mutex);
+}
+
 static int mlx4_load_one(struct pci_dev *pdev, int pci_dev_data,
 			 int total_vfs, int *nvfs, struct mlx4_priv *priv,
 			 int reset_flow)
@@ -3582,7 +3610,7 @@ static int __mlx4_init_one(struct pci_dev *pdev, int pci_dev_data,
 
 	pr_info(DRV_NAME ": Initializing %s\n", pci_name(pdev));
 
-	err = pci_enable_device(pdev);
+	err = mlx4_pci_enable_device(&priv->dev);
 	if (err) {
 		dev_err(&pdev->dev, "Cannot enable PCI device, aborting\n");
 		return err;
@@ -3715,7 +3743,7 @@ err_release_regions:
 	pci_release_regions(pdev);
 
 err_disable_pdev:
-	pci_disable_device(pdev);
+	mlx4_pci_disable_device(&priv->dev);
 	pci_set_drvdata(pdev, NULL);
 	return err;
 }
@@ -3775,6 +3803,7 @@ static int mlx4_init_one(struct pci_dev *pdev, const struct pci_device_id *id)
 	priv->pci_dev_data = id->driver_data;
 	mutex_init(&dev->persist->device_state_mutex);
 	mutex_init(&dev->persist->interface_state_mutex);
+	mutex_init(&dev->persist->pci_status_mutex);
 
 	ret = devlink_register(devlink, &pdev->dev);
 	if (ret)
@@ -3923,7 +3952,7 @@ static void mlx4_remove_one(struct pci_dev *pdev)
 	}
 
 	pci_release_regions(pdev);
-	pci_disable_device(pdev);
+	mlx4_pci_disable_device(dev);
 	devlink_unregister(devlink);
 	kfree(dev->persist);
 	devlink_free(devlink);
@@ -4042,7 +4071,7 @@ static pci_ers_result_t mlx4_pci_err_detected(struct pci_dev *pdev,
 	if (state == pci_channel_io_perm_failure)
 		return PCI_ERS_RESULT_DISCONNECT;
 
-	pci_disable_device(pdev);
+	mlx4_pci_disable_device(persist->dev);
 	return PCI_ERS_RESULT_NEED_RESET;
 }
 
@@ -4053,7 +4082,7 @@ static pci_ers_result_t mlx4_pci_slot_reset(struct pci_dev *pdev)
 	int err;
 
 	mlx4_err(dev, "mlx4_pci_slot_reset was called\n");
-	err = pci_enable_device(pdev);
+	err = mlx4_pci_enable_device(dev);
 	if (err) {
 		mlx4_err(dev, "Can not re-enable device, err=%d\n", err);
 		return PCI_ERS_RESULT_DISCONNECT;
diff --git a/include/linux/mlx4/device.h b/include/linux/mlx4/device.h
index 8541a91..d1f904c 100644
--- a/include/linux/mlx4/device.h
+++ b/include/linux/mlx4/device.h
@@ -828,6 +828,11 @@ struct mlx4_vf_dev {
 	u8			n_ports;
 };
 
+enum mlx4_pci_status {
+	MLX4_PCI_STATUS_DISABLED,
+	MLX4_PCI_STATUS_ENABLED,
+};
+
 struct mlx4_dev_persistent {
 	struct pci_dev	       *pdev;
 	struct mlx4_dev	       *dev;
@@ -841,6 +846,8 @@ struct mlx4_dev_persistent {
 	u8		state;
 	struct mutex	interface_state_mutex; /* protect SW state */
 	u8	interface_state;
+	struct mutex		pci_status_mutex; /* sync pci state */
+	enum mlx4_pci_status	pci_status;
 };
 
 struct mlx4_dev {
-- 
2.3.7

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

* [PATCH net 3/4] net/mlx4_core: Don't allow to VF change global pause settings
  2016-04-20 13:01 [PATCH net 0/4] Mellaox 40G driver fixes for 4.6-rc Or Gerlitz
  2016-04-20 13:01 ` [PATCH net 1/4] net/mlx4_core: Implement pci_resume callback Or Gerlitz
  2016-04-20 13:01 ` [PATCH net 2/4] net/mlx4_core: Avoid repeated calls to pci enable/disable Or Gerlitz
@ 2016-04-20 13:01 ` Or Gerlitz
  2016-04-20 13:01 ` [PATCH net 4/4] net/mlx4_en: Split SW RX dropped counter per RX ring Or Gerlitz
  2016-04-21 19:03 ` [PATCH net 0/4] Mellaox 40G driver fixes for 4.6-rc David Miller
  4 siblings, 0 replies; 11+ messages in thread
From: Or Gerlitz @ 2016-04-20 13:01 UTC (permalink / raw)
  To: David S. Miller
  Cc: netdev, Eran Ben Elisha, Yishai Hadas, Eugenia Emantayev,
	Saeed Mahameed, Or Gerlitz

From: Eugenia Emantayev <eugenia@mellanox.com>

Currently changing global pause settings is done via SET_PORT
command with input modifier GENERAL. This command is allowed
for each VF since MTU setting is done via the same command.

Change the above to the following scheme: before passing the
request to the FW, the PF will check whether it was issued
by a slave. If yes, don't change global pause and warn,
otherwise change to the requested value and store for
further reference.

Signed-off-by: Eugenia Emantayev <eugenia@mellanox.com>
Signed-off-by: Saeed Mahameed <saeedm@mellanox.com>
Signed-off-by: Or Gerlitz <ogerlitz@mellanox.com>
---
 drivers/net/ethernet/mellanox/mlx4/mlx4.h |  2 ++
 drivers/net/ethernet/mellanox/mlx4/port.c | 13 +++++++++++++
 2 files changed, 15 insertions(+)

diff --git a/drivers/net/ethernet/mellanox/mlx4/mlx4.h b/drivers/net/ethernet/mellanox/mlx4/mlx4.h
index ef96831..c9d7fc51 100644
--- a/drivers/net/ethernet/mellanox/mlx4/mlx4.h
+++ b/drivers/net/ethernet/mellanox/mlx4/mlx4.h
@@ -586,6 +586,8 @@ struct mlx4_mfunc_master_ctx {
 	struct mlx4_master_qp0_state qp0_state[MLX4_MAX_PORTS + 1];
 	int			init_port_ref[MLX4_MAX_PORTS + 1];
 	u16			max_mtu[MLX4_MAX_PORTS + 1];
+	u8			pptx;
+	u8			pprx;
 	int			disable_mcast_ref[MLX4_MAX_PORTS + 1];
 	struct mlx4_resource_tracker res_tracker;
 	struct workqueue_struct *comm_wq;
diff --git a/drivers/net/ethernet/mellanox/mlx4/port.c b/drivers/net/ethernet/mellanox/mlx4/port.c
index 211c650..087b23b 100644
--- a/drivers/net/ethernet/mellanox/mlx4/port.c
+++ b/drivers/net/ethernet/mellanox/mlx4/port.c
@@ -1317,6 +1317,19 @@ static int mlx4_common_set_port(struct mlx4_dev *dev, int slave, u32 in_mod,
 			}
 
 			gen_context->mtu = cpu_to_be16(master->max_mtu[port]);
+			/* Slave cannot change Global Pause configuration */
+			if (slave != mlx4_master_func_num(dev) &&
+			    ((gen_context->pptx != master->pptx) ||
+			     (gen_context->pprx != master->pprx))) {
+				gen_context->pptx = master->pptx;
+				gen_context->pprx = master->pprx;
+				mlx4_warn(dev,
+					  "denying Global Pause change for slave:%d\n",
+					  slave);
+			} else {
+				master->pptx = gen_context->pptx;
+				master->pprx = gen_context->pprx;
+			}
 			break;
 		case MLX4_SET_PORT_GID_TABLE:
 			/* change to MULTIPLE entries: number of guest's gids
-- 
2.3.7

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

* [PATCH net 4/4] net/mlx4_en: Split SW RX dropped counter per RX ring
  2016-04-20 13:01 [PATCH net 0/4] Mellaox 40G driver fixes for 4.6-rc Or Gerlitz
                   ` (2 preceding siblings ...)
  2016-04-20 13:01 ` [PATCH net 3/4] net/mlx4_core: Don't allow to VF change global pause settings Or Gerlitz
@ 2016-04-20 13:01 ` Or Gerlitz
  2016-04-20 14:56   ` Eric Dumazet
  2016-04-21 19:03 ` [PATCH net 0/4] Mellaox 40G driver fixes for 4.6-rc David Miller
  4 siblings, 1 reply; 11+ messages in thread
From: Or Gerlitz @ 2016-04-20 13:01 UTC (permalink / raw)
  To: David S. Miller
  Cc: netdev, Eran Ben Elisha, Yishai Hadas, Saeed Mahameed, Or Gerlitz

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

Count SW packet drops per RX ring instead of a global counter. This
will allow monitoring the number of rx drops per ring.

In addition, SW rx_dropped counter was overwritten by HW rx_dropped
counter, sum both of them instead to show the accurate value.

Fixes: a3333b35da16 ('net/mlx4_en: Moderate ethtool callback to [...] ')
Signed-off-by: Eran Ben Elisha <eranbe@mellanox.com>
Reported-by: Brenden Blanco <bblanco@plumgrid.com>
Signed-off-by: Saeed Mahameed <saeedm@mellanox.com>
Signed-off-by: Or Gerlitz <ogerlitz@mellanox.com>
---
 drivers/net/ethernet/mellanox/mlx4/en_ethtool.c | 5 ++++-
 drivers/net/ethernet/mellanox/mlx4/en_port.c    | 5 ++++-
 drivers/net/ethernet/mellanox/mlx4/en_rx.c      | 2 +-
 drivers/net/ethernet/mellanox/mlx4/mlx4_en.h    | 1 +
 4 files changed, 10 insertions(+), 3 deletions(-)

diff --git a/drivers/net/ethernet/mellanox/mlx4/en_ethtool.c b/drivers/net/ethernet/mellanox/mlx4/en_ethtool.c
index f69584a..c761194 100644
--- a/drivers/net/ethernet/mellanox/mlx4/en_ethtool.c
+++ b/drivers/net/ethernet/mellanox/mlx4/en_ethtool.c
@@ -337,7 +337,7 @@ static int mlx4_en_get_sset_count(struct net_device *dev, int sset)
 	case ETH_SS_STATS:
 		return bitmap_iterator_count(&it) +
 			(priv->tx_ring_num * 2) +
-			(priv->rx_ring_num * 2);
+			(priv->rx_ring_num * 3);
 	case ETH_SS_TEST:
 		return MLX4_EN_NUM_SELF_TEST - !(priv->mdev->dev->caps.flags
 					& MLX4_DEV_CAP_FLAG_UC_LOOPBACK) * 2;
@@ -404,6 +404,7 @@ static void mlx4_en_get_ethtool_stats(struct net_device *dev,
 	for (i = 0; i < priv->rx_ring_num; i++) {
 		data[index++] = priv->rx_ring[i]->packets;
 		data[index++] = priv->rx_ring[i]->bytes;
+		data[index++] = priv->rx_ring[i]->dropped;
 	}
 	spin_unlock_bh(&priv->stats_lock);
 
@@ -477,6 +478,8 @@ static void mlx4_en_get_strings(struct net_device *dev,
 				"rx%d_packets", i);
 			sprintf(data + (index++) * ETH_GSTRING_LEN,
 				"rx%d_bytes", i);
+			sprintf(data + (index++) * ETH_GSTRING_LEN,
+				"rx%d_dropped", i);
 		}
 		break;
 	case ETH_SS_PRIV_FLAGS:
diff --git a/drivers/net/ethernet/mellanox/mlx4/en_port.c b/drivers/net/ethernet/mellanox/mlx4/en_port.c
index 3904b5f..20b6c2e 100644
--- a/drivers/net/ethernet/mellanox/mlx4/en_port.c
+++ b/drivers/net/ethernet/mellanox/mlx4/en_port.c
@@ -158,6 +158,7 @@ int mlx4_en_DUMP_ETH_STATS(struct mlx4_en_dev *mdev, u8 port, u8 reset)
 	u64 in_mod = reset << 8 | port;
 	int err;
 	int i, counter_index;
+	unsigned long sw_rx_dropped = 0;
 
 	mailbox = mlx4_alloc_cmd_mailbox(mdev->dev);
 	if (IS_ERR(mailbox))
@@ -180,6 +181,7 @@ int mlx4_en_DUMP_ETH_STATS(struct mlx4_en_dev *mdev, u8 port, u8 reset)
 	for (i = 0; i < priv->rx_ring_num; i++) {
 		stats->rx_packets += priv->rx_ring[i]->packets;
 		stats->rx_bytes += priv->rx_ring[i]->bytes;
+		sw_rx_dropped += priv->rx_ring[i]->dropped;
 		priv->port_stats.rx_chksum_good += priv->rx_ring[i]->csum_ok;
 		priv->port_stats.rx_chksum_none += priv->rx_ring[i]->csum_none;
 		priv->port_stats.rx_chksum_complete += priv->rx_ring[i]->csum_complete;
@@ -236,7 +238,8 @@ int mlx4_en_DUMP_ETH_STATS(struct mlx4_en_dev *mdev, u8 port, u8 reset)
 					  &mlx4_en_stats->MCAST_prio_1,
 					  NUM_PRIORITIES);
 	stats->collisions = 0;
-	stats->rx_dropped = be32_to_cpu(mlx4_en_stats->RDROP);
+	stats->rx_dropped = be32_to_cpu(mlx4_en_stats->RDROP) +
+			    sw_rx_dropped;
 	stats->rx_length_errors = be32_to_cpu(mlx4_en_stats->RdropLength);
 	stats->rx_over_errors = 0;
 	stats->rx_crc_errors = be32_to_cpu(mlx4_en_stats->RCRC);
diff --git a/drivers/net/ethernet/mellanox/mlx4/en_rx.c b/drivers/net/ethernet/mellanox/mlx4/en_rx.c
index 86bcfe5..91abc13 100644
--- a/drivers/net/ethernet/mellanox/mlx4/en_rx.c
+++ b/drivers/net/ethernet/mellanox/mlx4/en_rx.c
@@ -939,7 +939,7 @@ int mlx4_en_process_rx_cq(struct net_device *dev, struct mlx4_en_cq *cq, int bud
 		/* GRO not possible, complete processing here */
 		skb = mlx4_en_rx_skb(priv, rx_desc, frags, length);
 		if (!skb) {
-			priv->stats.rx_dropped++;
+			ring->dropped++;
 			goto next;
 		}
 
diff --git a/drivers/net/ethernet/mellanox/mlx4/mlx4_en.h b/drivers/net/ethernet/mellanox/mlx4/mlx4_en.h
index d12ab6a..63b1aea 100644
--- a/drivers/net/ethernet/mellanox/mlx4/mlx4_en.h
+++ b/drivers/net/ethernet/mellanox/mlx4/mlx4_en.h
@@ -323,6 +323,7 @@ struct mlx4_en_rx_ring {
 	unsigned long csum_ok;
 	unsigned long csum_none;
 	unsigned long csum_complete;
+	unsigned long dropped;
 	int hwtstamp_rx_filter;
 	cpumask_var_t affinity_mask;
 };
-- 
2.3.7

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

* Re: [PATCH net 4/4] net/mlx4_en: Split SW RX dropped counter per RX ring
  2016-04-20 13:01 ` [PATCH net 4/4] net/mlx4_en: Split SW RX dropped counter per RX ring Or Gerlitz
@ 2016-04-20 14:56   ` Eric Dumazet
  2016-04-20 15:00     ` Or Gerlitz
  0 siblings, 1 reply; 11+ messages in thread
From: Eric Dumazet @ 2016-04-20 14:56 UTC (permalink / raw)
  To: Or Gerlitz
  Cc: David S. Miller, netdev, Eran Ben Elisha, Yishai Hadas, Saeed Mahameed

On Wed, 2016-04-20 at 16:01 +0300, Or Gerlitz wrote:
> From: Eran Ben Elisha <eranbe@mellanox.com>
> 
> Count SW packet drops per RX ring instead of a global counter. This
> will allow monitoring the number of rx drops per ring.
> 
> In addition, SW rx_dropped counter was overwritten by HW rx_dropped
> counter, sum both of them instead to show the accurate value.
> 
> Fixes: a3333b35da16 ('net/mlx4_en: Moderate ethtool callback to [...] ')
> Signed-off-by: Eran Ben Elisha <eranbe@mellanox.com>
> Reported-by: Brenden Blanco <bblanco@plumgrid.com>
> Signed-off-by: Saeed Mahameed <saeedm@mellanox.com>
> Signed-off-by: Or Gerlitz <ogerlitz@mellanox.com>
> ---

Reported-by: Eric Dumazet <edumazet@google.com>

( http://www.spinics.net/lists/netdev/msg371318.html )

Thanks for following up !

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

* Re: [PATCH net 4/4] net/mlx4_en: Split SW RX dropped counter per RX ring
  2016-04-20 14:56   ` Eric Dumazet
@ 2016-04-20 15:00     ` Or Gerlitz
  2016-04-20 18:05       ` Florian Fainelli
  2016-04-21  1:02       ` Eric Dumazet
  0 siblings, 2 replies; 11+ messages in thread
From: Or Gerlitz @ 2016-04-20 15:00 UTC (permalink / raw)
  To: Eric Dumazet
  Cc: David S. Miller, netdev, Eran Ben Elisha, Yishai Hadas, Saeed Mahameed

On 4/20/2016 5:56 PM, Eric Dumazet wrote:
>> >Fixes: a3333b35da16 ('net/mlx4_en: Moderate ethtool callback to [...] ')
>> >Signed-off-by: Eran Ben Elisha<eranbe@mellanox.com>
>> >Reported-by: Brenden Blanco<bblanco@plumgrid.com>
>> >Signed-off-by: Saeed Mahameed<saeedm@mellanox.com>
>> >Signed-off-by: Or Gerlitz<ogerlitz@mellanox.com>
>> >---
> Reported-by: Eric Dumazet<edumazet@google.com>
>
> (http://www.spinics.net/lists/netdev/msg371318.html  )

Hi Eric,

Just to be sure, you'd like me to re-spin this and fix the reporter name?

>
> Thanks for following up !

sure

Or.

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

* Re: [PATCH net 4/4] net/mlx4_en: Split SW RX dropped counter per RX ring
  2016-04-20 15:00     ` Or Gerlitz
@ 2016-04-20 18:05       ` Florian Fainelli
  2016-04-21  1:02       ` Eric Dumazet
  1 sibling, 0 replies; 11+ messages in thread
From: Florian Fainelli @ 2016-04-20 18:05 UTC (permalink / raw)
  To: Or Gerlitz, Eric Dumazet
  Cc: David S. Miller, netdev, Eran Ben Elisha, Yishai Hadas, Saeed Mahameed

On 20/04/16 08:00, Or Gerlitz wrote:
> On 4/20/2016 5:56 PM, Eric Dumazet wrote:
>>> >Fixes: a3333b35da16 ('net/mlx4_en: Moderate ethtool callback to
>>> [...] ')
>>> >Signed-off-by: Eran Ben Elisha<eranbe@mellanox.com>
>>> >Reported-by: Brenden Blanco<bblanco@plumgrid.com>
>>> >Signed-off-by: Saeed Mahameed<saeedm@mellanox.com>
>>> >Signed-off-by: Or Gerlitz<ogerlitz@mellanox.com>
>>> >---
>> Reported-by: Eric Dumazet<edumazet@google.com>
>>
>> (http://www.spinics.net/lists/netdev/msg371318.html  )
> 
> Hi Eric,
> 
> Just to be sure, you'd like me to re-spin this and fix the reporter name?

There is no need for that, patchwork amends Reported-by (and a bunch of
other tags) automatically when somebody replies to the message, see the
resulting mbox for this patch:

http://patchwork.ozlabs.org/patch/612664/mbox/
-- 
Florian

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

* Re: [PATCH net 4/4] net/mlx4_en: Split SW RX dropped counter per RX ring
  2016-04-20 15:00     ` Or Gerlitz
  2016-04-20 18:05       ` Florian Fainelli
@ 2016-04-21  1:02       ` Eric Dumazet
  2016-04-21  4:52         ` Or Gerlitz
  1 sibling, 1 reply; 11+ messages in thread
From: Eric Dumazet @ 2016-04-21  1:02 UTC (permalink / raw)
  To: Or Gerlitz
  Cc: David S. Miller, netdev, Eran Ben Elisha, Yishai Hadas, Saeed Mahameed

On Wed, 2016-04-20 at 18:00 +0300, Or Gerlitz wrote:

> Just to be sure, you'd like me to re-spin this and fix the reporter name?

Absolutely not, I believe patchwork should handle this just fine.

Patchwork does not understand the "Fixes:" tag yet, but Reported-by: is
fine.

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

* Re: [PATCH net 4/4] net/mlx4_en: Split SW RX dropped counter per RX ring
  2016-04-21  1:02       ` Eric Dumazet
@ 2016-04-21  4:52         ` Or Gerlitz
  0 siblings, 0 replies; 11+ messages in thread
From: Or Gerlitz @ 2016-04-21  4:52 UTC (permalink / raw)
  To: Eric Dumazet
  Cc: Or Gerlitz, David S. Miller, Linux Netdev List, Eran Ben Elisha,
	Yishai Hadas, Saeed Mahameed

On Thu, Apr 21, 2016 at 4:02 AM, Eric Dumazet <eric.dumazet@gmail.com> wrote:
> On Wed, 2016-04-20 at 18:00 +0300, Or Gerlitz wrote:

>> Just to be sure, you'd like me to re-spin this and fix the reporter name?

> Absolutely not, I believe patchwork should handle this just fine.
> Patchwork does not understand the "Fixes:" tag yet, but Reported-by: is
> fine.

OK, Eric and Florian, thanks for clarifying this out.

Or.

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

* Re: [PATCH net 0/4] Mellaox 40G driver fixes for 4.6-rc
  2016-04-20 13:01 [PATCH net 0/4] Mellaox 40G driver fixes for 4.6-rc Or Gerlitz
                   ` (3 preceding siblings ...)
  2016-04-20 13:01 ` [PATCH net 4/4] net/mlx4_en: Split SW RX dropped counter per RX ring Or Gerlitz
@ 2016-04-21 19:03 ` David Miller
  4 siblings, 0 replies; 11+ messages in thread
From: David Miller @ 2016-04-21 19:03 UTC (permalink / raw)
  To: ogerlitz; +Cc: netdev, eranbe, yishaih

From: Or Gerlitz <ogerlitz@mellanox.com>
Date: Wed, 20 Apr 2016 16:01:14 +0300

> With the fix for ARM bug being under the works, these are 
> few other fixes for mlx4 we have ready to go.
> 
> Eran addressed the problematic/wrong reporting of dropped packets, Daniel 
> fixed some matters related to PPC EEH's and Jenny's patch makes sure
> VFs can't change the port's pause settings.

Series applied, thanks.

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

end of thread, other threads:[~2016-04-21 19:03 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-04-20 13:01 [PATCH net 0/4] Mellaox 40G driver fixes for 4.6-rc Or Gerlitz
2016-04-20 13:01 ` [PATCH net 1/4] net/mlx4_core: Implement pci_resume callback Or Gerlitz
2016-04-20 13:01 ` [PATCH net 2/4] net/mlx4_core: Avoid repeated calls to pci enable/disable Or Gerlitz
2016-04-20 13:01 ` [PATCH net 3/4] net/mlx4_core: Don't allow to VF change global pause settings Or Gerlitz
2016-04-20 13:01 ` [PATCH net 4/4] net/mlx4_en: Split SW RX dropped counter per RX ring Or Gerlitz
2016-04-20 14:56   ` Eric Dumazet
2016-04-20 15:00     ` Or Gerlitz
2016-04-20 18:05       ` Florian Fainelli
2016-04-21  1:02       ` Eric Dumazet
2016-04-21  4:52         ` Or Gerlitz
2016-04-21 19:03 ` [PATCH net 0/4] Mellaox 40G driver fixes for 4.6-rc 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.