[dpdk-stable] patch 'net/qede: fix stats flow as per new allocation method' has been queued to LTS release 18.11.6

Kevin Traynor ktraynor at redhat.com
Fri Nov 22 15:41:28 CET 2019


Hi,

FYI, your patch has been queued to LTS release 18.11.6

Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 11/29/19. So please
shout if anyone has objections.

Also note that after the patch there's a diff of the upstream commit vs the
patch applied to the branch. This will indicate if there was any rebasing
needed to apply to the stable branch. If there were code changes for rebasing
(ie: not only metadata diffs), please double check that the rebase was
correctly done.

Queued patches are on a temporary branch at:
https://github.com/kevintraynor/dpdk-stable-queue

This queued commit can be viewed at:
https://github.com/kevintraynor/dpdk-stable-queue/commit/0dede47cf0a1eb29c7d44f8944675bb4a335df7e

Thanks.

Kevin.

---
>From 0dede47cf0a1eb29c7d44f8944675bb4a335df7e Mon Sep 17 00:00:00 2001
From: Shahed Shaikh <shshaikh at marvell.com>
Date: Thu, 12 Sep 2019 08:24:15 -0700
Subject: [PATCH] net/qede: fix stats flow as per new allocation method

[ upstream commit 0aa3e7b925e1ebefdcb9e49d4b1a4c4bc9a127c9 ]

As per new method, need to consider hw stats of queues from
both engines. This patch fixes the stats collection flow accordingly.

Fixes: 2af14ca79c0a ("net/qede: support 100G")

Signed-off-by: Shahed Shaikh <shshaikh at marvell.com>
---
 drivers/net/qede/qede_ethdev.c | 143 ++++++++++++++++++---------------
 1 file changed, 79 insertions(+), 64 deletions(-)

diff --git a/drivers/net/qede/qede_ethdev.c b/drivers/net/qede/qede_ethdev.c
index 493d0bce0..97d991cad 100644
--- a/drivers/net/qede/qede_ethdev.c
+++ b/drivers/net/qede/qede_ethdev.c
@@ -6,4 +6,5 @@
 
 #include "qede_ethdev.h"
+#include <rte_string_fns.h>
 #include <rte_alarm.h>
 #include <rte_version.h>
@@ -1475,5 +1476,5 @@ qede_get_stats(struct rte_eth_dev *eth_dev, struct rte_eth_stats *eth_stats)
 	struct ecore_dev *edev = &qdev->edev;
 	struct ecore_eth_stats stats;
-	unsigned int i = 0, j = 0, qid;
+	unsigned int i = 0, j = 0, qid, idx, hw_fn;
 	unsigned int rxq_stat_cntrs, txq_stat_cntrs;
 	struct qede_tx_queue *txq;
@@ -1523,18 +1524,26 @@ qede_get_stats(struct rte_eth_dev *eth_dev, struct rte_eth_stats *eth_stats)
 
 	for (qid = 0; qid < eth_dev->data->nb_rx_queues; qid++) {
-		eth_stats->q_ipackets[i] =
-			*(uint64_t *)(
-				((char *)(qdev->fp_array[qid].rxq)) +
-				offsetof(struct qede_rx_queue,
-				rcv_pkts));
-		eth_stats->q_errors[i] =
-			*(uint64_t *)(
-				((char *)(qdev->fp_array[qid].rxq)) +
-				offsetof(struct qede_rx_queue,
-				rx_hw_errors)) +
-			*(uint64_t *)(
-				((char *)(qdev->fp_array[qid].rxq)) +
-				offsetof(struct qede_rx_queue,
-				rx_alloc_errors));
+		eth_stats->q_ipackets[i] = 0;
+		eth_stats->q_errors[i] = 0;
+
+		for_each_hwfn(edev, hw_fn) {
+			idx = qid * edev->num_hwfns + hw_fn;
+
+			eth_stats->q_ipackets[i] +=
+				*(uint64_t *)
+					(((char *)(qdev->fp_array[idx].rxq)) +
+					 offsetof(struct qede_rx_queue,
+					 rcv_pkts));
+			eth_stats->q_errors[i] +=
+				*(uint64_t *)
+					(((char *)(qdev->fp_array[idx].rxq)) +
+					 offsetof(struct qede_rx_queue,
+					 rx_hw_errors)) +
+				*(uint64_t *)
+					(((char *)(qdev->fp_array[idx].rxq)) +
+					 offsetof(struct qede_rx_queue,
+					 rx_alloc_errors));
+		}
+
 		i++;
 		if (i == rxq_stat_cntrs)
@@ -1543,10 +1552,17 @@ qede_get_stats(struct rte_eth_dev *eth_dev, struct rte_eth_stats *eth_stats)
 
 	for (qid = 0; qid < eth_dev->data->nb_tx_queues; qid++) {
-		txq = qdev->fp_array[qid].txq;
-		eth_stats->q_opackets[j] =
-			*((uint64_t *)(uintptr_t)
-				(((uint64_t)(uintptr_t)(txq)) +
-				 offsetof(struct qede_tx_queue,
-					  xmit_pkts)));
+		eth_stats->q_opackets[j] = 0;
+
+		for_each_hwfn(edev, hw_fn) {
+			idx = qid * edev->num_hwfns + hw_fn;
+
+			txq = qdev->fp_array[idx].txq;
+			eth_stats->q_opackets[j] +=
+				*((uint64_t *)(uintptr_t)
+					(((uint64_t)(uintptr_t)(txq)) +
+					 offsetof(struct qede_tx_queue,
+						  xmit_pkts)));
+		}
+
 		j++;
 		if (j == txq_stat_cntrs)
@@ -1581,43 +1597,41 @@ qede_get_xstats_names(struct rte_eth_dev *dev,
 	struct ecore_dev *edev = &qdev->edev;
 	const unsigned int stat_cnt = qede_get_xstats_count(qdev);
-	unsigned int i, qid, stat_idx = 0;
-	unsigned int rxq_stat_cntrs;
+	unsigned int i, qid, hw_fn, stat_idx = 0;
 
-	if (xstats_names != NULL) {
-		for (i = 0; i < RTE_DIM(qede_xstats_strings); i++) {
-			snprintf(xstats_names[stat_idx].name,
-				sizeof(xstats_names[stat_idx].name),
-				"%s",
-				qede_xstats_strings[i].name);
+	if (xstats_names == NULL)
+		return stat_cnt;
+
+	for (i = 0; i < RTE_DIM(qede_xstats_strings); i++) {
+		strlcpy(xstats_names[stat_idx].name,
+			qede_xstats_strings[i].name,
+			sizeof(xstats_names[stat_idx].name));
+		stat_idx++;
+	}
+
+	if (ECORE_IS_BB(edev)) {
+		for (i = 0; i < RTE_DIM(qede_bb_xstats_strings); i++) {
+			strlcpy(xstats_names[stat_idx].name,
+				qede_bb_xstats_strings[i].name,
+				sizeof(xstats_names[stat_idx].name));
 			stat_idx++;
 		}
-
-		if (ECORE_IS_BB(edev)) {
-			for (i = 0; i < RTE_DIM(qede_bb_xstats_strings); i++) {
-				snprintf(xstats_names[stat_idx].name,
-					sizeof(xstats_names[stat_idx].name),
-					"%s",
-					qede_bb_xstats_strings[i].name);
-				stat_idx++;
-			}
-		} else {
-			for (i = 0; i < RTE_DIM(qede_ah_xstats_strings); i++) {
-				snprintf(xstats_names[stat_idx].name,
-					sizeof(xstats_names[stat_idx].name),
-					"%s",
-					qede_ah_xstats_strings[i].name);
-				stat_idx++;
-			}
+	} else {
+		for (i = 0; i < RTE_DIM(qede_ah_xstats_strings); i++) {
+			strlcpy(xstats_names[stat_idx].name,
+				qede_ah_xstats_strings[i].name,
+				sizeof(xstats_names[stat_idx].name));
+			stat_idx++;
 		}
+	}
 
-		rxq_stat_cntrs = RTE_MIN(QEDE_RSS_COUNT(dev),
-					 RTE_ETHDEV_QUEUE_STAT_CNTRS);
-		for (qid = 0; qid < rxq_stat_cntrs; qid++) {
+	for (qid = 0; qid < QEDE_RSS_COUNT(dev); qid++) {
+		for_each_hwfn(edev, hw_fn) {
 			for (i = 0; i < RTE_DIM(qede_rxq_xstats_strings); i++) {
 				snprintf(xstats_names[stat_idx].name,
-					sizeof(xstats_names[stat_idx].name),
-					"%.4s%d%s",
-					qede_rxq_xstats_strings[i].name, qid,
-					qede_rxq_xstats_strings[i].name + 4);
+					 RTE_ETH_XSTATS_NAME_SIZE,
+					 "%.4s%d.%d%s",
+					 qede_rxq_xstats_strings[i].name,
+					 hw_fn, qid,
+					 qede_rxq_xstats_strings[i].name + 4);
 				stat_idx++;
 			}
@@ -1636,6 +1650,5 @@ qede_get_xstats(struct rte_eth_dev *dev, struct rte_eth_xstat *xstats,
 	struct ecore_eth_stats stats;
 	const unsigned int num = qede_get_xstats_count(qdev);
-	unsigned int i, qid, stat_idx = 0;
-	unsigned int rxq_stat_cntrs;
+	unsigned int i, qid, hw_fn, fpidx, stat_idx = 0;
 
 	if (n < num)
@@ -1669,13 +1682,15 @@ qede_get_xstats(struct rte_eth_dev *dev, struct rte_eth_xstat *xstats,
 	}
 
-	rxq_stat_cntrs = RTE_MIN(QEDE_RSS_COUNT(dev),
-				 RTE_ETHDEV_QUEUE_STAT_CNTRS);
-	for (qid = 0; qid < rxq_stat_cntrs; qid++) {
-		for (i = 0; i < RTE_DIM(qede_rxq_xstats_strings); i++) {
-			xstats[stat_idx].value = *(uint64_t *)
-				(((char *)(qdev->fp_array[qid].rxq)) +
-				 qede_rxq_xstats_strings[i].offset);
-			xstats[stat_idx].id = stat_idx;
-			stat_idx++;
+	for (qid = 0; qid < dev->data->nb_rx_queues; qid++) {
+		for_each_hwfn(edev, hw_fn) {
+			for (i = 0; i < RTE_DIM(qede_rxq_xstats_strings); i++) {
+				fpidx = qid * edev->num_hwfns + hw_fn;
+				xstats[stat_idx].value = *(uint64_t *)
+					(((char *)(qdev->fp_array[fpidx].rxq)) +
+					 qede_rxq_xstats_strings[i].offset);
+				xstats[stat_idx].id = stat_idx;
+				stat_idx++;
+			}
+
 		}
 	}
-- 
2.21.0

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2019-11-22 14:36:57.441184443 +0000
+++ 0042-net-qede-fix-stats-flow-as-per-new-allocation-method.patch	2019-11-22 14:36:55.226148666 +0000
@@ -1 +1 @@
-From 0aa3e7b925e1ebefdcb9e49d4b1a4c4bc9a127c9 Mon Sep 17 00:00:00 2001
+From 0dede47cf0a1eb29c7d44f8944675bb4a335df7e Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 0aa3e7b925e1ebefdcb9e49d4b1a4c4bc9a127c9 ]
+
@@ -10 +11,0 @@
-Cc: stable at dpdk.org
@@ -14,2 +15,2 @@
- drivers/net/qede/qede_ethdev.c | 135 +++++++++++++++++++--------------
- 1 file changed, 76 insertions(+), 59 deletions(-)
+ drivers/net/qede/qede_ethdev.c | 143 ++++++++++++++++++---------------
+ 1 file changed, 79 insertions(+), 64 deletions(-)
@@ -18 +19 @@
-index 8b75ca3a7..98290fdc7 100644
+index 493d0bce0..97d991cad 100644
@@ -21 +22,7 @@
-@@ -1478,5 +1478,5 @@ qede_get_stats(struct rte_eth_dev *eth_dev, struct rte_eth_stats *eth_stats)
+@@ -6,4 +6,5 @@
+ 
+ #include "qede_ethdev.h"
++#include <rte_string_fns.h>
+ #include <rte_alarm.h>
+ #include <rte_version.h>
+@@ -1475,5 +1476,5 @@ qede_get_stats(struct rte_eth_dev *eth_dev, struct rte_eth_stats *eth_stats)
@@ -28 +35 @@
-@@ -1526,18 +1526,26 @@ qede_get_stats(struct rte_eth_dev *eth_dev, struct rte_eth_stats *eth_stats)
+@@ -1523,18 +1524,26 @@ qede_get_stats(struct rte_eth_dev *eth_dev, struct rte_eth_stats *eth_stats)
@@ -69 +76 @@
-@@ -1546,10 +1554,17 @@ qede_get_stats(struct rte_eth_dev *eth_dev, struct rte_eth_stats *eth_stats)
+@@ -1543,10 +1552,17 @@ qede_get_stats(struct rte_eth_dev *eth_dev, struct rte_eth_stats *eth_stats)
@@ -93 +100 @@
-@@ -1584,40 +1599,41 @@ qede_get_xstats_names(struct rte_eth_dev *dev,
+@@ -1581,43 +1597,41 @@ qede_get_xstats_names(struct rte_eth_dev *dev,
@@ -101,0 +109,4 @@
+-			snprintf(xstats_names[stat_idx].name,
+-				sizeof(xstats_names[stat_idx].name),
+-				"%s",
+-				qede_xstats_strings[i].name);
@@ -114,2 +125 @@
- 			strlcpy(xstats_names[stat_idx].name,
--				qede_xstats_strings[i].name,
++			strlcpy(xstats_names[stat_idx].name,
@@ -117 +127 @@
- 				sizeof(xstats_names[stat_idx].name));
++				sizeof(xstats_names[stat_idx].name));
@@ -123,3 +133,4 @@
--				strlcpy(xstats_names[stat_idx].name,
--					qede_bb_xstats_strings[i].name,
--					sizeof(xstats_names[stat_idx].name));
+-				snprintf(xstats_names[stat_idx].name,
+-					sizeof(xstats_names[stat_idx].name),
+-					"%s",
+-					qede_bb_xstats_strings[i].name);
@@ -130,3 +141,4 @@
--				strlcpy(xstats_names[stat_idx].name,
--					qede_ah_xstats_strings[i].name,
--					sizeof(xstats_names[stat_idx].name));
+-				snprintf(xstats_names[stat_idx].name,
+-					sizeof(xstats_names[stat_idx].name),
+-					"%s",
+-					qede_ah_xstats_strings[i].name);
@@ -162 +174 @@
-@@ -1636,6 +1652,5 @@ qede_get_xstats(struct rte_eth_dev *dev, struct rte_eth_xstat *xstats,
+@@ -1636,6 +1650,5 @@ qede_get_xstats(struct rte_eth_dev *dev, struct rte_eth_xstat *xstats,
@@ -170 +182 @@
-@@ -1669,13 +1684,15 @@ qede_get_xstats(struct rte_eth_dev *dev, struct rte_eth_xstat *xstats,
+@@ -1669,13 +1682,15 @@ qede_get_xstats(struct rte_eth_dev *dev, struct rte_eth_xstat *xstats,



More information about the stable mailing list