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:
Jerin Jacob 2017-03-03 22:58:01 +05:30
parent f10d322eff
commit d80f50e829
2 changed files with 59 additions and 0 deletions

View File

@ -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__ */

View File

@ -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)
{ {