ethdev: fix extended statistics name index
The function rte_eth_xstats_get() return an array of tuples (id,
value). The value is the statistic counter, while the id references a
name in the array returned by rte_eth_xstats_get_name().
Today, each 'id' returned by rte_eth_xstats_get() is equal to the index
in the returned array, making this value useless. It also prevents a
driver from having different indexes for names and value, like in the
example below:
rte_eth_xstats_get_name() returns:
0: "rx0_stat"
1: "rx1_stat"
2: ...
7: "rx7_stat"
8: "tx0_stat"
9: "tx1_stat"
...
15: "tx7_stat"
rte_eth_xstats_get() returns:
0: id=0, val=<stat> ("rx0_stat")
1: id=1, val=<stat> ("rx1_stat")
2: id=8, val=<stat> ("tx0_stat")
3: id=9, val=<stat> ("tx1_stat")
This patch fixes the drivers to set the 'id' in their ethdev->xstats_get()
(except e1000 which was already doing it), and fixes ethdev by not setting
the 'id' field to the index of the table for pmd-specific stats: instead,
they should just be shifted by the max number of generic statistics.
Fixes: bd6aa172cf
("ethdev: fetch extended statistics with integer ids")
Signed-off-by: Olivier Matz <olivier.matz@6wind.com>
Acked-by: Remy Horton <remy.horton@intel.com>
This commit is contained in:
parent
eac901ce29
commit
513c78ae3f
@ -422,6 +422,7 @@ bnx2x_dev_xstats_get(struct rte_eth_dev *dev, struct rte_eth_xstat *xstats,
|
||||
xstats[num].value =
|
||||
*(uint64_t *)((char *)&sc->eth_stats +
|
||||
bnx2x_xstats_strings[num].offset_lo);
|
||||
xstats[num].id = num;
|
||||
}
|
||||
|
||||
return num;
|
||||
|
@ -1317,6 +1317,7 @@ fm10k_xstats_get(struct rte_eth_dev *dev, struct rte_eth_xstat *xstats,
|
||||
for (i = 0; i < FM10K_NB_HW_XSTATS; i++) {
|
||||
xstats[count].value = *(uint64_t *)(((char *)hw_stats) +
|
||||
fm10k_hw_stats_strings[count].offset);
|
||||
xstats[count].id = count;
|
||||
count++;
|
||||
}
|
||||
|
||||
@ -1326,12 +1327,14 @@ fm10k_xstats_get(struct rte_eth_dev *dev, struct rte_eth_xstat *xstats,
|
||||
xstats[count].value =
|
||||
*(uint64_t *)(((char *)&hw_stats->q[q]) +
|
||||
fm10k_hw_stats_rx_q_strings[i].offset);
|
||||
xstats[count].id = count;
|
||||
count++;
|
||||
}
|
||||
for (i = 0; i < FM10K_NB_TX_Q_XSTATS; i++) {
|
||||
xstats[count].value =
|
||||
*(uint64_t *)(((char *)&hw_stats->q[q]) +
|
||||
fm10k_hw_stats_tx_q_strings[i].offset);
|
||||
xstats[count].id = count;
|
||||
count++;
|
||||
}
|
||||
}
|
||||
|
@ -2545,6 +2545,7 @@ i40e_dev_xstats_get(struct rte_eth_dev *dev, struct rte_eth_xstat *xstats,
|
||||
for (i = 0; i < I40E_NB_ETH_XSTATS; i++) {
|
||||
xstats[count].value = *(uint64_t *)(((char *)&hw_stats->eth) +
|
||||
rte_i40e_stats_strings[i].offset);
|
||||
xstats[count].id = count;
|
||||
count++;
|
||||
}
|
||||
|
||||
@ -2552,6 +2553,7 @@ i40e_dev_xstats_get(struct rte_eth_dev *dev, struct rte_eth_xstat *xstats,
|
||||
for (i = 0; i < I40E_NB_HW_PORT_XSTATS; i++) {
|
||||
xstats[count].value = *(uint64_t *)(((char *)hw_stats) +
|
||||
rte_i40e_hw_port_strings[i].offset);
|
||||
xstats[count].id = count;
|
||||
count++;
|
||||
}
|
||||
|
||||
@ -2561,6 +2563,7 @@ i40e_dev_xstats_get(struct rte_eth_dev *dev, struct rte_eth_xstat *xstats,
|
||||
*(uint64_t *)(((char *)hw_stats) +
|
||||
rte_i40e_rxq_prio_strings[i].offset +
|
||||
(sizeof(uint64_t) * prio));
|
||||
xstats[count].id = count;
|
||||
count++;
|
||||
}
|
||||
}
|
||||
@ -2571,6 +2574,7 @@ i40e_dev_xstats_get(struct rte_eth_dev *dev, struct rte_eth_xstat *xstats,
|
||||
*(uint64_t *)(((char *)hw_stats) +
|
||||
rte_i40e_txq_prio_strings[i].offset +
|
||||
(sizeof(uint64_t) * prio));
|
||||
xstats[count].id = count;
|
||||
count++;
|
||||
}
|
||||
}
|
||||
|
@ -2902,6 +2902,7 @@ ixgbe_dev_xstats_get(struct rte_eth_dev *dev, struct rte_eth_xstat *xstats,
|
||||
for (i = 0; i < IXGBE_NB_HW_STATS; i++) {
|
||||
xstats[count].value = *(uint64_t *)(((char *)hw_stats) +
|
||||
rte_ixgbe_stats_strings[i].offset);
|
||||
xstats[count].id = count;
|
||||
count++;
|
||||
}
|
||||
|
||||
@ -2911,6 +2912,7 @@ ixgbe_dev_xstats_get(struct rte_eth_dev *dev, struct rte_eth_xstat *xstats,
|
||||
xstats[count].value = *(uint64_t *)(((char *)hw_stats) +
|
||||
rte_ixgbe_rxq_strings[stat].offset +
|
||||
(sizeof(uint64_t) * i));
|
||||
xstats[count].id = count;
|
||||
count++;
|
||||
}
|
||||
}
|
||||
@ -2921,6 +2923,7 @@ ixgbe_dev_xstats_get(struct rte_eth_dev *dev, struct rte_eth_xstat *xstats,
|
||||
xstats[count].value = *(uint64_t *)(((char *)hw_stats) +
|
||||
rte_ixgbe_txq_strings[stat].offset +
|
||||
(sizeof(uint64_t) * i));
|
||||
xstats[count].id = count;
|
||||
count++;
|
||||
}
|
||||
}
|
||||
|
@ -975,6 +975,7 @@ qede_get_xstats(struct rte_eth_dev *dev, struct rte_eth_xstat *xstats,
|
||||
for (i = 0; i < RTE_DIM(qede_xstats_strings); i++) {
|
||||
xstats[stat_idx].value = *(uint64_t *)(((char *)&stats) +
|
||||
qede_xstats_strings[i].offset);
|
||||
xstats[stat_idx].id = stat_idx;
|
||||
stat_idx++;
|
||||
}
|
||||
|
||||
@ -984,6 +985,7 @@ qede_get_xstats(struct rte_eth_dev *dev, struct rte_eth_xstat *xstats,
|
||||
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++;
|
||||
}
|
||||
}
|
||||
|
@ -324,6 +324,7 @@ vhost_dev_xstats_get(struct rte_eth_dev *dev, struct rte_eth_xstat *xstats,
|
||||
*(uint64_t *)(((char *)vq)
|
||||
+ vhost_rxport_stat_strings[t].offset);
|
||||
}
|
||||
xstats[count].id = count;
|
||||
count++;
|
||||
}
|
||||
for (t = 0; t < VHOST_NB_XSTATS_TXPORT; t++) {
|
||||
@ -336,6 +337,7 @@ vhost_dev_xstats_get(struct rte_eth_dev *dev, struct rte_eth_xstat *xstats,
|
||||
*(uint64_t *)(((char *)vq)
|
||||
+ vhost_txport_stat_strings[t].offset);
|
||||
}
|
||||
xstats[count].id = count;
|
||||
count++;
|
||||
}
|
||||
return count;
|
||||
|
@ -893,6 +893,7 @@ virtio_dev_xstats_get(struct rte_eth_dev *dev, struct rte_eth_xstat *xstats,
|
||||
for (t = 0; t < VIRTIO_NB_RXQ_XSTATS; t++) {
|
||||
xstats[count].value = *(uint64_t *)(((char *)rxvq) +
|
||||
rte_virtio_rxq_stat_strings[t].offset);
|
||||
xstats[count].id = count;
|
||||
count++;
|
||||
}
|
||||
}
|
||||
@ -908,6 +909,7 @@ virtio_dev_xstats_get(struct rte_eth_dev *dev, struct rte_eth_xstat *xstats,
|
||||
for (t = 0; t < VIRTIO_NB_TXQ_XSTATS; t++) {
|
||||
xstats[count].value = *(uint64_t *)(((char *)txvq) +
|
||||
rte_virtio_txq_stat_strings[t].offset);
|
||||
xstats[count].id = count;
|
||||
count++;
|
||||
}
|
||||
}
|
||||
|
@ -1527,8 +1527,11 @@ rte_eth_xstats_get(uint8_t port_id, struct rte_eth_xstat *xstats,
|
||||
}
|
||||
}
|
||||
|
||||
for (i = 0; i < count + xcount; i++)
|
||||
for (i = 0; i < count; i++)
|
||||
xstats[i].id = i;
|
||||
/* add an offset to driver-specific stats */
|
||||
for ( ; i < count + xcount; i++)
|
||||
xstats[i].id += count;
|
||||
|
||||
return count + xcount;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user