| 3218 | } |
| 3219 | |
| 3220 | static void ena_copy_customer_metrics(struct ena_adapter *adapter, uint64_t *buf, |
| 3221 | size_t num_metrics) |
| 3222 | { |
| 3223 | struct ena_com_dev *ena_dev = &adapter->ena_dev; |
| 3224 | int rc; |
| 3225 | |
| 3226 | if (ena_com_get_cap(ena_dev, ENA_ADMIN_CUSTOMER_METRICS)) { |
| 3227 | if (num_metrics != ENA_STATS_ARRAY_METRICS) { |
| 3228 | PMD_DRV_LOG(ERR, "Detected discrepancy in the number of customer metrics"); |
| 3229 | return; |
| 3230 | } |
| 3231 | rte_spinlock_lock(&adapter->admin_lock); |
| 3232 | rc = ENA_PROXY(adapter, |
| 3233 | ena_com_get_customer_metrics, |
| 3234 | &adapter->ena_dev, |
| 3235 | (char *)buf, |
| 3236 | num_metrics * sizeof(uint64_t)); |
| 3237 | rte_spinlock_unlock(&adapter->admin_lock); |
| 3238 | if (rc != 0) { |
| 3239 | PMD_DRV_LOG(WARNING, "Failed to get customer metrics, rc: %d\n", rc); |
| 3240 | return; |
| 3241 | } |
| 3242 | |
| 3243 | } else if (ena_com_get_cap(ena_dev, ENA_ADMIN_ENI_STATS)) { |
| 3244 | if (num_metrics != ENA_STATS_ARRAY_METRICS_LEGACY) { |
| 3245 | PMD_DRV_LOG(ERR, "Detected discrepancy in the number of legacy metrics"); |
| 3246 | return; |
| 3247 | } |
| 3248 | |
| 3249 | rte_spinlock_lock(&adapter->admin_lock); |
| 3250 | rc = ENA_PROXY(adapter, |
| 3251 | ena_com_get_eni_stats, |
| 3252 | &adapter->ena_dev, |
| 3253 | (struct ena_admin_eni_stats *)buf); |
| 3254 | rte_spinlock_unlock(&adapter->admin_lock); |
| 3255 | if (rc != 0) { |
| 3256 | PMD_DRV_LOG(WARNING, |
| 3257 | "Failed to get ENI metrics, rc: %d\n", rc); |
| 3258 | return; |
| 3259 | } |
| 3260 | } |
| 3261 | } |
| 3262 | |
| 3263 | static void ena_copy_ena_srd_info(struct ena_adapter *adapter, |
| 3264 | struct ena_stats_srd *srd_info) |
no test coverage detected