event/octeontx: add enqueue new op variant
authorJerin Jacob <jerin.jacob@caviumnetworks.com>
Thu, 29 Jun 2017 14:19:55 +0000 (19:49 +0530)
committerJerin Jacob <jerin.jacob@caviumnetworks.com>
Fri, 7 Jul 2017 07:28:55 +0000 (09:28 +0200)
OCTEONTX can have optimized handling of events if the PMD
knows it is a producer pattern in advance and it can support
burst mode if all the events has op == RTE_EVENT_OP_NEW.

Signed-off-by: Jerin Jacob <jerin.jacob@caviumnetworks.com>
Acked-by: Gage Eads <gage.eads@intel.com>
Acked-by: Harry van Haaren <harry.van.haaren@intel.com>
drivers/event/octeontx/ssovf_evdev.c
drivers/event/octeontx/ssovf_evdev.h
drivers/event/octeontx/ssovf_worker.c

index 5f97bee..3cd0cd4 100644 (file)
@@ -158,7 +158,7 @@ ssovf_fastpath_fns_set(struct rte_eventdev *dev)
        dev->schedule      = NULL;
        dev->enqueue       = ssows_enq;
        dev->enqueue_burst = ssows_enq_burst;
-       dev->enqueue_new_burst = ssows_enq_burst;
+       dev->enqueue_new_burst = ssows_enq_new_burst;
        dev->enqueue_forward_burst = ssows_enq_burst;
        dev->dequeue       = ssows_deq;
        dev->dequeue_burst = ssows_deq_burst;
index 03902e4..47091a4 100644 (file)
@@ -190,6 +190,8 @@ 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_enq_new_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);
index 1ead476..5393feb 100644 (file)
@@ -201,6 +201,18 @@ ssows_enq_burst(void *port, const struct rte_event ev[], uint16_t nb_events)
        return ssows_enq(port, ev);
 }
 
+uint16_t __hot
+ssows_enq_new_burst(void *port, const struct rte_event ev[], uint16_t nb_events)
+{
+       uint16_t i;
+       struct ssows *ws = port;
+
+       rte_smp_wmb();
+       for (i = 0; i < nb_events; i++)
+               ssows_new_event(ws,  &ev[i]);
+
+       return nb_events;
+}
 void
 ssows_flush_events(struct ssows *ws, uint8_t queue_id)
 {