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

Function mlx5_txpp_handle_rearm_queue

dpdk/drivers/net/mlx5/mlx5_txpp.c:647–701  ·  view source on GitHub ↗

Handles Rearm Queue completions in periodic service. */

Source from the content-addressed store, hash-verified

645
646/* Handles Rearm Queue completions in periodic service. */
647static __rte_always_inline void
648mlx5_txpp_handle_rearm_queue(struct mlx5_dev_ctx_shared *sh)
649{
650 struct mlx5_txpp_wq *wq = &sh->txpp.rearm_queue;
651 uint32_t cq_ci = wq->cq_ci;
652 bool error = false;
653 int ret;
654
655 do {
656 volatile struct mlx5_cqe *cqe;
657
658 cqe = &wq->cq_obj.cqes[cq_ci & (MLX5_TXPP_REARM_CQ_SIZE - 1)];
659 ret = check_cqe(cqe, MLX5_TXPP_REARM_CQ_SIZE, cq_ci);
660 switch (ret) {
661 case MLX5_CQE_STATUS_ERR:
662 error = true;
663 ++cq_ci;
664 break;
665 case MLX5_CQE_STATUS_SW_OWN:
666 wq->sq_ci += 2;
667 ++cq_ci;
668 break;
669 case MLX5_CQE_STATUS_HW_OWN:
670 break;
671 default:
672 MLX5_ASSERT(false);
673 break;
674 }
675 } while (ret != MLX5_CQE_STATUS_HW_OWN);
676 if (likely(cq_ci != wq->cq_ci)) {
677 /* Check whether we have missed interrupts. */
678 if (cq_ci - wq->cq_ci != 1) {
679 DRV_LOG(DEBUG, "Rearm Queue missed interrupt.");
680 __atomic_fetch_add(&sh->txpp.err_miss_int,
681 1, __ATOMIC_RELAXED);
682 /* Check sync lost on wqe index. */
683 if (cq_ci - wq->cq_ci >=
684 (((1UL << MLX5_WQ_INDEX_WIDTH) /
685 MLX5_TXPP_REARM) - 1))
686 error = 1;
687 }
688 /* Update doorbell record to notify hardware. */
689 rte_compiler_barrier();
690 *wq->cq_obj.db_rec = rte_cpu_to_be_32(cq_ci);
691 rte_wmb();
692 wq->cq_ci = cq_ci;
693 /* Fire new requests to Rearm Queue. */
694 if (error) {
695 DRV_LOG(DEBUG, "Rearm Queue error sync lost.");
696 __atomic_fetch_add(&sh->txpp.err_rearm_queue,
697 1, __ATOMIC_RELAXED);
698 sh->txpp.sync_lost = 1;
699 }
700 }
701}
702
703/* Handles Clock Queue completions in periodic service. */
704static __rte_always_inline void

Callers 1

Calls 1

check_cqeFunction · 0.85

Tested by

no test coverage detected