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

Function ena_stats_get

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

Source from the content-addressed store, hash-verified

1142}
1143
1144static int ena_stats_get(struct rte_eth_dev *dev,
1145 struct rte_eth_stats *stats)
1146{
1147 struct ena_admin_basic_stats ena_stats;
1148 struct ena_adapter *adapter = dev->data->dev_private;
1149 struct ena_com_dev *ena_dev = &adapter->ena_dev;
1150 int rc;
1151 int i;
1152 int max_rings_stats;
1153
1154 memset(&ena_stats, 0, sizeof(ena_stats));
1155
1156 rte_spinlock_lock(&adapter->admin_lock);
1157 rc = ENA_PROXY(adapter, ena_com_get_dev_basic_stats, ena_dev,
1158 &ena_stats);
1159 rte_spinlock_unlock(&adapter->admin_lock);
1160 if (unlikely(rc)) {
1161 PMD_DRV_LOG(ERR, "Could not retrieve statistics from ENA\n");
1162 return rc;
1163 }
1164
1165 /* Set of basic statistics from ENA */
1166 stats->ipackets = __MERGE_64B_H_L(ena_stats.rx_pkts_high,
1167 ena_stats.rx_pkts_low);
1168 stats->opackets = __MERGE_64B_H_L(ena_stats.tx_pkts_high,
1169 ena_stats.tx_pkts_low);
1170 stats->ibytes = __MERGE_64B_H_L(ena_stats.rx_bytes_high,
1171 ena_stats.rx_bytes_low);
1172 stats->obytes = __MERGE_64B_H_L(ena_stats.tx_bytes_high,
1173 ena_stats.tx_bytes_low);
1174
1175 /* Driver related stats */
1176 stats->imissed = adapter->drv_stats->rx_drops;
1177 stats->ierrors = rte_atomic64_read(&adapter->drv_stats->ierrors);
1178 stats->oerrors = rte_atomic64_read(&adapter->drv_stats->oerrors);
1179 stats->rx_nombuf = rte_atomic64_read(&adapter->drv_stats->rx_nombuf);
1180
1181 max_rings_stats = RTE_MIN(dev->data->nb_rx_queues,
1182 RTE_ETHDEV_QUEUE_STAT_CNTRS);
1183 for (i = 0; i < max_rings_stats; ++i) {
1184 struct ena_stats_rx *rx_stats = &adapter->rx_ring[i].rx_stats;
1185
1186 stats->q_ibytes[i] = rx_stats->bytes;
1187 stats->q_ipackets[i] = rx_stats->cnt;
1188 stats->q_errors[i] = rx_stats->bad_desc_num +
1189 rx_stats->bad_req_id;
1190 }
1191
1192 max_rings_stats = RTE_MIN(dev->data->nb_tx_queues,
1193 RTE_ETHDEV_QUEUE_STAT_CNTRS);
1194 for (i = 0; i < max_rings_stats; ++i) {
1195 struct ena_stats_tx *tx_stats = &adapter->tx_ring[i].tx_stats;
1196
1197 stats->q_obytes[i] = tx_stats->bytes;
1198 stats->q_opackets[i] = tx_stats->cnt;
1199 }
1200
1201 return 0;

Callers

nothing calls this directly

Calls 4

memsetFunction · 0.85
rte_spinlock_lockFunction · 0.50
rte_spinlock_unlockFunction · 0.50
rte_atomic64_readFunction · 0.50

Tested by

no test coverage detected