[dpdk-stable] patch 'net/netvsc: fix xstats for VF device' has been queued to LTS release 18.11.3

Kevin Traynor ktraynor at redhat.com
Fri Aug 23 11:43:13 CEST 2019


Hi,

FYI, your patch has been queued to LTS release 18.11.3

Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 08/28/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/a8a965216c4bf161974ddd265c85534a99f8a566

Thanks.

Kevin Traynor

---
>From a8a965216c4bf161974ddd265c85534a99f8a566 Mon Sep 17 00:00:00 2001
From: Stephen Hemminger <stephen at networkplumber.org>
Date: Thu, 20 Jun 2019 15:09:24 -0700
Subject: [PATCH] net/netvsc: fix xstats for VF device

[ upstream commit cc9271f9e7ee5723677e57f2d49720d3828b51b6 ]

The id values for VF stats were not being offset correctly.
And getting xstats for VF device only worked if VF device supported
it; it did not support the generic stats.

Fixes: dc7680e8597c ("net/netvsc: support integrated VF")

Signed-off-by: Stephen Hemminger <stephen at networkplumber.org>
---
 drivers/net/netvsc/hn_ethdev.c |  2 +-
 drivers/net/netvsc/hn_var.h    |  2 +-
 drivers/net/netvsc/hn_vf.c     | 26 ++++++++++++++++++--------
 3 files changed, 20 insertions(+), 10 deletions(-)

diff --git a/drivers/net/netvsc/hn_ethdev.c b/drivers/net/netvsc/hn_ethdev.c
index cf03972fd..c2cf0afc8 100644
--- a/drivers/net/netvsc/hn_ethdev.c
+++ b/drivers/net/netvsc/hn_ethdev.c
@@ -594,5 +594,5 @@ hn_dev_xstats_get(struct rte_eth_dev *dev,
 	}
 
-	ret = hn_vf_xstats_get(dev, xstats + count, n - count);
+	ret = hn_vf_xstats_get(dev, xstats, count, n);
 	if (ret < 0)
 		return ret;
diff --git a/drivers/net/netvsc/hn_var.h b/drivers/net/netvsc/hn_var.h
index b31563435..d10e164e6 100644
--- a/drivers/net/netvsc/hn_var.h
+++ b/drivers/net/netvsc/hn_var.h
@@ -236,4 +236,4 @@ int	hn_vf_xstats_get_names(struct rte_eth_dev *dev,
 int	hn_vf_xstats_get(struct rte_eth_dev *dev,
 			 struct rte_eth_xstat *xstats,
-			 unsigned int n);
+			 unsigned int offset, unsigned int n);
 void	hn_vf_xstats_reset(struct rte_eth_dev *dev);
diff --git a/drivers/net/netvsc/hn_vf.c b/drivers/net/netvsc/hn_vf.c
index 4127e411f..50f92a00a 100644
--- a/drivers/net/netvsc/hn_vf.c
+++ b/drivers/net/netvsc/hn_vf.c
@@ -501,10 +501,10 @@ int hn_vf_xstats_get_names(struct rte_eth_dev *dev,
 	struct rte_eth_dev *vf_dev;
 	int i, count = 0;
-	char tmp[RTE_ETH_XSTATS_NAME_SIZE];
 
 	rte_spinlock_lock(&hv->vf_lock);
 	vf_dev = hn_get_vf_dev(hv);
-	if (vf_dev && vf_dev->dev_ops->xstats_get_names)
-		count = vf_dev->dev_ops->xstats_get_names(vf_dev, names, n);
+	if (vf_dev)
+		count = rte_eth_xstats_get_names(vf_dev->data->port_id,
+						 names, n);
 	rte_spinlock_unlock(&hv->vf_lock);
 
@@ -512,4 +512,6 @@ int hn_vf_xstats_get_names(struct rte_eth_dev *dev,
 	if (names) {
 		for (i = 0; i < count; i++) {
+			char tmp[RTE_ETH_XSTATS_NAME_SIZE];
+
 			snprintf(tmp, sizeof(tmp), "vf_%s", names[i].name);
 			strlcpy(names[i].name, tmp, sizeof(names[i].name));
@@ -522,16 +524,24 @@ int hn_vf_xstats_get_names(struct rte_eth_dev *dev,
 int hn_vf_xstats_get(struct rte_eth_dev *dev,
 		     struct rte_eth_xstat *xstats,
+		     unsigned int offset,
 		     unsigned int n)
 {
 	struct hn_data *hv = dev->data->dev_private;
 	struct rte_eth_dev *vf_dev;
-	int count = 0;
+	int i, count = 0;
 
 	rte_spinlock_lock(&hv->vf_lock);
 	vf_dev = hn_get_vf_dev(hv);
-	if (vf_dev && vf_dev->dev_ops->xstats_get)
-		count = vf_dev->dev_ops->xstats_get(vf_dev, xstats, n);
+	if (vf_dev)
+		count = rte_eth_xstats_get(vf_dev->data->port_id,
+					   xstats + offset, n - offset);
 	rte_spinlock_unlock(&hv->vf_lock);
 
+	/* Offset id's for VF stats */
+	if (count > 0) {
+		for (i = 0; i < count; i++)
+			xstats[i + offset].id += offset;
+	}
+
 	return count;
 }
@@ -544,6 +554,6 @@ void hn_vf_xstats_reset(struct rte_eth_dev *dev)
 	rte_spinlock_lock(&hv->vf_lock);
 	vf_dev = hn_get_vf_dev(hv);
-	if (vf_dev && vf_dev->dev_ops->xstats_reset)
-		vf_dev->dev_ops->xstats_reset(vf_dev);
+	if (vf_dev)
+		rte_eth_xstats_reset(vf_dev->data->port_id);
 	rte_spinlock_unlock(&hv->vf_lock);
 }
-- 
2.20.1

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2019-08-22 19:38:21.965337644 +0100
+++ 0023-net-netvsc-fix-xstats-for-VF-device.patch	2019-08-22 19:38:20.444026713 +0100
@@ -1 +1 @@
-From cc9271f9e7ee5723677e57f2d49720d3828b51b6 Mon Sep 17 00:00:00 2001
+From a8a965216c4bf161974ddd265c85534a99f8a566 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit cc9271f9e7ee5723677e57f2d49720d3828b51b6 ]
+
@@ -11 +12,0 @@
-Cc: stable at dpdk.org
@@ -21 +22 @@
-index 69cf5d1d9..2a90d674e 100644
+index cf03972fd..c2cf0afc8 100644
@@ -24 +25 @@
-@@ -764,5 +764,5 @@ hn_dev_xstats_get(struct rte_eth_dev *dev,
+@@ -594,5 +594,5 @@ hn_dev_xstats_get(struct rte_eth_dev *dev,
@@ -32 +33 @@
-index 1756615a3..3f5e8dfa7 100644
+index b31563435..d10e164e6 100644
@@ -35 +36 @@
-@@ -242,5 +242,5 @@ int	hn_vf_xstats_get_names(struct rte_eth_dev *dev,
+@@ -236,4 +236,4 @@ int	hn_vf_xstats_get_names(struct rte_eth_dev *dev,
@@ -41 +41,0 @@
- int	hn_vf_rss_hash_update(struct rte_eth_dev *dev,
@@ -43 +43 @@
-index 764cf844c..03f855b94 100644
+index 4127e411f..50f92a00a 100644
@@ -46 +46 @@
-@@ -507,10 +507,10 @@ int hn_vf_xstats_get_names(struct rte_eth_dev *dev,
+@@ -501,10 +501,10 @@ int hn_vf_xstats_get_names(struct rte_eth_dev *dev,
@@ -60 +60 @@
-@@ -518,4 +518,6 @@ int hn_vf_xstats_get_names(struct rte_eth_dev *dev,
+@@ -512,4 +512,6 @@ int hn_vf_xstats_get_names(struct rte_eth_dev *dev,
@@ -67 +67 @@
-@@ -528,16 +530,24 @@ int hn_vf_xstats_get_names(struct rte_eth_dev *dev,
+@@ -522,16 +524,24 @@ int hn_vf_xstats_get_names(struct rte_eth_dev *dev,
@@ -95 +95 @@
-@@ -550,6 +560,6 @@ void hn_vf_xstats_reset(struct rte_eth_dev *dev)
+@@ -544,6 +554,6 @@ void hn_vf_xstats_reset(struct rte_eth_dev *dev)


More information about the stable mailing list