| 443 | } |
| 444 | |
| 445 | static int |
| 446 | sw_xstats_update(struct sw_evdev *sw, enum rte_event_dev_xstats_mode mode, |
| 447 | uint8_t queue_port_id, const uint64_t ids[], |
| 448 | uint64_t values[], unsigned int n, const uint32_t reset, |
| 449 | const uint32_t ret_if_n_lt_nstats) |
| 450 | { |
| 451 | unsigned int i; |
| 452 | unsigned int xidx = 0; |
| 453 | RTE_SET_USED(mode); |
| 454 | RTE_SET_USED(queue_port_id); |
| 455 | |
| 456 | uint32_t xstats_mode_count = 0; |
| 457 | |
| 458 | switch (mode) { |
| 459 | case RTE_EVENT_DEV_XSTATS_DEVICE: |
| 460 | xstats_mode_count = sw->xstats_count_mode_dev; |
| 461 | break; |
| 462 | case RTE_EVENT_DEV_XSTATS_PORT: |
| 463 | if (queue_port_id >= (signed int)sw->port_count) |
| 464 | goto invalid_value; |
| 465 | xstats_mode_count = sw->xstats_count_per_port[queue_port_id]; |
| 466 | break; |
| 467 | case RTE_EVENT_DEV_XSTATS_QUEUE: |
| 468 | if (queue_port_id >= (signed int)sw->qid_count) |
| 469 | goto invalid_value; |
| 470 | xstats_mode_count = sw->xstats_count_per_qid[queue_port_id]; |
| 471 | break; |
| 472 | default: |
| 473 | SW_LOG_ERR("Invalid mode received in sw_xstats_get()"); |
| 474 | goto invalid_value; |
| 475 | }; |
| 476 | |
| 477 | /* this function can check num stats and return them (xstats_get() style |
| 478 | * behaviour) or ignore n for reset() of a single stat style behaviour. |
| 479 | */ |
| 480 | if (ret_if_n_lt_nstats && xstats_mode_count > n) |
| 481 | return xstats_mode_count; |
| 482 | |
| 483 | for (i = 0; i < n && xidx < xstats_mode_count; i++) { |
| 484 | struct sw_xstats_entry *xs = &sw->xstats[ids[i]]; |
| 485 | if (ids[i] > sw->xstats_count || xs->mode != mode) |
| 486 | continue; |
| 487 | |
| 488 | if (mode != RTE_EVENT_DEV_XSTATS_DEVICE && |
| 489 | queue_port_id != xs->obj_idx) |
| 490 | continue; |
| 491 | |
| 492 | uint64_t val = xs->fn(sw, xs->obj_idx, xs->stat, xs->extra_arg) |
| 493 | - xs->reset_value; |
| 494 | |
| 495 | if (values) |
| 496 | values[xidx] = val; |
| 497 | |
| 498 | if (xs->reset_allowed && reset) |
| 499 | xs->reset_value += val; |
| 500 | |
| 501 | xidx++; |
| 502 | } |
no outgoing calls
no test coverage detected