On Mon, Oct 7, 2024 at 1:43 PM Abdullah Sevincer <abdullah.sevin...@intel.com> wrote: > > Support for independent enqueue feature and updates Event Device > and PMD feature list. > > A new capability RTE_EVENT_DEV_CAP_INDEPENDENT_ENQ is introduced. It > allows out-of-order enqueuing of RTE_EVENT_OP_FORWARD or RELEASE type > events on an event port where this capability is enabled. > > To use this capability applications need to set flag > RTE_EVENT_PORT_CFG_INDEPENDENT_ENQ during port setup only if the > capability RTE_EVENT_DEV_CAP_INDEPENDENT_ENQ exists. > > Signed-off-by: Abdullah Sevincer <abdullah.sevin...@intel.com> > Acked-by: Mattias Rönnblom <mattias.ronnb...@ericsson.com>
Acked-by: Jerin Jacob <jer...@marvell.com> Series applied to dpdk-next-net-eventdev/for-main. Thanks > --- > doc/guides/eventdevs/features/default.ini | 1 + > doc/guides/prog_guide/eventdev/eventdev.rst | 23 +++++++++++++++ > doc/guides/rel_notes/release_24_11.rst | 8 ++++++ > lib/eventdev/rte_eventdev.h | 31 +++++++++++++++++++++ > 4 files changed, 63 insertions(+) > > diff --git a/doc/guides/eventdevs/features/default.ini > b/doc/guides/eventdevs/features/default.ini > index 1cc4303fe5..7c4ee99238 100644 > --- a/doc/guides/eventdevs/features/default.ini > +++ b/doc/guides/eventdevs/features/default.ini > @@ -22,6 +22,7 @@ carry_flow_id = > maintenance_free = > runtime_queue_attr = > profile_links = > +independent_enq = > > ; > ; Features of a default Ethernet Rx adapter. > diff --git a/doc/guides/prog_guide/eventdev/eventdev.rst > b/doc/guides/prog_guide/eventdev/eventdev.rst > index fb6dfce102..515744d8ec 100644 > --- a/doc/guides/prog_guide/eventdev/eventdev.rst > +++ b/doc/guides/prog_guide/eventdev/eventdev.rst > @@ -472,6 +472,29 @@ A flush callback can be passed to the function to handle > any outstanding events. > > Invocation of this API does not affect the existing port > configuration. > > +Independent Enqueue Capability > +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ > + > +This capability applies to eventdev devices that expects all forwarded > events to be > +enqueued in the same order as they are dequeued. For dropped events, their > +releases should come at the same location as the original event was expected. > +The eventdev device has this restriction as it uses the order to retrieve > information about > +the original event that was sent to the CPU. This contains information like > atomic > +flow ID to release the flow lock and ordered events sequence number to > restore the > +original order. > + > +This capability only matters to eventdevs supporting burst mode. On ports > where > +the application is going to change enqueue order, > +``RTE_EVENT_PORT_CFG_INDEPENDENT_ENQ`` support should be enabled. > + > +Example code to inform PMD that the application plans to use independent > enqueue > +order on a port: > + > + .. code-block:: c > + > + if (capability & RTE_EVENT_DEV_CAP_INDEPENDENT_ENQ) > + port_config = port_config | RTE_EVENT_PORT_CFG_INDEPENDENT_ENQ; > + > Stopping the EventDev > ~~~~~~~~~~~~~~~~~~~~~ > > diff --git a/doc/guides/rel_notes/release_24_11.rst > b/doc/guides/rel_notes/release_24_11.rst > index e0a9aa55a1..bf7b8f005c 100644 > --- a/doc/guides/rel_notes/release_24_11.rst > +++ b/doc/guides/rel_notes/release_24_11.rst > @@ -67,6 +67,14 @@ New Features > > The new statistics are useful for debugging and profiling. > > +* **Updated Event Device Library for independent enqueue feature** > + > + * Added support for independent enqueue feature. With this feature Eventdev > + supports enqueue in any order or specifically in a different order than > + dequeue. The feature is intended for eventdevs supporting burst mode. > + Applications should use ``RTE_EVENT_PORT_CFG_INDEPENDENT_ENQ`` to enable > + the feature if the capability ``RTE_EVENT_DEV_CAP_INDEPENDENT_ENQ`` > exists. > + > > Removed Items > ------------- > diff --git a/lib/eventdev/rte_eventdev.h b/lib/eventdev/rte_eventdev.h > index 08e5f9320b..73a44b2ac5 100644 > --- a/lib/eventdev/rte_eventdev.h > +++ b/lib/eventdev/rte_eventdev.h > @@ -446,6 +446,25 @@ struct rte_event; > * @see RTE_SCHED_TYPE_PARALLEL > */ > > +#define RTE_EVENT_DEV_CAP_INDEPENDENT_ENQ (1ULL << 16) > +/**< Event device is capable of independent enqueue. > + * A new capability, RTE_EVENT_DEV_CAP_INDEPENDENT_ENQ, will indicate that > Eventdev > + * supports the enqueue in any order or specifically in a different order > than the > + * dequeue. Eventdev PMD can either dequeue events in the changed order in > which > + * they are enqueued or restore the original order before sending them to the > + * underlying hardware device. A flag is provided during the port > configuration to > + * inform Eventdev PMD that the application intends to use an independent > enqueue > + * order on a particular port. Note that this capability only matters for > eventdevs > + * supporting burst mode. > + * > + * When an implicit release is enabled on a port, Eventdev PMD will also > handle > + * the insertion of RELEASE events in place of dropped events. The > independent enqueue > + * feature only applies to FORWARD and RELEASE events. New events > (op=RTE_EVENT_OP_NEW) > + * will be dequeued in the order the application enqueues them and do not > maintain > + * any order relative to FORWARD/RELEASE events. FORWARD vs NEW relaxed > ordering > + * only applies to ports that have enabled independent enqueue feature. > + */ > + > /* Event device priority levels */ > #define RTE_EVENT_DEV_PRIORITY_HIGHEST 0 > /**< Highest priority level for events and queues. > @@ -1072,6 +1091,18 @@ rte_event_queue_attr_set(uint8_t dev_id, uint8_t > queue_id, uint32_t attr_id, > * > * @see rte_event_port_setup() > */ > +#define RTE_EVENT_PORT_CFG_INDEPENDENT_ENQ (1ULL << 5) > +/**< Flag to enable independent enqueue. Must not be set if the device > + * is not RTE_EVENT_DEV_CAP_INDEPENDENT_ENQ capable. This feature > + * allows an application to enqueue RTE_EVENT_OP_FORWARD or > + * RTE_EVENT_OP_RELEASE in an order different than the order the > + * events were dequeued from the event device, while maintaining > + * RTE_SCHED_TYPE_ATOMIC or RTE_SCHED_TYPE_ORDERED semantics. > + * > + * Note that this flag only matters for Eventdevs supporting burst mode. > + * > + * @see rte_event_port_setup() > + */ > > /** Event port configuration structure */ > struct rte_event_port_conf { > -- > 2.25.1 >