> -----Original Message-----
> From: Abdullah Sevincer <abdullah.sevin...@intel.com>
> Sent: Monday, September 9, 2024 9:35 PM
> To: dev@dpdk.org
> Cc: Jerin Jacob <jer...@marvell.com>; bruce.richard...@intel.com;
> pravin.pat...@intel.com; mattias.ronnb...@ericsson.com;
> manish.aggar...@intel.com; Abdullah Sevincer <abdullah.sevin...@intel.com>
> Subject: [EXTERNAL] [PATCH v12 2/3] event/dlb2: add support for independent
> enqueue
> 
> DLB devices need events to be enqueued in the same order they are dequeued.
> Applications are not suppose to change event order between dequeue and to
> enqueue. Since Eventdev standard does not add such restrictions independent
> enqueue support 
> DLB devices need events to be enqueued in the same order they are dequeued.
> Applications are not suppose to change event order between dequeue and to
> enqueue. Since Eventdev standard does not add such restrictions independent
> enqueue support is needed for DLB PMD so that it restores dequeue order on
> enqueue if applications happen to change it. It also adds missing releases in
> places where events are dropped by the application and it expects implicit
> release to handle it.
> 
> By default the feature will be off on all DLB ports and they will behave the 
> same
> as older releases. To enable reordering feature, applications need to add the
> flag RTE_EVENT_PORT_CFG_INDEPENDENT_ENQ
> to port configuration if only the device advertises the capability
> RTE_EVENT_DEV_CAP_INDEPENDENT_ENQ.
> 
> Signed-off-by: Abdullah Sevincer <abdullah.sevin...@intel.com>
> Acked-by: Mattias Rönnblom <mattias.ronnb...@ericsson.com>
> ---
>  doc/guides/eventdevs/dlb2.rst          |  41 +++
>  doc/guides/rel_notes/release_24_11.rst |   6 +
>  drivers/event/dlb2/dlb2.c              | 492 ++++++++++++++++---------
>  drivers/event/dlb2/dlb2_avx512.c       |  27 +-
>  drivers/event/dlb2/dlb2_inline_fns.h   |   8 +
>  drivers/event/dlb2/dlb2_priv.h         |  25 +-
>  drivers/event/dlb2/rte_pmd_dlb2.h      |  10 +
>  7 files changed, 419 insertions(+), 190 deletions(-)
> 
> diff --git a/doc/guides/eventdevs/dlb2.rst b/doc/guides/eventdevs/dlb2.rst
> index 2532d92888..8b973cf81e 100644
> --- a/doc/guides/eventdevs/dlb2.rst
> +++ b/doc/guides/eventdevs/dlb2.rst
> @@ -456,6 +456,47 @@ Example command to enable QE Weight feature:
> 
>         --allow ea:00.0,enable_cq_weight=<y/Y>
> 
> +Independent Enqueue Capability
> +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> +
> +DLB2 hardware device 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.
> +Hardware 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.
> +
> +Some applications, like those based on the DPDK dispatcher library,
> +want enqueue order independence. To support this, DLB2 PMD supports the
> +``RTE_EVENT_DEV_CAP_INDEPENDENT_ENQ`` capability.
> +
> +This capability applies 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;


A lot of thing in this is generic, update and move that to  
doc/guides/prog_guide/eventdev/eventdev.rst
And add DLB2 specific items here.


> +
> +This code example enables enqueue event reordering inside DLB2 PMD
> +before the events are sent to the DLB2 hardware. If the application is
> +not going to change the enqueue order, this flag should not be enabled
> +to get better performance. DLB2 PMD saves ordering information inside
> +the impl_opaque field of the event, and this field should be preserved
> +for all FORWARD or RELEASE events. Following MACROs are provided to get
> +and set this field inside the event in case the same event is not used
> +for forwarding (e.g., a new RELEASE event is created when the original event 
> is
> dropped instead of reusing the same event).
> +
> +    .. code-block:: c
> +
> +       #define RTE_EVENT_GET_IMPL_OPAQUE(ev)      (ev->impl_opaque)
> +       #define RTE_EVENT_SET_IMPL_OPAQUE(ev, val)  (ev->impl_opaque =
> + val)

Don’t add public RTE_EVENT_ symbol as example macro, use some other prefix like 
DLB2.


> +
>  Running Eventdev Applications with DLB Device
>  ---------------------------------------------
> 
> diff --git a/doc/guides/rel_notes/release_24_11.rst
> b/doc/guides/rel_notes/release_24_11.rst
> index 89c6a67e6a..61796f24e6 100644
> --- a/doc/guides/rel_notes/release_24_11.rst
> +++ b/doc/guides/rel_notes/release_24_11.rst
> @@ -60,6 +60,12 @@ New Features
>    * Added support for independent enqueue feature. Updated Event Device and
>      PMD feature list.
> 
> +* **Updated DLB2 Driver for independent enqueue feature**

Driver->driver

> +
> +  Added support for DLB independent enqueue feature. Applications
> + should use  ``RTE_EVENT_PORT_CFG_INDEPENDENT_ENQ`` to enable the
> + feature if the capability  ``RTE_EVENT_DEV_CAP_INDEPENDENT_ENQ`` exists.

Next patch add one more item to release notes. Instead, IMO, it better to 
update the generic section.
for this PMD support. I.e. add one item under 
"*Updated eventdev to support independent enqueue feature" section. As add DLB2 
support.


> 
>  #include <rte_compat.h>
> 
> +/**
> + * Macros to get/set QID depth and QE weight from rte_event metadata.
> + * Currently 'rsvd' field is used for these. Lower 2 bits are used to
> +store
> + * QID depth while the upper 2 bits are used for QER weight.
> + */
> +#define RTE_PMD_DLB2_GET_QID_DEPTH(x) ((x)->rsvd & 0x3) #define
> +RTE_PMD_DLB2_SET_QID_DEPTH(x, v) ((x)->rsvd = ((x)->rsvd & ~0x3) | (v &
> +0x3)) #define RTE_PMD_DLB2_GET_QE_WEIGHT(x) (((x)->rsvd >> 2) & 0x3)
> +#define RTE_PMD_DLB2_SET_QE_WEIGHT(x, v) ((x)->rsvd = ((x)->rsvd & 0x3)
> +| ((v & 0x3) << 2))


All of the above MACROs are public symbols, Add Doxygen comment for each of 
them.

> +
>  /**
>   * @warning
>   * @b EXPERIMENTAL: this API may change, or be removed, without prior
> notice
> --
> 2.25.1

Reply via email to