DPDK patches and discussions
 help / color / mirror / Atom feed
From: Pavel Belous <Pavel.Belous@aquantia.com>
To: Ferruh Yigit <ferruh.yigit@intel.com>
Cc: "dev@dpdk.org" <dev@dpdk.org>,
	Igor Russkikh <Igor.Russkikh@aquantia.com>,
	 Corey Melton <comelton@cisco.com>,
	Pavel Belous <Pavel.Belous@aquantia.com>,
	"stable@dpdk.org" <stable@dpdk.org>
Subject: [dpdk-dev] [PATCH v2 1/3] net/atlantic: exclude MACSEC counters from xstats
Date: Fri, 20 Sep 2019 16:22:02 +0000	[thread overview]
Message-ID: <85744ec877be5433cc028e25c7d00f7231fa927c.1568994395.git.Pavel.Belous@aquantia.com> (raw)
In-Reply-To: <cover.1568994395.git.Pavel.Belous@aquantia.com>

From: Pavel Belous <Pavel.Belous@aquantia.com>

Currently, driver always return full set of xstats counters, including
MACSEC counters. But this driver also supports AQC100 chips, which
does not have MACSEC feature.
This fix adds checking for MACSEC availability (based on FW capability
bits) and returns xstats without MACSEC counters if MACSEC feature
is not available.

Fixes: 09d4dfa85359 ("net/atlantic: implement MACsec statistics")
Cc: stable@dpdk.org
Signed-off-by: Pavel Belous <Pavel.Belous@aquantia.com>
Signed-off-by: Igor Russkikh <igor.russkikh@aquantia.com>
---
 drivers/net/atlantic/atl_ethdev.c | 52 ++++++++++++++++++++++++++++-----------
 1 file changed, 38 insertions(+), 14 deletions(-)

diff --git a/drivers/net/atlantic/atl_ethdev.c b/drivers/net/atlantic/atl_ethdev.c
index 3c1b349..178f7db 100644
--- a/drivers/net/atlantic/atl_ethdev.c
+++ b/drivers/net/atlantic/atl_ethdev.c
@@ -993,20 +993,42 @@ atl_dev_stats_reset(struct rte_eth_dev *dev)
 }
 
 static int
+atl_dev_xstats_get_count(struct rte_eth_dev *dev)
+{
+	struct atl_adapter *adapter =
+		(struct atl_adapter *)dev->data->dev_private;
+
+	struct aq_hw_s *hw = &adapter->hw;
+	unsigned int i, count = 0;
+
+	for (i = 0; i < RTE_DIM(atl_xstats_tbl); i++) {
+		if (atl_xstats_tbl[i].type == XSTATS_TYPE_MACSEC &&
+			((hw->caps_lo & BIT(CAPS_LO_MACSEC)) == 0))
+			continue;
+
+		count++;
+	}
+
+	return count;
+}
+
+static int
 atl_dev_xstats_get_names(struct rte_eth_dev *dev __rte_unused,
 			 struct rte_eth_xstat_name *xstats_names,
 			 unsigned int size)
 {
 	unsigned int i;
+	unsigned int count = atl_dev_xstats_get_count(dev);
 
-	if (!xstats_names)
-		return RTE_DIM(atl_xstats_tbl);
-
-	for (i = 0; i < size && i < RTE_DIM(atl_xstats_tbl); i++)
-		strlcpy(xstats_names[i].name, atl_xstats_tbl[i].name,
-			RTE_ETH_XSTATS_NAME_SIZE);
+	if (xstats_names) {
+		for (i = 0; i < size && i < count; i++) {
+			snprintf(xstats_names[i].name,
+				RTE_ETH_XSTATS_NAME_SIZE, "%s",
+				atl_xstats_tbl[i].name);
+		}
+	}
 
-	return i;
+	return count;
 }
 
 static int
@@ -1020,9 +1042,10 @@ atl_dev_xstats_get(struct rte_eth_dev *dev, struct rte_eth_xstat *stats,
 	struct macsec_msg_fw_response resp = { 0 };
 	int err = -1;
 	unsigned int i;
+	unsigned int count = atl_dev_xstats_get_count(dev);
 
 	if (!stats)
-		return 0;
+		return count;
 
 	if (hw->aq_fw_ops->send_macsec_req != NULL) {
 		req.ingress_sa_index = 0xff;
@@ -1035,7 +1058,7 @@ atl_dev_xstats_get(struct rte_eth_dev *dev, struct rte_eth_xstat *stats,
 		err = hw->aq_fw_ops->send_macsec_req(hw, &msg, &resp);
 	}
 
-	for (i = 0; i < n && i < RTE_DIM(atl_xstats_tbl); i++) {
+	for (i = 0; i < n && i < count; i++) {
 		stats[i].id = i;
 
 		switch (atl_xstats_tbl[i].type) {
@@ -1044,14 +1067,15 @@ atl_dev_xstats_get(struct rte_eth_dev *dev, struct rte_eth_xstat *stats,
 					 atl_xstats_tbl[i].offset);
 			break;
 		case XSTATS_TYPE_MACSEC:
-			if (err)
-				goto done;
-			stats[i].value = *(u64 *)((uint8_t *)&resp.stats +
-					 atl_xstats_tbl[i].offset);
+			if (!err) {
+				stats[i].value =
+					*(u64 *)((uint8_t *)&resp.stats +
+					atl_xstats_tbl[i].offset);
+			}
 			break;
 		}
 	}
-done:
+
 	return i;
 }
 
-- 
2.7.4


  reply	other threads:[~2019-09-20 16:22 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-09-20 16:21 [dpdk-dev] [PATCH v2 0/3] net/atlantic: Atlantic PMD updates Pavel Belous
2019-09-20 16:22 ` Pavel Belous [this message]
2019-09-20 16:22 ` [dpdk-dev] [PATCH v2 2/3] net/atlantic: fix reported flow control mode Pavel Belous
2019-09-20 16:22 ` [dpdk-dev] [PATCH v2 3/3] net/atlantic: add FW mailbox guard mutex Pavel Belous
2019-10-07 12:42 ` [dpdk-dev] [PATCH v2 0/3] net/atlantic: Atlantic PMD updates Ferruh Yigit

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=85744ec877be5433cc028e25c7d00f7231fa927c.1568994395.git.Pavel.Belous@aquantia.com \
    --to=pavel.belous@aquantia.com \
    --cc=Igor.Russkikh@aquantia.com \
    --cc=comelton@cisco.com \
    --cc=dev@dpdk.org \
    --cc=ferruh.yigit@intel.com \
    --cc=stable@dpdk.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).