MCPcopy Create free account
hub / github.com/F-Stack/f-stack / ena_xstats_get

Function ena_xstats_get

dpdk/drivers/net/ena/ena_ethdev.c:3441–3510  ·  view source on GitHub ↗

* DPDK callback to get extended device statistics. * * @param dev * Pointer to Ethernet device structure. * @param[out] stats * Stats table output buffer. * @param n * The size of the stats table. * * @return * Number of xstats on success, negative on failure. */

Source from the content-addressed store, hash-verified

3439 * Number of xstats on success, negative on failure.
3440 */
3441static int ena_xstats_get(struct rte_eth_dev *dev,
3442 struct rte_eth_xstat *xstats,
3443 unsigned int n)
3444{
3445 struct ena_adapter *adapter = dev->data->dev_private;
3446 unsigned int xstats_count = ena_xstats_calc_num(dev->data);
3447 unsigned int stat, i, count = 0;
3448 int stat_offset;
3449 void *stats_begin;
3450 uint64_t metrics_stats[ENA_MAX_CUSTOMER_METRICS];
3451 struct ena_stats_srd srd_info = {0};
3452
3453 if (n < xstats_count)
3454 return xstats_count;
3455
3456 if (!xstats)
3457 return 0;
3458
3459 for (stat = 0; stat < ENA_STATS_ARRAY_GLOBAL; stat++, count++) {
3460 stat_offset = ena_stats_global_strings[stat].stat_offset;
3461 stats_begin = &adapter->dev_stats;
3462
3463 xstats[count].id = count;
3464 xstats[count].value = *((uint64_t *)
3465 ((char *)stats_begin + stat_offset));
3466 }
3467
3468 ena_copy_customer_metrics(adapter, metrics_stats, adapter->metrics_num);
3469 stats_begin = metrics_stats;
3470 for (stat = 0; stat < adapter->metrics_num; stat++, count++) {
3471 stat_offset = ena_stats_metrics_strings[stat].stat_offset;
3472
3473 xstats[count].id = count;
3474 xstats[count].value = *((uint64_t *)
3475 ((char *)stats_begin + stat_offset));
3476 }
3477
3478 ena_copy_ena_srd_info(adapter, &srd_info);
3479 stats_begin = &srd_info;
3480 for (stat = 0; stat < ENA_STATS_ARRAY_ENA_SRD; stat++, count++) {
3481 stat_offset = ena_stats_srd_strings[stat].stat_offset;
3482 xstats[count].id = count;
3483 xstats[count].value = *((uint64_t *)
3484 ((char *)stats_begin + stat_offset));
3485 }
3486
3487 for (stat = 0; stat < ENA_STATS_ARRAY_RX; stat++) {
3488 for (i = 0; i < dev->data->nb_rx_queues; i++, count++) {
3489 stat_offset = ena_stats_rx_strings[stat].stat_offset;
3490 stats_begin = &adapter->rx_ring[i].rx_stats;
3491
3492 xstats[count].id = count;
3493 xstats[count].value = *((uint64_t *)
3494 ((char *)stats_begin + stat_offset));
3495 }
3496 }
3497
3498 for (stat = 0; stat < ENA_STATS_ARRAY_TX; stat++) {

Callers

nothing calls this directly

Calls 3

ena_xstats_calc_numFunction · 0.85
ena_copy_ena_srd_infoFunction · 0.85

Tested by

no test coverage detected