DPDK patches and discussions
 help / color / mirror / Atom feed
* [dpdk-dev] [PATCH 1/5] eventdev: introduce a helper function for enqueue burst
@ 2017-06-29 14:19 Jerin Jacob
  2017-06-29 14:19 ` [dpdk-dev] [PATCH 2/5] eventdev: introduce specialized enqueue new op variant Jerin Jacob
                   ` (3 more replies)
  0 siblings, 4 replies; 10+ messages in thread
From: Jerin Jacob @ 2017-06-29 14:19 UTC (permalink / raw)
  To: dev
  Cc: bruce.richardson, harry.van.haaren, hemant.agrawal, gage.eads,
	nipun.gupta, narender.vangati, nikhil.rao, Jerin Jacob

Introducing a helper function to avoid duplicating
common enqueue burst code when introducing
enqueue burst variants.

Signed-off-by: Jerin Jacob <jerin.jacob@caviumnetworks.com>
---
 lib/librte_eventdev/rte_eventdev.h | 54 ++++++++++++++++++++++----------------
 1 file changed, 31 insertions(+), 23 deletions(-)

diff --git a/lib/librte_eventdev/rte_eventdev.h b/lib/librte_eventdev/rte_eventdev.h
index a79a827ee..c4d623a62 100644
--- a/lib/librte_eventdev/rte_eventdev.h
+++ b/lib/librte_eventdev/rte_eventdev.h
@@ -1103,6 +1103,34 @@ rte_event_schedule(uint8_t dev_id)
 		(*dev->schedule)(dev);
 }
 
+static __rte_always_inline uint16_t
+__rte_event_enqueue_burst(uint8_t dev_id, uint8_t port_id,
+			const struct rte_event ev[], uint16_t nb_events,
+			const event_enqueue_burst_t fn)
+{
+	const struct rte_eventdev *dev = &rte_eventdevs[dev_id];
+
+#ifdef RTE_LIBRTE_EVENTDEV_DEBUG
+	if (dev_id >= RTE_EVENT_MAX_DEVS || !rte_eventdevs[dev_id].attached) {
+		rte_errno = -EINVAL;
+		return 0;
+	}
+
+	if (port_id >= dev->data->nb_ports) {
+		rte_errno = -EINVAL;
+		return 0;
+	}
+#endif
+	/*
+	 * Allow zero cost non burst mode routine invocation if application
+	 * requests nb_events as const one
+	 */
+	if (nb_events == 1)
+		return (*dev->enqueue)(dev->data->ports[port_id], ev);
+	else
+		return fn(dev->data->ports[port_id], ev, nb_events);
+}
+
 /**
  * Enqueue a burst of events objects or an event object supplied in *rte_event*
  * structure on an  event device designated by its *dev_id* through the event
@@ -1146,30 +1174,10 @@ static inline uint16_t
 rte_event_enqueue_burst(uint8_t dev_id, uint8_t port_id,
 			const struct rte_event ev[], uint16_t nb_events)
 {
-	struct rte_eventdev *dev = &rte_eventdevs[dev_id];
+	const struct rte_eventdev *dev = &rte_eventdevs[dev_id];
 
-#ifdef RTE_LIBRTE_EVENTDEV_DEBUG
-	if (dev_id >= RTE_EVENT_MAX_DEVS || !rte_eventdevs[dev_id].attached) {
-		rte_errno = -EINVAL;
-		return 0;
-	}
-
-	if (port_id >= dev->data->nb_ports) {
-		rte_errno = -EINVAL;
-		return 0;
-	}
-#endif
-
-	/*
-	 * Allow zero cost non burst mode routine invocation if application
-	 * requests nb_events as const one
-	 */
-	if (nb_events == 1)
-		return (*dev->enqueue)(
-			dev->data->ports[port_id], ev);
-	else
-		return (*dev->enqueue_burst)(
-			dev->data->ports[port_id], ev, nb_events);
+	return __rte_event_enqueue_burst(dev_id, port_id, ev, nb_events,
+			dev->enqueue_burst);
 }
 
 /**
-- 
2.13.2

^ permalink raw reply	[flat|nested] 10+ messages in thread

* [dpdk-dev] [PATCH 2/5] eventdev: introduce specialized enqueue new op variant
  2017-06-29 14:19 [dpdk-dev] [PATCH 1/5] eventdev: introduce a helper function for enqueue burst Jerin Jacob
@ 2017-06-29 14:19 ` Jerin Jacob
  2017-06-30  8:40   ` Van Haaren, Harry
  2017-06-29 14:19 ` [dpdk-dev] [PATCH 3/5] eventdev: introduce specialized enqueue forward " Jerin Jacob
                   ` (2 subsequent siblings)
  3 siblings, 1 reply; 10+ messages in thread
From: Jerin Jacob @ 2017-06-29 14:19 UTC (permalink / raw)
  To: dev
  Cc: bruce.richardson, harry.van.haaren, hemant.agrawal, gage.eads,
	nipun.gupta, narender.vangati, nikhil.rao, Jerin Jacob

Introducing the rte_event_enqueue_new_burst() for enabling the
PMD, an optimization opportunity to optimize if all the events in
the enqueue burst has the op type of RTE_EVENT_OP_NEW.

If a PMD does not have any optimization opportunity
for this operation then the PMD can choose the generic enqueue
burst PMD callback as the fallback.

Signed-off-by: Jerin Jacob <jerin.jacob@caviumnetworks.com>
---
This patch is based on the following dicussion on ml
http://dpdk.org/ml/archives/dev/2017-June/068859.html
---
 drivers/event/octeontx/ssovf_evdev.c |  1 +
 drivers/event/sw/sw_evdev.c          |  1 +
 lib/librte_eventdev/rte_eventdev.h   | 51 ++++++++++++++++++++++++++++++++++++
 3 files changed, 53 insertions(+)

diff --git a/drivers/event/octeontx/ssovf_evdev.c b/drivers/event/octeontx/ssovf_evdev.c
index 8dc7b2ef8..0d0c6a186 100644
--- a/drivers/event/octeontx/ssovf_evdev.c
+++ b/drivers/event/octeontx/ssovf_evdev.c
@@ -158,6 +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->dequeue       = ssows_deq;
 	dev->dequeue_burst = ssows_deq_burst;
 
diff --git a/drivers/event/sw/sw_evdev.c b/drivers/event/sw/sw_evdev.c
index fe2a61e2f..951ad1b33 100644
--- a/drivers/event/sw/sw_evdev.c
+++ b/drivers/event/sw/sw_evdev.c
@@ -796,6 +796,7 @@ sw_probe(struct rte_vdev_device *vdev)
 	dev->dev_ops = &evdev_sw_ops;
 	dev->enqueue = sw_event_enqueue;
 	dev->enqueue_burst = sw_event_enqueue_burst;
+	dev->enqueue_new_burst = sw_event_enqueue_burst;
 	dev->dequeue = sw_event_dequeue;
 	dev->dequeue_burst = sw_event_dequeue_burst;
 	dev->schedule = sw_event_schedule;
diff --git a/lib/librte_eventdev/rte_eventdev.h b/lib/librte_eventdev/rte_eventdev.h
index c4d623a62..132f75fda 100644
--- a/lib/librte_eventdev/rte_eventdev.h
+++ b/lib/librte_eventdev/rte_eventdev.h
@@ -1065,6 +1065,8 @@ struct rte_eventdev {
 	/**< Pointer to PMD enqueue function. */
 	event_enqueue_burst_t enqueue_burst;
 	/**< Pointer to PMD enqueue burst function. */
+	event_enqueue_burst_t enqueue_new_burst;
+	/**< Pointer to PMD enqueue burst function(op new variant) */
 	event_dequeue_t dequeue;
 	/**< Pointer to PMD dequeue function. */
 	event_dequeue_burst_t dequeue_burst;
@@ -1181,6 +1183,55 @@ rte_event_enqueue_burst(uint8_t dev_id, uint8_t port_id,
 }
 
 /**
+ * Enqueue a burst of events objects of operation type *RTE_EVENT_OP_NEW* on
+ * an event device designated by its *dev_id* through the event port specified
+ * by *port_id*.
+ *
+ * Provides the same functionality as rte_event_enqueue_burst(), expect that
+ * application can use this API when the all objects in the burst contains
+ * the enqueue operation of the type *RTE_EVENT_OP_NEW*. This specialized
+ * function can provide the additional hint to the PMD and optimize if possible.
+ *
+ * The rte_event_enqueue_new_burst() result is undefined if the enqueue burst
+ * has event object of operation type != RTE_EVENT_OP_NEW.
+ *
+ * @param dev_id
+ *   The identifier of the device.
+ * @param port_id
+ *   The identifier of the event port.
+ * @param ev
+ *   Points to an array of *nb_events* objects of type *rte_event* structure
+ *   which contain the event object enqueue operations to be processed.
+ * @param nb_events
+ *   The number of event objects to enqueue, typically number of
+ *   rte_event_port_enqueue_depth() available for this port.
+ *
+ * @return
+ *   The number of event objects actually enqueued on the event device. The
+ *   return value can be less than the value of the *nb_events* parameter when
+ *   the event devices queue is full or if invalid parameters are specified in a
+ *   *rte_event*. If the return value is less than *nb_events*, the remaining
+ *   events at the end of ev[] are not consumed and the caller has to take care
+ *   of them, and rte_errno is set accordingly. Possible errno values include:
+ *   - -EINVAL  The port ID is invalid, device ID is invalid, an event's queue
+ *              ID is invalid, or an event's sched type doesn't match the
+ *              capabilities of the destination queue.
+ *   - -ENOSPC  The event port was backpressured and unable to enqueue
+ *              one or more events. This error code is only applicable to
+ *              closed systems.
+ * @see rte_event_port_enqueue_depth() rte_event_enqueue_burst()
+ */
+static inline uint16_t
+rte_event_enqueue_new_burst(uint8_t dev_id, uint8_t port_id,
+			const struct rte_event ev[], uint16_t nb_events)
+{
+	const struct rte_eventdev *dev = &rte_eventdevs[dev_id];
+
+	return __rte_event_enqueue_burst(dev_id, port_id, ev, nb_events,
+			dev->enqueue_new_burst);
+}
+
+/**
  * Converts nanoseconds to *timeout_ticks* value for rte_event_dequeue_burst()
  *
  * If the device is configured with RTE_EVENT_DEV_CFG_PER_DEQUEUE_TIMEOUT flag
-- 
2.13.2

^ permalink raw reply	[flat|nested] 10+ messages in thread

* [dpdk-dev] [PATCH 3/5] eventdev: introduce specialized enqueue forward op variant
  2017-06-29 14:19 [dpdk-dev] [PATCH 1/5] eventdev: introduce a helper function for enqueue burst Jerin Jacob
  2017-06-29 14:19 ` [dpdk-dev] [PATCH 2/5] eventdev: introduce specialized enqueue new op variant Jerin Jacob
@ 2017-06-29 14:19 ` Jerin Jacob
  2017-06-29 14:19 ` [dpdk-dev] [PATCH 4/5] event/octeontx: add enqueue new " Jerin Jacob
  2017-06-29 14:19 ` [dpdk-dev] [PATCH 5/5] event/octeontx: add enqueue fwd " Jerin Jacob
  3 siblings, 0 replies; 10+ messages in thread
From: Jerin Jacob @ 2017-06-29 14:19 UTC (permalink / raw)
  To: dev
  Cc: bruce.richardson, harry.van.haaren, hemant.agrawal, gage.eads,
	nipun.gupta, narender.vangati, nikhil.rao, Jerin Jacob

Introducing the rte_event_enqueue_new_burst() for enabling the
PMD, an optimization opportunity to optimize if all the events in
the enqueue burst has the op type of RTE_EVENT_OP_FORWARD.

If a PMD does not have any optimization opportunity
for this operation then the PMD can choose the generic enqueue
burst PMD callback as the fallback.

Signed-off-by: Jerin Jacob <jerin.jacob@caviumnetworks.com>
---
This patch is based on the following dicussion on ml
http://dpdk.org/ml/archives/dev/2017-June/068859.html
---
 drivers/event/octeontx/ssovf_evdev.c |  1 +
 drivers/event/sw/sw_evdev.c          |  1 +
 lib/librte_eventdev/rte_eventdev.h   | 51 ++++++++++++++++++++++++++++++++++++
 3 files changed, 53 insertions(+)

diff --git a/drivers/event/octeontx/ssovf_evdev.c b/drivers/event/octeontx/ssovf_evdev.c
index 0d0c6a186..5f97beeac 100644
--- a/drivers/event/octeontx/ssovf_evdev.c
+++ b/drivers/event/octeontx/ssovf_evdev.c
@@ -159,6 +159,7 @@ ssovf_fastpath_fns_set(struct rte_eventdev *dev)
 	dev->enqueue       = ssows_enq;
 	dev->enqueue_burst = ssows_enq_burst;
 	dev->enqueue_new_burst = ssows_enq_burst;
+	dev->enqueue_forward_burst = ssows_enq_burst;
 	dev->dequeue       = ssows_deq;
 	dev->dequeue_burst = ssows_deq_burst;
 
diff --git a/drivers/event/sw/sw_evdev.c b/drivers/event/sw/sw_evdev.c
index 951ad1b33..2b0b4fafa 100644
--- a/drivers/event/sw/sw_evdev.c
+++ b/drivers/event/sw/sw_evdev.c
@@ -797,6 +797,7 @@ sw_probe(struct rte_vdev_device *vdev)
 	dev->enqueue = sw_event_enqueue;
 	dev->enqueue_burst = sw_event_enqueue_burst;
 	dev->enqueue_new_burst = sw_event_enqueue_burst;
+	dev->enqueue_forward_burst = sw_event_enqueue_burst;
 	dev->dequeue = sw_event_dequeue;
 	dev->dequeue_burst = sw_event_dequeue_burst;
 	dev->schedule = sw_event_schedule;
diff --git a/lib/librte_eventdev/rte_eventdev.h b/lib/librte_eventdev/rte_eventdev.h
index 132f75fda..29d707f9d 100644
--- a/lib/librte_eventdev/rte_eventdev.h
+++ b/lib/librte_eventdev/rte_eventdev.h
@@ -1067,6 +1067,8 @@ struct rte_eventdev {
 	/**< Pointer to PMD enqueue burst function. */
 	event_enqueue_burst_t enqueue_new_burst;
 	/**< Pointer to PMD enqueue burst function(op new variant) */
+	event_enqueue_burst_t enqueue_forward_burst;
+	/**< Pointer to PMD enqueue burst function(op forward variant) */
 	event_dequeue_t dequeue;
 	/**< Pointer to PMD dequeue function. */
 	event_dequeue_burst_t dequeue_burst;
@@ -1232,6 +1234,55 @@ rte_event_enqueue_new_burst(uint8_t dev_id, uint8_t port_id,
 }
 
 /**
+ * Enqueue a burst of events objects of operation type *RTE_EVENT_OP_FORWARD*
+ * on an event device designated by its *dev_id* through the event port
+ * specified by *port_id*.
+ *
+ * Provides the same functionality as rte_event_enqueue_burst(), expect that
+ * application can use this API when the all objects in the burst contains
+ * the enqueue operation of the type *RTE_EVENT_OP_FORWARD*. This specialized
+ * function can provide the additional hint to the PMD and optimize if possible.
+ *
+ * The rte_event_enqueue_new_burst() result is undefined if the enqueue burst
+ * has event object of operation type != RTE_EVENT_OP_FORWARD.
+ *
+ * @param dev_id
+ *   The identifier of the device.
+ * @param port_id
+ *   The identifier of the event port.
+ * @param ev
+ *   Points to an array of *nb_events* objects of type *rte_event* structure
+ *   which contain the event object enqueue operations to be processed.
+ * @param nb_events
+ *   The number of event objects to enqueue, typically number of
+ *   rte_event_port_enqueue_depth() available for this port.
+ *
+ * @return
+ *   The number of event objects actually enqueued on the event device. The
+ *   return value can be less than the value of the *nb_events* parameter when
+ *   the event devices queue is full or if invalid parameters are specified in a
+ *   *rte_event*. If the return value is less than *nb_events*, the remaining
+ *   events at the end of ev[] are not consumed and the caller has to take care
+ *   of them, and rte_errno is set accordingly. Possible errno values include:
+ *   - -EINVAL  The port ID is invalid, device ID is invalid, an event's queue
+ *              ID is invalid, or an event's sched type doesn't match the
+ *              capabilities of the destination queue.
+ *   - -ENOSPC  The event port was backpressured and unable to enqueue
+ *              one or more events. This error code is only applicable to
+ *              closed systems.
+ * @see rte_event_port_enqueue_depth() rte_event_enqueue_burst()
+ */
+static inline uint16_t
+rte_event_enqueue_forward_burst(uint8_t dev_id, uint8_t port_id,
+			const struct rte_event ev[], uint16_t nb_events)
+{
+	const struct rte_eventdev *dev = &rte_eventdevs[dev_id];
+
+	return __rte_event_enqueue_burst(dev_id, port_id, ev, nb_events,
+			dev->enqueue_forward_burst);
+}
+
+/**
  * Converts nanoseconds to *timeout_ticks* value for rte_event_dequeue_burst()
  *
  * If the device is configured with RTE_EVENT_DEV_CFG_PER_DEQUEUE_TIMEOUT flag
-- 
2.13.2

^ permalink raw reply	[flat|nested] 10+ messages in thread

* [dpdk-dev] [PATCH 4/5] event/octeontx: add enqueue new op variant
  2017-06-29 14:19 [dpdk-dev] [PATCH 1/5] eventdev: introduce a helper function for enqueue burst Jerin Jacob
  2017-06-29 14:19 ` [dpdk-dev] [PATCH 2/5] eventdev: introduce specialized enqueue new op variant Jerin Jacob
  2017-06-29 14:19 ` [dpdk-dev] [PATCH 3/5] eventdev: introduce specialized enqueue forward " Jerin Jacob
@ 2017-06-29 14:19 ` Jerin Jacob
  2017-06-29 14:19 ` [dpdk-dev] [PATCH 5/5] event/octeontx: add enqueue fwd " Jerin Jacob
  3 siblings, 0 replies; 10+ messages in thread
From: Jerin Jacob @ 2017-06-29 14:19 UTC (permalink / raw)
  To: dev
  Cc: bruce.richardson, harry.van.haaren, hemant.agrawal, gage.eads,
	nipun.gupta, narender.vangati, nikhil.rao, Jerin Jacob

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>
---
 drivers/event/octeontx/ssovf_evdev.c  |  2 +-
 drivers/event/octeontx/ssovf_evdev.h  |  2 ++
 drivers/event/octeontx/ssovf_worker.c | 12 ++++++++++++
 3 files changed, 15 insertions(+), 1 deletion(-)

diff --git a/drivers/event/octeontx/ssovf_evdev.c b/drivers/event/octeontx/ssovf_evdev.c
index 5f97beeac..3cd0cd49d 100644
--- a/drivers/event/octeontx/ssovf_evdev.c
+++ b/drivers/event/octeontx/ssovf_evdev.c
@@ -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;
diff --git a/drivers/event/octeontx/ssovf_evdev.h b/drivers/event/octeontx/ssovf_evdev.h
index 03902e41a..47091a46e 100644
--- a/drivers/event/octeontx/ssovf_evdev.h
+++ b/drivers/event/octeontx/ssovf_evdev.h
@@ -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);
diff --git a/drivers/event/octeontx/ssovf_worker.c b/drivers/event/octeontx/ssovf_worker.c
index 1ead476c9..5393febba 100644
--- a/drivers/event/octeontx/ssovf_worker.c
+++ b/drivers/event/octeontx/ssovf_worker.c
@@ -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)
 {
-- 
2.13.2

^ permalink raw reply	[flat|nested] 10+ messages in thread

* [dpdk-dev] [PATCH 5/5] event/octeontx: add enqueue fwd op variant
  2017-06-29 14:19 [dpdk-dev] [PATCH 1/5] eventdev: introduce a helper function for enqueue burst Jerin Jacob
                   ` (2 preceding siblings ...)
  2017-06-29 14:19 ` [dpdk-dev] [PATCH 4/5] event/octeontx: add enqueue new " Jerin Jacob
@ 2017-06-29 14:19 ` Jerin Jacob
  2017-06-30  2:20   ` Eads, Gage
  3 siblings, 1 reply; 10+ messages in thread
From: Jerin Jacob @ 2017-06-29 14:19 UTC (permalink / raw)
  To: dev
  Cc: bruce.richardson, harry.van.haaren, hemant.agrawal, gage.eads,
	nipun.gupta, narender.vangati, nikhil.rao, Jerin Jacob

Signed-off-by: Jerin Jacob <jerin.jacob@caviumnetworks.com>
---
 drivers/event/octeontx/ssovf_evdev.c  |  2 +-
 drivers/event/octeontx/ssovf_evdev.h  |  2 ++
 drivers/event/octeontx/ssovf_worker.c | 12 ++++++++++++
 3 files changed, 15 insertions(+), 1 deletion(-)

diff --git a/drivers/event/octeontx/ssovf_evdev.c b/drivers/event/octeontx/ssovf_evdev.c
index 3cd0cd49d..eb349f60d 100644
--- a/drivers/event/octeontx/ssovf_evdev.c
+++ b/drivers/event/octeontx/ssovf_evdev.c
@@ -159,7 +159,7 @@ ssovf_fastpath_fns_set(struct rte_eventdev *dev)
 	dev->enqueue       = ssows_enq;
 	dev->enqueue_burst = ssows_enq_burst;
 	dev->enqueue_new_burst = ssows_enq_new_burst;
-	dev->enqueue_forward_burst = ssows_enq_burst;
+	dev->enqueue_forward_burst = ssows_enq_fwd_burst;
 	dev->dequeue       = ssows_deq;
 	dev->dequeue_burst = ssows_deq_burst;
 
diff --git a/drivers/event/octeontx/ssovf_evdev.h b/drivers/event/octeontx/ssovf_evdev.h
index 47091a46e..3b8c23e3a 100644
--- a/drivers/event/octeontx/ssovf_evdev.h
+++ b/drivers/event/octeontx/ssovf_evdev.h
@@ -192,6 +192,8 @@ 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_enq_fwd_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);
diff --git a/drivers/event/octeontx/ssovf_worker.c b/drivers/event/octeontx/ssovf_worker.c
index 5393febba..4d413d779 100644
--- a/drivers/event/octeontx/ssovf_worker.c
+++ b/drivers/event/octeontx/ssovf_worker.c
@@ -213,6 +213,18 @@ ssows_enq_new_burst(void *port, const struct rte_event ev[], uint16_t nb_events)
 
 	return nb_events;
 }
+
+uint16_t __hot
+ssows_enq_fwd_burst(void *port, const struct rte_event ev[], uint16_t nb_events)
+{
+	struct ssows *ws = port;
+	RTE_SET_USED(nb_events);
+
+	ssows_forward_event(ws,  ev);
+
+	return 1;
+}
+
 void
 ssows_flush_events(struct ssows *ws, uint8_t queue_id)
 {
-- 
2.13.2

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [dpdk-dev] [PATCH 5/5] event/octeontx: add enqueue fwd op variant
  2017-06-29 14:19 ` [dpdk-dev] [PATCH 5/5] event/octeontx: add enqueue fwd " Jerin Jacob
@ 2017-06-30  2:20   ` Eads, Gage
  2017-07-01 12:56     ` Jerin Jacob
  0 siblings, 1 reply; 10+ messages in thread
From: Eads, Gage @ 2017-06-30  2:20 UTC (permalink / raw)
  To: Jerin Jacob, dev
  Cc: Richardson, Bruce, Van Haaren, Harry, hemant.agrawal,
	nipun.gupta, Vangati, Narender, Rao, Nikhil

Hi Jerin,

This patch set looks good. For the series:
Acked-by: Gage Eads <gage.eads@intel.com>

> -----Original Message-----
> From: Jerin Jacob [mailto:jerin.jacob@caviumnetworks.com]
> Sent: Thursday, June 29, 2017 9:20 AM
> To: dev@dpdk.org
> Cc: Richardson, Bruce <bruce.richardson@intel.com>; Van Haaren, Harry
> <harry.van.haaren@intel.com>; hemant.agrawal@nxp.com; Eads, Gage
> <gage.eads@intel.com>; nipun.gupta@nxp.com; Vangati, Narender
> <narender.vangati@intel.com>; Rao, Nikhil <nikhil.rao@intel.com>; Jerin Jacob
> <jerin.jacob@caviumnetworks.com>
> Subject: [dpdk-dev] [PATCH 5/5] event/octeontx: add enqueue fwd op variant
> 
> Signed-off-by: Jerin Jacob <jerin.jacob@caviumnetworks.com>
> ---
>  drivers/event/octeontx/ssovf_evdev.c  |  2 +-
> drivers/event/octeontx/ssovf_evdev.h  |  2 ++
> drivers/event/octeontx/ssovf_worker.c | 12 ++++++++++++
>  3 files changed, 15 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/event/octeontx/ssovf_evdev.c
> b/drivers/event/octeontx/ssovf_evdev.c
> index 3cd0cd49d..eb349f60d 100644
> --- a/drivers/event/octeontx/ssovf_evdev.c
> +++ b/drivers/event/octeontx/ssovf_evdev.c
> @@ -159,7 +159,7 @@ ssovf_fastpath_fns_set(struct rte_eventdev *dev)
>  	dev->enqueue       = ssows_enq;
>  	dev->enqueue_burst = ssows_enq_burst;
>  	dev->enqueue_new_burst = ssows_enq_new_burst;
> -	dev->enqueue_forward_burst = ssows_enq_burst;
> +	dev->enqueue_forward_burst = ssows_enq_fwd_burst;
>  	dev->dequeue       = ssows_deq;
>  	dev->dequeue_burst = ssows_deq_burst;
> 
> diff --git a/drivers/event/octeontx/ssovf_evdev.h
> b/drivers/event/octeontx/ssovf_evdev.h
> index 47091a46e..3b8c23e3a 100644
> --- a/drivers/event/octeontx/ssovf_evdev.h
> +++ b/drivers/event/octeontx/ssovf_evdev.h
> @@ -192,6 +192,8 @@ 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_enq_fwd_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); diff --git
> a/drivers/event/octeontx/ssovf_worker.c
> b/drivers/event/octeontx/ssovf_worker.c
> index 5393febba..4d413d779 100644
> --- a/drivers/event/octeontx/ssovf_worker.c
> +++ b/drivers/event/octeontx/ssovf_worker.c
> @@ -213,6 +213,18 @@ ssows_enq_new_burst(void *port, const struct
> rte_event ev[], uint16_t nb_events)
> 
>  	return nb_events;
>  }
> +
> +uint16_t __hot
> +ssows_enq_fwd_burst(void *port, const struct rte_event ev[], uint16_t
> +nb_events) {
> +	struct ssows *ws = port;
> +	RTE_SET_USED(nb_events);
> +
> +	ssows_forward_event(ws,  ev);
> +
> +	return 1;
> +}
> +
>  void
>  ssows_flush_events(struct ssows *ws, uint8_t queue_id)  {
> --
> 2.13.2

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [dpdk-dev] [PATCH 2/5] eventdev: introduce specialized enqueue new op variant
  2017-06-29 14:19 ` [dpdk-dev] [PATCH 2/5] eventdev: introduce specialized enqueue new op variant Jerin Jacob
@ 2017-06-30  8:40   ` Van Haaren, Harry
  2017-06-30  9:11     ` Jerin Jacob
  0 siblings, 1 reply; 10+ messages in thread
From: Van Haaren, Harry @ 2017-06-30  8:40 UTC (permalink / raw)
  To: Jerin Jacob, dev
  Cc: Richardson, Bruce, hemant.agrawal, Eads, Gage, nipun.gupta,
	Vangati, Narender, Rao, Nikhil

> From: Jerin Jacob [mailto:jerin.jacob@caviumnetworks.com]
> Sent: Thursday, June 29, 2017 3:20 PM
> To: dev@dpdk.org
<snip>
> diff --git a/drivers/event/octeontx/ssovf_evdev.c b/drivers/event/octeontx/ssovf_evdev.c
> index 8dc7b2ef8..0d0c6a186 100644
> --- a/drivers/event/octeontx/ssovf_evdev.c
> +++ b/drivers/event/octeontx/ssovf_evdev.c
> @@ -158,6 +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->dequeue       = ssows_deq;
>  	dev->dequeue_burst = ssows_deq_burst;
> 
> diff --git a/drivers/event/sw/sw_evdev.c b/drivers/event/sw/sw_evdev.c
> index fe2a61e2f..951ad1b33 100644
> --- a/drivers/event/sw/sw_evdev.c
> +++ b/drivers/event/sw/sw_evdev.c
> @@ -796,6 +796,7 @@ sw_probe(struct rte_vdev_device *vdev)
>  	dev->dev_ops = &evdev_sw_ops;
>  	dev->enqueue = sw_event_enqueue;
>  	dev->enqueue_burst = sw_event_enqueue_burst;
> +	dev->enqueue_new_burst = sw_event_enqueue_burst;
>  	dev->dequeue = sw_event_dequeue;
>  	dev->dequeue_burst = sw_event_dequeue_burst;
>  	dev->schedule = sw_event_schedule;


I think it is possible to do this pointer-setting of new_burst() in eventdev.c, instead of adding the new_burst() to each PMD individually?
During rte_eventdev_configure(), if the dev->enqueue_new_burst() function is NULL, just point it at the ordinary one;

if (!dev->enqueue_new_burst)
    dev->enqueue_new_burst = dev->enqueue_burst;


This saves per-PMD changes for adding new parallel function pointers - and avoids PMDs accidentally not being updated. With that change;

Acked-by: Harry van Haaren <harry.van.haaren@intel.com>

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [dpdk-dev] [PATCH 2/5] eventdev: introduce specialized enqueue new op variant
  2017-06-30  8:40   ` Van Haaren, Harry
@ 2017-06-30  9:11     ` Jerin Jacob
  2017-06-30  9:14       ` Van Haaren, Harry
  0 siblings, 1 reply; 10+ messages in thread
From: Jerin Jacob @ 2017-06-30  9:11 UTC (permalink / raw)
  To: Van Haaren, Harry
  Cc: dev, Richardson, Bruce, hemant.agrawal, Eads, Gage, nipun.gupta,
	Vangati, Narender, Rao, Nikhil

-----Original Message-----
> Date: Fri, 30 Jun 2017 08:40:06 +0000
> From: "Van Haaren, Harry" <harry.van.haaren@intel.com>
> To: Jerin Jacob <jerin.jacob@caviumnetworks.com>, "dev@dpdk.org"
>  <dev@dpdk.org>
> CC: "Richardson, Bruce" <bruce.richardson@intel.com>,
>  "hemant.agrawal@nxp.com" <hemant.agrawal@nxp.com>, "Eads, Gage"
>  <gage.eads@intel.com>, "nipun.gupta@nxp.com" <nipun.gupta@nxp.com>,
>  "Vangati, Narender" <narender.vangati@intel.com>, "Rao, Nikhil"
>  <nikhil.rao@intel.com>
> Subject: RE: [dpdk-dev] [PATCH 2/5] eventdev: introduce specialized enqueue
>  new op variant
> 
> > From: Jerin Jacob [mailto:jerin.jacob@caviumnetworks.com]
> > Sent: Thursday, June 29, 2017 3:20 PM
> > To: dev@dpdk.org
> <snip>
> > diff --git a/drivers/event/octeontx/ssovf_evdev.c b/drivers/event/octeontx/ssovf_evdev.c
> > index 8dc7b2ef8..0d0c6a186 100644
> > --- a/drivers/event/octeontx/ssovf_evdev.c
> > +++ b/drivers/event/octeontx/ssovf_evdev.c
> > @@ -158,6 +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->dequeue       = ssows_deq;
> >  	dev->dequeue_burst = ssows_deq_burst;
> > 
> > diff --git a/drivers/event/sw/sw_evdev.c b/drivers/event/sw/sw_evdev.c
> > index fe2a61e2f..951ad1b33 100644
> > --- a/drivers/event/sw/sw_evdev.c
> > +++ b/drivers/event/sw/sw_evdev.c
> > @@ -796,6 +796,7 @@ sw_probe(struct rte_vdev_device *vdev)
> >  	dev->dev_ops = &evdev_sw_ops;
> >  	dev->enqueue = sw_event_enqueue;
> >  	dev->enqueue_burst = sw_event_enqueue_burst;
> > +	dev->enqueue_new_burst = sw_event_enqueue_burst;
> >  	dev->dequeue = sw_event_dequeue;
> >  	dev->dequeue_burst = sw_event_dequeue_burst;
> >  	dev->schedule = sw_event_schedule;
> 
> 
> I think it is possible to do this pointer-setting of new_burst() in eventdev.c, instead of adding the new_burst() to each PMD individually?
> During rte_eventdev_configure(), if the dev->enqueue_new_burst() function is NULL, just point it at the ordinary one;

I thought so, But it will break in multi process use case as on probe() we are
updating the callbacks for secondary process. Doing it in probe() may be very
early as some PMD may update the callback anywhere on or before rte_eventdev_start().

Thoughts?

> 
> if (!dev->enqueue_new_burst)
>     dev->enqueue_new_burst = dev->enqueue_burst;
> 
> 
> This saves per-PMD changes for adding new parallel function pointers - and avoids PMDs accidentally not being updated. With that change;
> 
> Acked-by: Harry van Haaren <harry.van.haaren@intel.com>

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [dpdk-dev] [PATCH 2/5] eventdev: introduce specialized enqueue new op variant
  2017-06-30  9:11     ` Jerin Jacob
@ 2017-06-30  9:14       ` Van Haaren, Harry
  0 siblings, 0 replies; 10+ messages in thread
From: Van Haaren, Harry @ 2017-06-30  9:14 UTC (permalink / raw)
  To: Jerin Jacob
  Cc: dev, Richardson, Bruce, hemant.agrawal, Eads, Gage, nipun.gupta,
	Vangati, Narender, Rao, Nikhil

> From: Jerin Jacob [mailto:jerin.jacob@caviumnetworks.com]
> Sent: Friday, June 30, 2017 10:12 AM
> To: Van Haaren, Harry <harry.van.haaren@intel.com>
> Cc: dev@dpdk.org; Richardson, Bruce <bruce.richardson@intel.com>; hemant.agrawal@nxp.com;
> Eads, Gage <gage.eads@intel.com>; nipun.gupta@nxp.com; Vangati, Narender
> <narender.vangati@intel.com>; Rao, Nikhil <nikhil.rao@intel.com>
> Subject: Re: [dpdk-dev] [PATCH 2/5] eventdev: introduce specialized enqueue new op variant
> 
> -----Original Message-----
> > Date: Fri, 30 Jun 2017 08:40:06 +0000
> > From: "Van Haaren, Harry" <harry.van.haaren@intel.com>
> > To: Jerin Jacob <jerin.jacob@caviumnetworks.com>, "dev@dpdk.org"
> >  <dev@dpdk.org>
> > CC: "Richardson, Bruce" <bruce.richardson@intel.com>,
> >  "hemant.agrawal@nxp.com" <hemant.agrawal@nxp.com>, "Eads, Gage"
> >  <gage.eads@intel.com>, "nipun.gupta@nxp.com" <nipun.gupta@nxp.com>,
> >  "Vangati, Narender" <narender.vangati@intel.com>, "Rao, Nikhil"
> >  <nikhil.rao@intel.com>
> > Subject: RE: [dpdk-dev] [PATCH 2/5] eventdev: introduce specialized enqueue
> >  new op variant
> >
> > > From: Jerin Jacob [mailto:jerin.jacob@caviumnetworks.com]
> > > Sent: Thursday, June 29, 2017 3:20 PM
> > > To: dev@dpdk.org
> > <snip>
> > > diff --git a/drivers/event/octeontx/ssovf_evdev.c
> b/drivers/event/octeontx/ssovf_evdev.c
> > > index 8dc7b2ef8..0d0c6a186 100644
> > > --- a/drivers/event/octeontx/ssovf_evdev.c
> > > +++ b/drivers/event/octeontx/ssovf_evdev.c
> > > @@ -158,6 +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->dequeue       = ssows_deq;
> > >  	dev->dequeue_burst = ssows_deq_burst;
> > >
> > > diff --git a/drivers/event/sw/sw_evdev.c b/drivers/event/sw/sw_evdev.c
> > > index fe2a61e2f..951ad1b33 100644
> > > --- a/drivers/event/sw/sw_evdev.c
> > > +++ b/drivers/event/sw/sw_evdev.c
> > > @@ -796,6 +796,7 @@ sw_probe(struct rte_vdev_device *vdev)
> > >  	dev->dev_ops = &evdev_sw_ops;
> > >  	dev->enqueue = sw_event_enqueue;
> > >  	dev->enqueue_burst = sw_event_enqueue_burst;
> > > +	dev->enqueue_new_burst = sw_event_enqueue_burst;
> > >  	dev->dequeue = sw_event_dequeue;
> > >  	dev->dequeue_burst = sw_event_dequeue_burst;
> > >  	dev->schedule = sw_event_schedule;
> >
> >
> > I think it is possible to do this pointer-setting of new_burst() in eventdev.c, instead
> of adding the new_burst() to each PMD individually?
> > During rte_eventdev_configure(), if the dev->enqueue_new_burst() function is NULL, just
> point it at the ordinary one;
> 
> I thought so, But it will break in multi process use case as on probe() we are
> updating the callbacks for secondary process. Doing it in probe() may be very
> early as some PMD may update the callback anywhere on or before rte_eventdev_start().
> 
> Thoughts?

Ah I forgot about the multi-proc init during my review. The current solution is more appropriate then, so this version 

Acked-by: Harry van Haaren <harry.van.haaren@intel.com>

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [dpdk-dev] [PATCH 5/5] event/octeontx: add enqueue fwd op variant
  2017-06-30  2:20   ` Eads, Gage
@ 2017-07-01 12:56     ` Jerin Jacob
  0 siblings, 0 replies; 10+ messages in thread
From: Jerin Jacob @ 2017-07-01 12:56 UTC (permalink / raw)
  To: Eads, Gage
  Cc: dev, Richardson, Bruce, Van Haaren, Harry, hemant.agrawal,
	nipun.gupta, Vangati, Narender, Rao, Nikhil

-----Original Message-----
> Date: Fri, 30 Jun 2017 02:20:34 +0000
> From: "Eads, Gage" <gage.eads@intel.com>
> To: Jerin Jacob <jerin.jacob@caviumnetworks.com>, "dev@dpdk.org"
>  <dev@dpdk.org>
> CC: "Richardson, Bruce" <bruce.richardson@intel.com>, "Van Haaren, Harry"
>  <harry.van.haaren@intel.com>, "hemant.agrawal@nxp.com"
>  <hemant.agrawal@nxp.com>, "nipun.gupta@nxp.com" <nipun.gupta@nxp.com>,
>  "Vangati, Narender" <narender.vangati@intel.com>, "Rao, Nikhil"
>  <nikhil.rao@intel.com>
> Subject: RE: [dpdk-dev] [PATCH 5/5] event/octeontx: add enqueue fwd op
>  variant
> 
> Hi Jerin,
> 
> This patch set looks good. For the series:
> Acked-by: Gage Eads <gage.eads@intel.com>


Applied the series to dpdk-next-eventdev/master.

Added the following lines in "just merged(NXP PMD)" to adapt to this change.

+eventdev->enqueue_new_burst = dpaa2_eventdev_enqueue_burst;
+eventdev->enqueue_forward_burst = dpaa2_eventdev_enqueue_burst;

Thanks

^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2017-07-01 12:56 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-06-29 14:19 [dpdk-dev] [PATCH 1/5] eventdev: introduce a helper function for enqueue burst Jerin Jacob
2017-06-29 14:19 ` [dpdk-dev] [PATCH 2/5] eventdev: introduce specialized enqueue new op variant Jerin Jacob
2017-06-30  8:40   ` Van Haaren, Harry
2017-06-30  9:11     ` Jerin Jacob
2017-06-30  9:14       ` Van Haaren, Harry
2017-06-29 14:19 ` [dpdk-dev] [PATCH 3/5] eventdev: introduce specialized enqueue forward " Jerin Jacob
2017-06-29 14:19 ` [dpdk-dev] [PATCH 4/5] event/octeontx: add enqueue new " Jerin Jacob
2017-06-29 14:19 ` [dpdk-dev] [PATCH 5/5] event/octeontx: add enqueue fwd " Jerin Jacob
2017-06-30  2:20   ` Eads, Gage
2017-07-01 12:56     ` Jerin Jacob

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).