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

Function sw_event_dequeue_burst

dpdk/drivers/event/sw/sw_evdev_worker.c:140–180  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

138}
139
140uint16_t
141sw_event_dequeue_burst(void *port, struct rte_event *ev, uint16_t num,
142 uint64_t wait)
143{
144 RTE_SET_USED(wait);
145 struct sw_port *p = (void *)port;
146 struct rte_event_ring *ring = p->cq_worker_ring;
147
148 /* check that all previous dequeues have been released */
149 if (p->implicit_release) {
150 struct sw_evdev *sw = (void *)p->sw;
151 uint32_t credit_update_quanta = sw->credit_update_quanta;
152 uint16_t out_rels = p->outstanding_releases;
153 uint16_t i;
154 for (i = 0; i < out_rels; i++)
155 sw_event_release(p, i);
156
157 /* Replenish credits if enough releases are performed */
158 if (p->inflight_credits >= credit_update_quanta * 2) {
159 rte_atomic32_sub(&sw->inflights, credit_update_quanta);
160 p->inflight_credits -= credit_update_quanta;
161 }
162 }
163
164 /* returns number of events actually dequeued */
165 uint16_t ndeq = rte_event_ring_dequeue_burst(ring, ev, num, NULL);
166 if (unlikely(ndeq == 0)) {
167 p->zero_polls++;
168 p->total_polls++;
169 goto end;
170 }
171
172 p->outstanding_releases += ndeq;
173 p->last_dequeue_burst_sz = ndeq;
174 p->last_dequeue_ticks = rte_get_timer_cycles();
175 p->poll_buckets[(ndeq - 1) >> SW_DEQ_STAT_BUCKET_SHIFT]++;
176 p->total_polls++;
177
178end:
179 return ndeq;
180}
181
182uint16_t
183sw_event_dequeue(void *port, struct rte_event *ev, uint64_t wait)

Callers 1

sw_event_dequeueFunction · 0.85

Calls 3

sw_event_releaseFunction · 0.85
rte_atomic32_subFunction · 0.85

Tested by

no test coverage detected