Re: [PATCH 19/39] event/octeontx: add support worker dequeue function
From: Jerin Jacob <hidden>
Date: 2017-03-21 03:21:22
On Mon, Mar 20, 2017 at 09:11:35PM +0000, Eads, Gage wrote:
Hi Jerin,
Hi Gage,
quoted
-----Original Message----- From: Jerin Jacob [mailto:jerin.jacob@caviumnetworks.com] Sent: Friday, March 3, 2017 11:28 AM To: dev@dpdk.org Cc: thomas.monjalon@6wind.com; Richardson, Bruce [off-list ref]; Van Haaren, Harry [off-list ref]; hemant.agrawal@nxp.com; Eads, Gage [off-list ref]; nipun.gupta@nxp.com; santosh.shukla@caviumnetworks.com; Jerin Jacob [off-list ref] Subject: [dpdk-dev] [PATCH 19/39] event/octeontx: add support worker dequeue function 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 [off-list ref] Signed-off-by: Santosh Shukla [off-list ref] --- drivers/event/octeontx/ssovf_evdev.h | 7 +++++ drivers/event/octeontx/ssovf_worker.c | 52 +++++++++++++++++++++++++++++++++++ 2 files changed, 59 insertions(+) diff --git a/drivers/event/octeontx/ssovf_evdev.h b/drivers/event/octeontx/ssovf_evdev.h index fac42f5..2cd9147 100644 --- a/drivers/event/octeontx/ssovf_evdev.h +++ b/drivers/event/octeontx/ssovf_evdev.h @@ -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_burst(void *port, 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__ */ diff --git a/drivers/event/octeontx/ssovf_worker.c b/drivers/event/octeontx/ssovf_worker.c index 7ec78b4..e0d17b9 100644 --- a/drivers/event/octeontx/ssovf_worker.c +++ b/drivers/event/octeontx/ssovf_worker.c @@ -226,6 +226,58 @@ ssows_release_event(struct ssows *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); + } +}Should ssows_deq() fill in the ev structure when swtag_req is 1? I see that the flag is set when an event is forwarded to the same queue/group it was received on -- is the expectation that ev will point to that forwarded event, such that the user receives it when they next dequeue an event?
Yes. The user receives the same event.HW supports event pinning to lower the latency.
Thanks, Gage