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

Function dlb2_hw_dequeue

dpdk/drivers/event/dlb2/dlb2.c:4105–4182  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

4103}
4104
4105static inline int16_t
4106dlb2_hw_dequeue(struct dlb2_eventdev *dlb2,
4107 struct dlb2_eventdev_port *ev_port,
4108 struct rte_event *events,
4109 uint16_t max_num,
4110 uint64_t dequeue_timeout_ticks)
4111{
4112 uint64_t timeout;
4113 uint64_t start_ticks = 0ULL;
4114 struct dlb2_port *qm_port;
4115 int num = 0;
4116
4117 qm_port = &ev_port->qm_port;
4118
4119 /* We have a special implementation for waiting. Wait can be:
4120 * 1) no waiting at all
4121 * 2) busy poll only
4122 * 3) wait for interrupt. If wakeup and poll time
4123 * has expired, then return to caller
4124 * 4) umonitor/umwait repeatedly up to poll time
4125 */
4126
4127 /* If configured for per dequeue wait, then use wait value provided
4128 * to this API. Otherwise we must use the global
4129 * value from eventdev config time.
4130 */
4131 if (!dlb2->global_dequeue_wait)
4132 timeout = dequeue_timeout_ticks;
4133 else
4134 timeout = dlb2->global_dequeue_wait_ticks;
4135
4136 start_ticks = rte_get_timer_cycles();
4137
4138 while (num < max_num) {
4139 struct dlb2_dequeue_qe qes[DLB2_NUM_QES_PER_CACHE_LINE];
4140 uint8_t offset;
4141 int num_avail;
4142
4143 /* Copy up to 4 QEs from the current cache line into qes */
4144 num_avail = dlb2_recv_qe(qm_port, qes, &offset);
4145
4146 /* But don't process more than the user requested */
4147 num_avail = RTE_MIN(num_avail, max_num - num);
4148
4149 dlb2_inc_cq_idx(qm_port, num_avail);
4150
4151 if (num_avail == DLB2_NUM_QES_PER_CACHE_LINE)
4152 num += dlb2_process_dequeue_four_qes(ev_port,
4153 qm_port,
4154 &events[num],
4155 &qes[offset]);
4156 else if (num_avail)
4157 num += dlb2_process_dequeue_qes(ev_port,
4158 qm_port,
4159 &events[num],
4160 &qes[offset],
4161 num_avail);
4162 else if ((timeout == 0) || (num > 0))

Callers 1

dlb2_event_dequeue_burstFunction · 0.85

Calls 7

dlb2_recv_qeFunction · 0.85
dlb2_inc_cq_idxFunction · 0.85
dlb2_process_dequeue_qesFunction · 0.85
dlb2_dequeue_waitFunction · 0.85
dlb2_port_credits_incFunction · 0.85

Tested by

no test coverage detected