From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 13F4C45AA8; Fri, 4 Oct 2024 07:02:40 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id D659A402DD; Fri, 4 Oct 2024 07:02:39 +0200 (CEST) Received: from mail-qt1-f181.google.com (mail-qt1-f181.google.com [209.85.160.181]) by mails.dpdk.org (Postfix) with ESMTP id 98E0A402C9 for ; Fri, 4 Oct 2024 07:02:37 +0200 (CEST) Received: by mail-qt1-f181.google.com with SMTP id d75a77b69052e-4581f44b9b4so11596741cf.1 for ; Thu, 03 Oct 2024 22:02:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1728018157; x=1728622957; darn=dpdk.org; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=3ggOWQzWgwoGpNr0xJikbr+9Fba3Q6vpkC77Bkow/cs=; b=GJnOS+U+IXm5XqP4gYhoB8F5p9T142auAm99Yp4JNeDVuQZfz/mfsUTxR3WreQf4bp UZL5J7u7cs3N40AiIuwmk8IRxLfCasYL5IV7OCEmaCjO6RbJFOBIwrCqvhQQw5dZTkOp 2pj5V5KzAXd8R4Z+rdleYjmyK7e5RKYieoD5eCHmKarQTpQyz+p3EK2myVOvtaeCni3K mIlV4yUWZlTrc9Bw6K+pp6ZtKYxOopdhPhmMu0ihD6aqq6QovIx7eYRA7wlgWPAO7BzK qP7IHj8eeUv8p4Qmd616YCoX5dW0zv/PudYTjxoxVEa1c7m1oeYs47Ax+F/2M421JvDg 16aw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1728018157; x=1728622957; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=3ggOWQzWgwoGpNr0xJikbr+9Fba3Q6vpkC77Bkow/cs=; b=JHwSzZ/AqFgWmGmPArcGUQoUmUiEAPB3/yO8WQ6mFTWyLRkAdRFOPZnTRnFj2dc24L ozf1ZpH29naCxlnlOdKQ1SaJNN2mNN/9jO1G51TYIKf5ch4o+0WhG+yJ6zh3SU29hZHT fNmkmlquvLKRSnUT16l6rYPXFnqse+aRdFeiKt3AK5Cta79sc6QgdgrlWZgTlJeRLOcY xTg57Ixn9pFK/3xs/cQV1hEhEiYl+MKUt5RRNgCbl1MG1efCaUDOjoK+HREqoLooyK5k LtYk4LZ8YMH77vsizhLIj6MyjOP3BorQ7q5MvwU+JBCfxJgAseQ/waSizLag11W9kWMH mhqg== X-Forwarded-Encrypted: i=1; AJvYcCXd2Oz7EMIt88DwRvp9pVDnjG6fqWp/XKPAtyu9KH5bNVBUX3SiQ6NM0hC+GqGjhlZ4u/I=@dpdk.org X-Gm-Message-State: AOJu0YxfCPzs2wgP9XJ7b6cKXIj1KLy/gKej07SdGQs17D7C+5QUItdU cQ1t5KYW2U548l2+T3QntEipzicjKKLeqRop7lf/P+c9K6fsB1ER08pqq6fLrIrZdcRJlLB7Hoc mmbHLR1RKmEO0pXItvJj2vBsb5Ds= X-Google-Smtp-Source: AGHT+IESEzh8vQKKDo4sztwSNzC7Z7tGuzUbFbrolcsTJGtfwvB7Zg4iMXMpx9u+OaHq5xX4DWkgImpG22zlAgAxyGM= X-Received: by 2002:ac8:5a91:0:b0:457:c435:a5c2 with SMTP id d75a77b69052e-45d9bb825c5mr25097381cf.58.1728018156691; Thu, 03 Oct 2024 22:02:36 -0700 (PDT) MIME-Version: 1.0 References: <20241001061411.2537-1-pbhagavatula@marvell.com> <20241001131901.7920-1-pbhagavatula@marvell.com> <20241001131901.7920-3-pbhagavatula@marvell.com> In-Reply-To: <20241001131901.7920-3-pbhagavatula@marvell.com> From: Jerin Jacob Date: Fri, 4 Oct 2024 10:32:10 +0530 Message-ID: Subject: Re: [PATCH v4 2/6] eventdev: add event port pre-schedule modify To: pbhagavatula@marvell.com Cc: jerinj@marvell.com, sthotton@marvell.com, abdullah.sevincer@intel.com, hemant.agrawal@nxp.com, sachin.saxena@oss.nxp.com, harry.van.haaren@intel.com, mattias.ronnblom@ericsson.com, liangma@liangbit.com, peter.mccarthy@intel.com, dev@dpdk.org Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org On Tue, Oct 1, 2024 at 7:14=E2=80=AFPM wrote: > > From: Pavan Nikhilesh > > Some event devices allow pre-schedule types to be modified at > runtime on an event port. > Add `RTE_EVENT_DEV_CAP_EVENT_PER_PORT_PRESCHEDULE` capability > to indicate that the event device supports this feature. > > Add `rte_event_port_preschedule_modify()` API to modify the > pre-schedule type at runtime. > > Signed-off-by: Pavan Nikhilesh > > +To enable or disable event pre-scheduling at a given event port, the app= lication can use > +``rte_event_port_preschedule_modify()`` API. # Talk about RTE_EVENT_DEV_CAP_EVENT_PER_PORT_PRESCHEDULE capability. # Also tell this is HINT. i.e application does not need to check this cap in fast path. > + > +.. code-block:: c > + > + rte_event_port_preschedule_modify(dev_id, port_id, RTE_EVENT_DEV_PRES= CHEDULE); > + // Dequeue events from the event port with normal dequeue() function. > + rte_event_port_preschedule_modify(dev_id, port_id, RTE_EVENT_DEV_PRES= CHEDULE_NONE); > + // Disable pre-scheduling if thread is about to be scheduled out and = issue dequeue() to drain > + // pending events. > + > + > Starting the EventDev > ~~~~~~~~~~~~~~~~~~~~~ > > diff --git a/doc/guides/rel_notes/release_24_11.rst b/doc/guides/rel_note= s/release_24_11.rst > index eae5cc326b..6e36ac7b7e 100644 > --- a/doc/guides/rel_notes/release_24_11.rst > +++ b/doc/guides/rel_notes/release_24_11.rst > @@ -62,6 +62,8 @@ New Features > > * Added ``rte_event_dev_config::preschedule_type`` to configure the de= vice > level pre-scheduling type. > + * Added ``rte_event_port_preschedule_modify`` to modify pre-scheduling= type > + on a given event port. > > > Removed Items > diff --git a/lib/eventdev/eventdev_pmd.h b/lib/eventdev/eventdev_pmd.h > index 7a5699f14b..9ea23aa6cd 100644 > --- a/lib/eventdev/eventdev_pmd.h > +++ b/lib/eventdev/eventdev_pmd.h > @@ -184,6 +184,8 @@ struct __rte_cache_aligned rte_eventdev { > /**< Pointer to PMD DMA adapter enqueue function. */ > event_profile_switch_t profile_switch; > /**< Pointer to PMD Event switch profile function. */ > + event_preschedule_modify_t preschedule_modify; > + /**< Pointer to PMD Event port pre-schedule type modify function.= */ > > uint64_t reserved_64s[3]; /**< Reserved for future fields */ > void *reserved_ptrs[3]; /**< Reserved for future fields */ > diff --git a/lib/eventdev/eventdev_private.c b/lib/eventdev/eventdev_priv= ate.c > index 017f97ccab..dc37f736f8 100644 > --- a/lib/eventdev/eventdev_private.c > +++ b/lib/eventdev/eventdev_private.c > @@ -96,6 +96,21 @@ dummy_event_port_profile_switch(__rte_unused void *por= t, __rte_unused uint8_t pr > return -EINVAL; > } > > diff --git a/lib/eventdev/eventdev_trace_points.c b/lib/eventdev/eventdev= _trace_points.c > index 8024e07531..e41674123c 100644 > --- a/lib/eventdev/eventdev_trace_points.c > +++ b/lib/eventdev/eventdev_trace_points.c > @@ -49,6 +49,9 @@ RTE_TRACE_POINT_REGISTER(rte_eventdev_trace_maintain, > RTE_TRACE_POINT_REGISTER(rte_eventdev_trace_port_profile_switch, > lib.eventdev.port.profile.switch) > > +RTE_TRACE_POINT_REGISTER(rte_eventdev_trace_port_preschedule_modify, > + lib.eventdev.port.preschedule.modify) > + > /* Eventdev Rx adapter trace points */ > RTE_TRACE_POINT_REGISTER(rte_eventdev_trace_eth_rx_adapter_create, > lib.eventdev.rx.adapter.create) > diff --git a/lib/eventdev/rte_eventdev.h b/lib/eventdev/rte_eventdev.h > index 5ea7f5a07b..0add0093ac 100644 > --- a/lib/eventdev/rte_eventdev.h > +++ b/lib/eventdev/rte_eventdev.h > @@ -470,6 +470,16 @@ struct rte_event; > * @see rte_event_dev_configure() > */ > > +#define RTE_EVENT_DEV_CAP_EVENT_PER_PORT_PRESCHEDULE (1ULL << 18) > +/**< Event device supports event pre-scheduling per event port. > + * > + * When this flag is set, the event device allows controlling the event > + * pre-scheduling at a event port granularity. Tell it is HINT. > + * > + * @see rte_event_dev_configure() > + * @see rte_event_port_preschedule_modify() > + */ > + > /* Event device priority levels */ > #define RTE_EVENT_DEV_PRIORITY_HIGHEST 0 > /**< Highest priority level for events and queues. > @@ -708,18 +718,23 @@ typedef enum { > RTE_EVENT_DEV_PRESCHEDULE_NONE =3D 0, > /* Disable pre-schedule across the event device or on a given eve= nt port. > * @ref rte_event_dev_config.preschedule_type > + * @ref rte_event_port_preschedule_modify() > */ > RTE_EVENT_DEV_PRESCHEDULE, > /* Enable pre-schedule always across the event device or a given = event port. > * @ref rte_event_dev_config.preschedule_type > + * @ref rte_event_port_preschedule_modify() > * @see RTE_EVENT_DEV_CAP_EVENT_PRESCHEDULE > + * @see RTE_EVENT_DEV_CAP_EVENT_PER_PORT_PRESCHEDULE > */ > RTE_EVENT_DEV_PRESCHEDULE_ADAPTIVE, > /* Enable adaptive pre-schedule across the event device or a give= n event port. > * Delay issuing pre-schedule until there are no forward progress= constraints with > * the held flow contexts. > * @ref rte_event_dev_config.preschedule_type > + * @ref rte_event_port_preschedule_modify() > * @see RTE_EVENT_DEV_CAP_EVENT_PRESCHEDULE_ADAPTIVE > + * @see RTE_EVENT_DEV_CAP_EVENT_PER_PORT_PRESCHEDULE > */ > } rte_event_dev_preschedule_type_t; > > @@ -2922,6 +2937,46 @@ rte_event_port_profile_switch(uint8_t dev_id, uint= 8_t port_id, uint8_t profile_i > return fp_ops->profile_switch(port, profile_id); > } > > +/** > + * Change the pre-schedule type to use on an event port. Modify the pre-schedule of the given event port ? > + * > + * This function is used to change the current pre-schedule type configu= red > + * on an event port, the pre-schedule type can be set to none to disable= pre-scheduling. > + * This effects the subsequent ``rte_event_dequeue_burst`` call. > + * The event device should support RTE_EVENT_DEV_CAP_PER_PORT_PRESCHEDUL= E capability. Tell it is HINT and the application does not need to check the capa > + * > + * @param dev_id > + * The identifier of the device. > + * @param port_id > + * The identifier of the event port. > + * @param type > + * The preschedule type to use on the event port. > + * @return > + * - 0 on success. > + * - -EINVAL if *dev_id*, *port_id*, or *type* is invalid. > + */ > +static inline int > +rte_event_port_preschedule_modify(uint8_t dev_id, uint8_t port_id, > + rte_event_dev_preschedule_type_t type) Remove rte_event_dev_preschedule_type_t and use enum rte_event_dev_preschedule_type > +{ > + const struct rte_event_fp_ops *fp_ops; > + void *port; > + > + fp_ops =3D &rte_event_fp_ops[dev_id]; > + port =3D fp_ops->data[port_id]; > + > +#ifdef RTE_LIBRTE_EVENTDEV_DEBUG > + if (dev_id >=3D RTE_EVENT_MAX_DEVS || port_id >=3D RTE_EVENT_MAX_= PORTS_PER_DEV) > + return -EINVAL; > + > + if (port =3D=3D NULL) > + return -EINVAL; > +#endif > + rte_eventdev_trace_port_preschedule_modify(dev_id, port_id, type)= ; > + > + return fp_ops->preschedule_modify(port, type); > +} > + > #ifdef __cplusplus > } > #endif > diff --git a/lib/eventdev/rte_eventdev_core.h b/lib/eventdev/rte_eventdev= _core.h > index fc8e1556ab..2275888a6b 100644 > --- a/lib/eventdev/rte_eventdev_core.h > +++ b/lib/eventdev/rte_eventdev_core.h > @@ -49,6 +49,10 @@ typedef uint16_t (*event_dma_adapter_enqueue_t)(void *= port, struct rte_event ev[ > typedef int (*event_profile_switch_t)(void *port, uint8_t profile); > /**< @internal Switch active link profile on the event port. */ > > +typedef int (*event_preschedule_modify_t)(void *port, > + rte_event_dev_preschedule_type_= t preschedule_type); > +/**< @internal Modify pre-schedule type on the event port. */ > + > struct __rte_cache_aligned rte_event_fp_ops { > void **data; > /**< points to array of internal port data pointers */ > @@ -76,6 +80,8 @@ struct __rte_cache_aligned rte_event_fp_ops { > /**< PMD DMA adapter enqueue function. */ > event_profile_switch_t profile_switch; > /**< PMD Event switch profile function. */ > + event_preschedule_modify_t preschedule_modify; > + /**< PMD Event port pre-schedule switch. */ Use reserved not to break ABI > uintptr_t reserved[4]; > }; > > diff --git a/lib/eventdev/rte_eventdev_trace_fp.h b/lib/eventdev/rte_even= tdev_trace_fp.h > index 04d510ad00..78baed94de 100644 > --- a/lib/eventdev/rte_eventdev_trace_fp.h > +++ b/lib/eventdev/rte_eventdev_trace_fp.h > @@ -8,7 +8,7 @@ > /** > * @file > * > - * API for ethdev trace support > + * API for eventdev trace support > */ > > #ifdef __cplusplus > @@ -54,6 +54,15 @@ RTE_TRACE_POINT_FP( > rte_trace_point_emit_u8(profile); > ) > > +RTE_TRACE_POINT_FP( > + rte_eventdev_trace_port_preschedule_modify, > + RTE_TRACE_POINT_ARGS(uint8_t dev_id, uint8_t port_id, > + int type), > + rte_trace_point_emit_u8(dev_id); > + rte_trace_point_emit_u8(port_id); > + rte_trace_point_emit_int(type); > +) > + > RTE_TRACE_POINT_FP( > rte_eventdev_trace_eth_tx_adapter_enqueue, > RTE_TRACE_POINT_ARGS(uint8_t dev_id, uint8_t port_id, void *ev_ta= ble, > diff --git a/lib/eventdev/version.map b/lib/eventdev/version.map > index 4947bb4ec6..b6d63ba576 100644 > --- a/lib/eventdev/version.map > +++ b/lib/eventdev/version.map > @@ -147,6 +147,10 @@ EXPERIMENTAL { > rte_event_port_profile_unlink; > rte_event_port_profile_links_get; > __rte_eventdev_trace_port_profile_switch; > + > + # added in 24.11 > + rte_event_port_preschedule_modify; > + __rte_eventdev_trace_port_preschedule_modify; > }; > > INTERNAL { > -- > 2.25.1 >