[RFC 1/6] net/memif: fix issues in statistics
Stephen Hemminger
stephen at networkplumber.org
Sat Aug 29 03:55:23 CEST 2026
The statistics structure is already cleared in ethdev before
calling PMD.
Statistics from all queues should be counted against overall
packets; the constant RTE_ETHDEV_QUEUE_STAT_CNTRS is upper
bound on the array of queue stats.
Fixes: 58ae74244c90 ("ethdev: remove queue stats from basic stats structure")
Cc: stable at dpdk.org
Signed-off-by: Stephen Hemminger <stephen at networkplumber.org>
---
drivers/net/memif/rte_eth_memif.c | 20 +++++---------------
1 file changed, 5 insertions(+), 15 deletions(-)
diff --git a/drivers/net/memif/rte_eth_memif.c b/drivers/net/memif/rte_eth_memif.c
index 5d153c3a5a..65aee0bf08 100644
--- a/drivers/net/memif/rte_eth_memif.c
+++ b/drivers/net/memif/rte_eth_memif.c
@@ -1597,23 +1597,15 @@ memif_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats,
{
struct pmd_internals *pmd = dev->data->dev_private;
struct memif_queue *mq;
- int i;
- uint8_t tmp, nq;
-
- stats->ipackets = 0;
- stats->ibytes = 0;
- stats->opackets = 0;
- stats->obytes = 0;
+ unsigned int i, nq;
- tmp = (pmd->role == MEMIF_ROLE_CLIENT) ? pmd->run.num_s2c_rings :
+ nq = (pmd->role == MEMIF_ROLE_CLIENT) ? pmd->run.num_s2c_rings :
pmd->run.num_c2s_rings;
- nq = (tmp < RTE_ETHDEV_QUEUE_STAT_CNTRS) ? tmp :
- RTE_ETHDEV_QUEUE_STAT_CNTRS;
/* RX stats */
for (i = 0; i < nq; i++) {
mq = dev->data->rx_queues[i];
- if (qstats != NULL) {
+ if (qstats != NULL && i < RTE_ETHDEV_QUEUE_STAT_CNTRS) {
qstats->q_ipackets[i] = mq->n_pkts;
qstats->q_ibytes[i] = mq->n_bytes;
}
@@ -1622,15 +1614,13 @@ memif_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats,
stats->ierrors += mq->n_err;
}
- tmp = (pmd->role == MEMIF_ROLE_CLIENT) ? pmd->run.num_c2s_rings :
+ nq = (pmd->role == MEMIF_ROLE_CLIENT) ? pmd->run.num_c2s_rings :
pmd->run.num_s2c_rings;
- nq = (tmp < RTE_ETHDEV_QUEUE_STAT_CNTRS) ? tmp :
- RTE_ETHDEV_QUEUE_STAT_CNTRS;
/* TX stats */
for (i = 0; i < nq; i++) {
mq = dev->data->tx_queues[i];
- if (qstats != NULL) {
+ if (qstats != NULL && i < RTE_ETHDEV_QUEUE_STAT_CNTRS) {
qstats->q_opackets[i] = mq->n_pkts;
qstats->q_obytes[i] = mq->n_bytes;
}
--
2.53.0
More information about the stable
mailing list