DPDK patches and discussions
 help / color / mirror / Atom feed
* [dpdk-dev] [PATCH v1] ethdev: fix xstats id mismatch
@ 2016-07-08 15:44 Remy Horton
  2016-07-09 21:22 ` Thomas Monjalon
  0 siblings, 1 reply; 2+ messages in thread
From: Remy Horton @ 2016-07-08 15:44 UTC (permalink / raw)
  To: thomas.monjalon; +Cc: dev

When fetching xstats values the driver specific parameters are
placed after the generic ones, but when fetching xstats names
the driver specific parameter names came first. This patch fixes
the resulting id mismatch between names and values.

Fixes: bd6aa172cf35 ("ethdev: fetch extended statistics with integer ids")

Signed-off-by: Remy Horton <remy.horton@intel.com>
---
 lib/librte_ether/rte_ethdev.c | 32 +++++++++++++++++++-------------
 1 file changed, 19 insertions(+), 13 deletions(-)

diff --git a/lib/librte_ether/rte_ethdev.c b/lib/librte_ether/rte_ethdev.c
index eac260f..80b4d90 100644
--- a/lib/librte_ether/rte_ethdev.c
+++ b/lib/librte_ether/rte_ethdev.c
@@ -1536,6 +1536,7 @@ rte_eth_xstats_get_names(uint8_t port_id,
 	struct rte_eth_dev *dev;
 	int cnt_used_entries;
 	int cnt_expected_entries;
+	int cnt_driver_entries;
 	uint32_t idx, id_queue;
 
 	cnt_expected_entries = get_xstats_count(port_id);
@@ -1545,16 +1546,7 @@ rte_eth_xstats_get_names(uint8_t port_id,
 
 	/* port_id checked in get_xstats_count() */
 	dev = &rte_eth_devices[port_id];
-	if (dev->dev_ops->xstats_get_names != NULL) {
-		cnt_used_entries = (*dev->dev_ops->xstats_get_names)(
-			dev, xstats_names, size);
-		if (cnt_used_entries < 0)
-			return cnt_used_entries;
-	} else
-		/* Driver itself does not support extended stats, but
-		 * still have basic stats.
-		 */
-		cnt_used_entries = 0;
+	cnt_used_entries = 0;
 
 	for (idx = 0; idx < RTE_NB_STATS; idx++) {
 		snprintf(xstats_names[cnt_used_entries].name,
@@ -1581,6 +1573,20 @@ rte_eth_xstats_get_names(uint8_t port_id,
 			cnt_used_entries++;
 		}
 	}
+
+	if (dev->dev_ops->xstats_get_names != NULL) {
+		/* If there are any driver-specific xstats, append them
+		 * to end of list.
+		 */
+		cnt_driver_entries = (*dev->dev_ops->xstats_get_names)(
+			dev,
+			xstats_names + cnt_used_entries,
+			size - cnt_used_entries);
+		if (cnt_driver_entries < 0)
+			return cnt_driver_entries;
+		cnt_used_entries += cnt_driver_entries;
+	}
+
 	return cnt_used_entries;
 }
 
@@ -1628,7 +1634,6 @@ rte_eth_xstats_get(uint8_t port_id, struct rte_eth_xstat *xstats,
 		stats_ptr = RTE_PTR_ADD(&eth_stats,
 					rte_stats_strings[i].offset);
 		val = *stats_ptr;
-		xstats[count].id = count + xcount;
 		xstats[count++].value = val;
 	}
 
@@ -1639,7 +1644,6 @@ rte_eth_xstats_get(uint8_t port_id, struct rte_eth_xstat *xstats,
 					rte_rxq_stats_strings[i].offset +
 					q * sizeof(uint64_t));
 			val = *stats_ptr;
-			xstats[count].id = count + xcount;
 			xstats[count++].value = val;
 		}
 	}
@@ -1651,11 +1655,13 @@ rte_eth_xstats_get(uint8_t port_id, struct rte_eth_xstat *xstats,
 					rte_txq_stats_strings[i].offset +
 					q * sizeof(uint64_t));
 			val = *stats_ptr;
-			xstats[count].id = count + xcount;
 			xstats[count++].value = val;
 		}
 	}
 
+	for (i = 0; i < count + xcount; i++)
+		xstats[i].id = i;
+
 	return count + xcount;
 }
 
-- 
2.5.5

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

end of thread, other threads:[~2016-07-09 21:22 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-07-08 15:44 [dpdk-dev] [PATCH v1] ethdev: fix xstats id mismatch Remy Horton
2016-07-09 21:22 ` Thomas Monjalon

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).