event/octeontx: support worker dequeue
If device is configured with RTE_EVENT_DEV_CFG_PER_DEQUEUE_TIMEOUT configuration then use different fast path dequeue handler to wait till requested amount of nanosecond if the event is not available. Signed-off-by: Jerin Jacob <jerin.jacob@caviumnetworks.com> Signed-off-by: Santosh Shukla <santosh.shukla@caviumnetworks.com>
This commit is contained in:
parent
f10d322eff
commit
d80f50e829
@ -190,5 +190,12 @@ ssovf_pmd_priv(const struct rte_eventdev *eventdev)
|
|||||||
uint16_t ssows_enq(void *port, const struct rte_event *ev);
|
uint16_t ssows_enq(void *port, const struct rte_event *ev);
|
||||||
uint16_t ssows_enq_burst(void *port,
|
uint16_t ssows_enq_burst(void *port,
|
||||||
const struct rte_event ev[], uint16_t nb_events);
|
const struct rte_event ev[], uint16_t nb_events);
|
||||||
|
uint16_t ssows_deq(void *port, struct rte_event *ev, uint64_t timeout_ticks);
|
||||||
|
uint16_t ssows_deq_burst(void *port, struct rte_event ev[],
|
||||||
|
uint16_t nb_events, uint64_t timeout_ticks);
|
||||||
|
uint16_t ssows_deq_timeout(void *port, struct rte_event *ev,
|
||||||
|
uint64_t timeout_ticks);
|
||||||
|
uint16_t ssows_deq_timeout_burst(void *port, struct rte_event ev[],
|
||||||
|
uint16_t nb_events, uint64_t timeout_ticks);
|
||||||
|
|
||||||
#endif /* __SSOVF_EVDEV_H__ */
|
#endif /* __SSOVF_EVDEV_H__ */
|
||||||
|
@ -119,6 +119,58 @@ ssows_release_event(struct ssows *ws)
|
|||||||
ssows_swtag_untag(ws);
|
ssows_swtag_untag(ws);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
force_inline uint16_t __hot
|
||||||
|
ssows_deq(void *port, struct rte_event *ev, uint64_t timeout_ticks)
|
||||||
|
{
|
||||||
|
struct ssows *ws = port;
|
||||||
|
|
||||||
|
RTE_SET_USED(timeout_ticks);
|
||||||
|
|
||||||
|
ssows_swtag_wait(ws);
|
||||||
|
if (ws->swtag_req) {
|
||||||
|
ws->swtag_req = 0;
|
||||||
|
return 1;
|
||||||
|
} else {
|
||||||
|
return ssows_get_work(ws, ev);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
force_inline uint16_t __hot
|
||||||
|
ssows_deq_timeout(void *port, struct rte_event *ev, uint64_t timeout_ticks)
|
||||||
|
{
|
||||||
|
struct ssows *ws = port;
|
||||||
|
uint64_t iter;
|
||||||
|
uint16_t ret = 1;
|
||||||
|
|
||||||
|
ssows_swtag_wait(ws);
|
||||||
|
if (ws->swtag_req) {
|
||||||
|
ws->swtag_req = 0;
|
||||||
|
} else {
|
||||||
|
ret = ssows_get_work(ws, ev);
|
||||||
|
for (iter = 1; iter < timeout_ticks && (ret == 0); iter++)
|
||||||
|
ret = ssows_get_work(ws, ev);
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint16_t __hot
|
||||||
|
ssows_deq_burst(void *port, struct rte_event ev[], uint16_t nb_events,
|
||||||
|
uint64_t timeout_ticks)
|
||||||
|
{
|
||||||
|
RTE_SET_USED(nb_events);
|
||||||
|
|
||||||
|
return ssows_deq(port, ev, timeout_ticks);
|
||||||
|
}
|
||||||
|
|
||||||
|
uint16_t __hot
|
||||||
|
ssows_deq_timeout_burst(void *port, struct rte_event ev[], uint16_t nb_events,
|
||||||
|
uint64_t timeout_ticks)
|
||||||
|
{
|
||||||
|
RTE_SET_USED(nb_events);
|
||||||
|
|
||||||
|
return ssows_deq_timeout(port, ev, timeout_ticks);
|
||||||
|
}
|
||||||
|
|
||||||
force_inline uint16_t __hot
|
force_inline uint16_t __hot
|
||||||
ssows_enq(void *port, const struct rte_event *ev)
|
ssows_enq(void *port, const struct rte_event *ev)
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user