| 5523 | } |
| 5524 | |
| 5525 | static int |
| 5526 | latency_test_mldts(struct rte_mempool *mempool, |
| 5527 | struct test_buffers *bufs, struct rte_bbdev_mldts_op *ref_op, |
| 5528 | uint16_t dev_id, uint16_t queue_id, |
| 5529 | const uint16_t num_to_process, uint16_t burst_sz, |
| 5530 | uint64_t *total_time, uint64_t *min_time, uint64_t *max_time) |
| 5531 | { |
| 5532 | int ret = TEST_SUCCESS; |
| 5533 | uint16_t i, j, dequeued; |
| 5534 | struct rte_bbdev_mldts_op *ops_enq[MAX_BURST], *ops_deq[MAX_BURST]; |
| 5535 | uint64_t start_time = 0, last_time = 0; |
| 5536 | |
| 5537 | for (i = 0, dequeued = 0; dequeued < num_to_process; ++i) { |
| 5538 | uint16_t enq = 0, deq = 0; |
| 5539 | uint32_t time_out = 0; |
| 5540 | bool first_time = true; |
| 5541 | last_time = 0; |
| 5542 | |
| 5543 | if (unlikely(num_to_process - dequeued < burst_sz)) |
| 5544 | burst_sz = num_to_process - dequeued; |
| 5545 | |
| 5546 | ret = rte_bbdev_mldts_op_alloc_bulk(mempool, ops_enq, burst_sz); |
| 5547 | TEST_ASSERT_SUCCESS(ret, "rte_bbdev_mldts_op_alloc_bulk() failed"); |
| 5548 | if (test_vector.op_type != RTE_BBDEV_OP_NONE) |
| 5549 | copy_reference_mldts_op(ops_enq, burst_sz, dequeued, |
| 5550 | bufs->inputs, bufs->harq_inputs, |
| 5551 | bufs->hard_outputs, |
| 5552 | ref_op); |
| 5553 | |
| 5554 | /* Set counter to validate the ordering */ |
| 5555 | for (j = 0; j < burst_sz; ++j) |
| 5556 | ops_enq[j]->opaque_data = (void *)(uintptr_t)j; |
| 5557 | |
| 5558 | start_time = rte_rdtsc_precise(); |
| 5559 | |
| 5560 | enq = rte_bbdev_enqueue_mldts_ops(dev_id, queue_id, &ops_enq[enq], burst_sz); |
| 5561 | TEST_ASSERT(enq == burst_sz, |
| 5562 | "Error enqueueing burst, expected %u, got %u", |
| 5563 | burst_sz, enq); |
| 5564 | |
| 5565 | /* Dequeue */ |
| 5566 | do { |
| 5567 | deq += rte_bbdev_dequeue_mldts_ops(dev_id, queue_id, |
| 5568 | &ops_deq[deq], burst_sz - deq); |
| 5569 | if (likely(first_time && (deq > 0))) { |
| 5570 | last_time += rte_rdtsc_precise() - start_time; |
| 5571 | first_time = false; |
| 5572 | } |
| 5573 | time_out++; |
| 5574 | if (time_out >= TIME_OUT_POLL) { |
| 5575 | timeout_exit(dev_id); |
| 5576 | TEST_ASSERT_SUCCESS(TEST_FAILED, "Dequeue timeout!"); |
| 5577 | } |
| 5578 | } while (unlikely(burst_sz != deq)); |
| 5579 | |
| 5580 | *max_time = RTE_MAX(*max_time, last_time); |
| 5581 | *min_time = RTE_MIN(*min_time, last_time); |
| 5582 | *total_time += last_time; |
no test coverage detected