[v4,1/5] eventdev: support to set queue attributes at runtime
Checks
Commit Message
Added a new eventdev API rte_event_queue_attr_set(), to set event queue
attributes at runtime from the values set during initialization using
rte_event_queue_setup(). PMD's supporting this feature should expose the
capability RTE_EVENT_DEV_CAP_RUNTIME_QUEUE_ATTR.
Signed-off-by: Shijith Thotton <sthotton@marvell.com>
Acked-by: Jerin Jacob <jerinj@marvell.com>
---
doc/guides/eventdevs/features/default.ini | 1 +
doc/guides/rel_notes/release_22_07.rst | 5 ++++
lib/eventdev/eventdev_pmd.h | 22 ++++++++++++++++
lib/eventdev/rte_eventdev.c | 26 ++++++++++++++++++
lib/eventdev/rte_eventdev.h | 32 ++++++++++++++++++++++-
lib/eventdev/version.map | 3 +++
6 files changed, 88 insertions(+), 1 deletion(-)
Comments
On Mon, May 16, 2022 at 11:09 PM Shijith Thotton <sthotton@marvell.com> wrote:
>
> Added a new eventdev API rte_event_queue_attr_set(), to set event queue
> attributes at runtime from the values set during initialization using
> rte_event_queue_setup(). PMD's supporting this feature should expose the
> capability RTE_EVENT_DEV_CAP_RUNTIME_QUEUE_ATTR.
>
> Signed-off-by: Shijith Thotton <sthotton@marvell.com>
> Acked-by: Jerin Jacob <jerinj@marvell.com>
Hi @Mattias Rönnblom
Planning to merge this version for -rc1. Do you have any more comments
for this series?
> ---
> doc/guides/eventdevs/features/default.ini | 1 +
> doc/guides/rel_notes/release_22_07.rst | 5 ++++
> lib/eventdev/eventdev_pmd.h | 22 ++++++++++++++++
> lib/eventdev/rte_eventdev.c | 26 ++++++++++++++++++
> lib/eventdev/rte_eventdev.h | 32 ++++++++++++++++++++++-
> lib/eventdev/version.map | 3 +++
> 6 files changed, 88 insertions(+), 1 deletion(-)
>
> diff --git a/doc/guides/eventdevs/features/default.ini b/doc/guides/eventdevs/features/default.ini
> index 2ea233463a..00360f60c6 100644
> --- a/doc/guides/eventdevs/features/default.ini
> +++ b/doc/guides/eventdevs/features/default.ini
> @@ -17,6 +17,7 @@ runtime_port_link =
> multiple_queue_port =
> carry_flow_id =
> maintenance_free =
> +runtime_queue_attr =
>
> ;
> ; Features of a default Ethernet Rx adapter.
> diff --git a/doc/guides/rel_notes/release_22_07.rst b/doc/guides/rel_notes/release_22_07.rst
> index 88d6e96cc1..a7a912d665 100644
> --- a/doc/guides/rel_notes/release_22_07.rst
> +++ b/doc/guides/rel_notes/release_22_07.rst
> @@ -65,6 +65,11 @@ New Features
> * Added support for promiscuous mode on Windows.
> * Added support for MTU on Windows.
>
> +* **Added support for setting queue attributes at runtime in eventdev.**
> +
> + Added new API ``rte_event_queue_attr_set()``, to set event queue attributes
> + at runtime.
> +
>
> Removed Items
> -------------
> diff --git a/lib/eventdev/eventdev_pmd.h b/lib/eventdev/eventdev_pmd.h
> index ce469d47a6..3b85d9f7a5 100644
> --- a/lib/eventdev/eventdev_pmd.h
> +++ b/lib/eventdev/eventdev_pmd.h
> @@ -341,6 +341,26 @@ typedef int (*eventdev_queue_setup_t)(struct rte_eventdev *dev,
> typedef void (*eventdev_queue_release_t)(struct rte_eventdev *dev,
> uint8_t queue_id);
>
> +/**
> + * Set an event queue attribute at runtime.
> + *
> + * @param dev
> + * Event device pointer
> + * @param queue_id
> + * Event queue index
> + * @param attr_id
> + * Event queue attribute id
> + * @param attr_value
> + * Event queue attribute value
> + *
> + * @return
> + * - 0: Success.
> + * - <0: Error code on failure.
> + */
> +typedef int (*eventdev_queue_attr_set_t)(struct rte_eventdev *dev,
> + uint8_t queue_id, uint32_t attr_id,
> + uint64_t attr_value);
> +
> /**
> * Retrieve the default event port configuration.
> *
> @@ -1211,6 +1231,8 @@ struct eventdev_ops {
> /**< Set up an event queue. */
> eventdev_queue_release_t queue_release;
> /**< Release an event queue. */
> + eventdev_queue_attr_set_t queue_attr_set;
> + /**< Set an event queue attribute. */
>
> eventdev_port_default_conf_get_t port_def_conf;
> /**< Get default port configuration. */
> diff --git a/lib/eventdev/rte_eventdev.c b/lib/eventdev/rte_eventdev.c
> index 532a253553..a31e99be02 100644
> --- a/lib/eventdev/rte_eventdev.c
> +++ b/lib/eventdev/rte_eventdev.c
> @@ -844,6 +844,32 @@ rte_event_queue_attr_get(uint8_t dev_id, uint8_t queue_id, uint32_t attr_id,
> return 0;
> }
>
> +int
> +rte_event_queue_attr_set(uint8_t dev_id, uint8_t queue_id, uint32_t attr_id,
> + uint64_t attr_value)
> +{
> + struct rte_eventdev *dev;
> +
> + RTE_EVENTDEV_VALID_DEVID_OR_ERR_RET(dev_id, -EINVAL);
> + dev = &rte_eventdevs[dev_id];
> + if (!is_valid_queue(dev, queue_id)) {
> + RTE_EDEV_LOG_ERR("Invalid queue_id=%" PRIu8, queue_id);
> + return -EINVAL;
> + }
> +
> + if (!(dev->data->event_dev_cap &
> + RTE_EVENT_DEV_CAP_RUNTIME_QUEUE_ATTR)) {
> + RTE_EDEV_LOG_ERR(
> + "Device %" PRIu8 "does not support changing queue attributes at runtime",
> + dev_id);
> + return -ENOTSUP;
> + }
> +
> + RTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->queue_attr_set, -ENOTSUP);
> + return (*dev->dev_ops->queue_attr_set)(dev, queue_id, attr_id,
> + attr_value);
> +}
> +
> int
> rte_event_port_link(uint8_t dev_id, uint8_t port_id,
> const uint8_t queues[], const uint8_t priorities[],
> diff --git a/lib/eventdev/rte_eventdev.h b/lib/eventdev/rte_eventdev.h
> index 42a5660169..a79b1397eb 100644
> --- a/lib/eventdev/rte_eventdev.h
> +++ b/lib/eventdev/rte_eventdev.h
> @@ -225,7 +225,7 @@ struct rte_event;
> /**< Event scheduling prioritization is based on the priority associated with
> * each event queue.
> *
> - * @see rte_event_queue_setup()
> + * @see rte_event_queue_setup(), rte_event_queue_attr_set()
> */
> #define RTE_EVENT_DEV_CAP_EVENT_QOS (1ULL << 1)
> /**< Event scheduling prioritization is based on the priority associated with
> @@ -307,6 +307,13 @@ struct rte_event;
> * global pool, or process signaling related to load balancing.
> */
>
> +#define RTE_EVENT_DEV_CAP_RUNTIME_QUEUE_ATTR (1ULL << 11)
> +/**< Event device is capable of changing the queue attributes at runtime i.e
> + * after rte_event_queue_setup() or rte_event_start() call sequence. If this
> + * flag is not set, eventdev queue attributes can only be configured during
> + * rte_event_queue_setup().
> + */
> +
> /* Event device priority levels */
> #define RTE_EVENT_DEV_PRIORITY_HIGHEST 0
> /**< Highest priority expressed across eventdev subsystem
> @@ -702,6 +709,29 @@ int
> rte_event_queue_attr_get(uint8_t dev_id, uint8_t queue_id, uint32_t attr_id,
> uint32_t *attr_value);
>
> +/**
> + * Set an event queue attribute.
> + *
> + * @param dev_id
> + * Eventdev id
> + * @param queue_id
> + * Eventdev queue id
> + * @param attr_id
> + * The attribute ID to set
> + * @param attr_value
> + * The attribute value to set
> + *
> + * @return
> + * - 0: Successfully set attribute.
> + * - -EINVAL: invalid device, queue or attr_id.
> + * - -ENOTSUP: device does not support setting the event attribute.
> + * - <0: failed to set event queue attribute
> + */
> +__rte_experimental
> +int
> +rte_event_queue_attr_set(uint8_t dev_id, uint8_t queue_id, uint32_t attr_id,
> + uint64_t attr_value);
> +
> /* Event port specific APIs */
>
> /* Event port configuration bitmap flags */
> diff --git a/lib/eventdev/version.map b/lib/eventdev/version.map
> index cd5dada07f..c581b75c18 100644
> --- a/lib/eventdev/version.map
> +++ b/lib/eventdev/version.map
> @@ -108,6 +108,9 @@ EXPERIMENTAL {
>
> # added in 22.03
> rte_event_eth_rx_adapter_event_port_get;
> +
> + # added in 22.07
> + rte_event_queue_attr_set;
> };
>
> INTERNAL {
> --
> 2.25.1
>
On 2022-05-16 20:02, Jerin Jacob wrote:
> On Mon, May 16, 2022 at 11:09 PM Shijith Thotton <sthotton@marvell.com> wrote:
>>
>> Added a new eventdev API rte_event_queue_attr_set(), to set event queue
>> attributes at runtime from the values set during initialization using
>> rte_event_queue_setup(). PMD's supporting this feature should expose the
>> capability RTE_EVENT_DEV_CAP_RUNTIME_QUEUE_ATTR.
>>
>> Signed-off-by: Shijith Thotton <sthotton@marvell.com>
>> Acked-by: Jerin Jacob <jerinj@marvell.com>
>
> Hi @Mattias Rönnblom
>
> Planning to merge this version for -rc1. Do you have any more comments
> for this series?
>
No.
>
>> ---
>> doc/guides/eventdevs/features/default.ini | 1 +
>> doc/guides/rel_notes/release_22_07.rst | 5 ++++
>> lib/eventdev/eventdev_pmd.h | 22 ++++++++++++++++
>> lib/eventdev/rte_eventdev.c | 26 ++++++++++++++++++
>> lib/eventdev/rte_eventdev.h | 32 ++++++++++++++++++++++-
>> lib/eventdev/version.map | 3 +++
>> 6 files changed, 88 insertions(+), 1 deletion(-)
>>
>> diff --git a/doc/guides/eventdevs/features/default.ini b/doc/guides/eventdevs/features/default.ini
>> index 2ea233463a..00360f60c6 100644
>> --- a/doc/guides/eventdevs/features/default.ini
>> +++ b/doc/guides/eventdevs/features/default.ini
>> @@ -17,6 +17,7 @@ runtime_port_link =
>> multiple_queue_port =
>> carry_flow_id =
>> maintenance_free =
>> +runtime_queue_attr =
>>
>> ;
>> ; Features of a default Ethernet Rx adapter.
>> diff --git a/doc/guides/rel_notes/release_22_07.rst b/doc/guides/rel_notes/release_22_07.rst
>> index 88d6e96cc1..a7a912d665 100644
>> --- a/doc/guides/rel_notes/release_22_07.rst
>> +++ b/doc/guides/rel_notes/release_22_07.rst
>> @@ -65,6 +65,11 @@ New Features
>> * Added support for promiscuous mode on Windows.
>> * Added support for MTU on Windows.
>>
>> +* **Added support for setting queue attributes at runtime in eventdev.**
>> +
>> + Added new API ``rte_event_queue_attr_set()``, to set event queue attributes
>> + at runtime.
>> +
>>
>> Removed Items
>> -------------
>> diff --git a/lib/eventdev/eventdev_pmd.h b/lib/eventdev/eventdev_pmd.h
>> index ce469d47a6..3b85d9f7a5 100644
>> --- a/lib/eventdev/eventdev_pmd.h
>> +++ b/lib/eventdev/eventdev_pmd.h
>> @@ -341,6 +341,26 @@ typedef int (*eventdev_queue_setup_t)(struct rte_eventdev *dev,
>> typedef void (*eventdev_queue_release_t)(struct rte_eventdev *dev,
>> uint8_t queue_id);
>>
>> +/**
>> + * Set an event queue attribute at runtime.
>> + *
>> + * @param dev
>> + * Event device pointer
>> + * @param queue_id
>> + * Event queue index
>> + * @param attr_id
>> + * Event queue attribute id
>> + * @param attr_value
>> + * Event queue attribute value
>> + *
>> + * @return
>> + * - 0: Success.
>> + * - <0: Error code on failure.
>> + */
>> +typedef int (*eventdev_queue_attr_set_t)(struct rte_eventdev *dev,
>> + uint8_t queue_id, uint32_t attr_id,
>> + uint64_t attr_value);
>> +
>> /**
>> * Retrieve the default event port configuration.
>> *
>> @@ -1211,6 +1231,8 @@ struct eventdev_ops {
>> /**< Set up an event queue. */
>> eventdev_queue_release_t queue_release;
>> /**< Release an event queue. */
>> + eventdev_queue_attr_set_t queue_attr_set;
>> + /**< Set an event queue attribute. */
>>
>> eventdev_port_default_conf_get_t port_def_conf;
>> /**< Get default port configuration. */
>> diff --git a/lib/eventdev/rte_eventdev.c b/lib/eventdev/rte_eventdev.c
>> index 532a253553..a31e99be02 100644
>> --- a/lib/eventdev/rte_eventdev.c
>> +++ b/lib/eventdev/rte_eventdev.c
>> @@ -844,6 +844,32 @@ rte_event_queue_attr_get(uint8_t dev_id, uint8_t queue_id, uint32_t attr_id,
>> return 0;
>> }
>>
>> +int
>> +rte_event_queue_attr_set(uint8_t dev_id, uint8_t queue_id, uint32_t attr_id,
>> + uint64_t attr_value)
>> +{
>> + struct rte_eventdev *dev;
>> +
>> + RTE_EVENTDEV_VALID_DEVID_OR_ERR_RET(dev_id, -EINVAL);
>> + dev = &rte_eventdevs[dev_id];
>> + if (!is_valid_queue(dev, queue_id)) {
>> + RTE_EDEV_LOG_ERR("Invalid queue_id=%" PRIu8, queue_id);
>> + return -EINVAL;
>> + }
>> +
>> + if (!(dev->data->event_dev_cap &
>> + RTE_EVENT_DEV_CAP_RUNTIME_QUEUE_ATTR)) {
>> + RTE_EDEV_LOG_ERR(
>> + "Device %" PRIu8 "does not support changing queue attributes at runtime",
>> + dev_id);
>> + return -ENOTSUP;
>> + }
>> +
>> + RTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->queue_attr_set, -ENOTSUP);
>> + return (*dev->dev_ops->queue_attr_set)(dev, queue_id, attr_id,
>> + attr_value);
>> +}
>> +
>> int
>> rte_event_port_link(uint8_t dev_id, uint8_t port_id,
>> const uint8_t queues[], const uint8_t priorities[],
>> diff --git a/lib/eventdev/rte_eventdev.h b/lib/eventdev/rte_eventdev.h
>> index 42a5660169..a79b1397eb 100644
>> --- a/lib/eventdev/rte_eventdev.h
>> +++ b/lib/eventdev/rte_eventdev.h
>> @@ -225,7 +225,7 @@ struct rte_event;
>> /**< Event scheduling prioritization is based on the priority associated with
>> * each event queue.
>> *
>> - * @see rte_event_queue_setup()
>> + * @see rte_event_queue_setup(), rte_event_queue_attr_set()
>> */
>> #define RTE_EVENT_DEV_CAP_EVENT_QOS (1ULL << 1)
>> /**< Event scheduling prioritization is based on the priority associated with
>> @@ -307,6 +307,13 @@ struct rte_event;
>> * global pool, or process signaling related to load balancing.
>> */
>>
>> +#define RTE_EVENT_DEV_CAP_RUNTIME_QUEUE_ATTR (1ULL << 11)
>> +/**< Event device is capable of changing the queue attributes at runtime i.e
>> + * after rte_event_queue_setup() or rte_event_start() call sequence. If this
>> + * flag is not set, eventdev queue attributes can only be configured during
>> + * rte_event_queue_setup().
>> + */
>> +
>> /* Event device priority levels */
>> #define RTE_EVENT_DEV_PRIORITY_HIGHEST 0
>> /**< Highest priority expressed across eventdev subsystem
>> @@ -702,6 +709,29 @@ int
>> rte_event_queue_attr_get(uint8_t dev_id, uint8_t queue_id, uint32_t attr_id,
>> uint32_t *attr_value);
>>
>> +/**
>> + * Set an event queue attribute.
>> + *
>> + * @param dev_id
>> + * Eventdev id
>> + * @param queue_id
>> + * Eventdev queue id
>> + * @param attr_id
>> + * The attribute ID to set
>> + * @param attr_value
>> + * The attribute value to set
>> + *
>> + * @return
>> + * - 0: Successfully set attribute.
>> + * - -EINVAL: invalid device, queue or attr_id.
>> + * - -ENOTSUP: device does not support setting the event attribute.
>> + * - <0: failed to set event queue attribute
>> + */
>> +__rte_experimental
>> +int
>> +rte_event_queue_attr_set(uint8_t dev_id, uint8_t queue_id, uint32_t attr_id,
>> + uint64_t attr_value);
>> +
>> /* Event port specific APIs */
>>
>> /* Event port configuration bitmap flags */
>> diff --git a/lib/eventdev/version.map b/lib/eventdev/version.map
>> index cd5dada07f..c581b75c18 100644
>> --- a/lib/eventdev/version.map
>> +++ b/lib/eventdev/version.map
>> @@ -108,6 +108,9 @@ EXPERIMENTAL {
>>
>> # added in 22.03
>> rte_event_eth_rx_adapter_event_port_get;
>> +
>> + # added in 22.07
>> + rte_event_queue_attr_set;
>> };
>>
>> INTERNAL {
>> --
>> 2.25.1
>>
On Tue, May 17, 2022 at 2:25 PM Mattias Rönnblom
<mattias.ronnblom@ericsson.com> wrote:
>
> On 2022-05-16 20:02, Jerin Jacob wrote:
> > On Mon, May 16, 2022 at 11:09 PM Shijith Thotton <sthotton@marvell.com> wrote:
> >>
> >> Added a new eventdev API rte_event_queue_attr_set(), to set event queue
> >> attributes at runtime from the values set during initialization using
> >> rte_event_queue_setup(). PMD's supporting this feature should expose the
> >> capability RTE_EVENT_DEV_CAP_RUNTIME_QUEUE_ATTR.
> >>
> >> Signed-off-by: Shijith Thotton <sthotton@marvell.com>
> >> Acked-by: Jerin Jacob <jerinj@marvell.com>
> >
> > Hi @Mattias Rönnblom
> >
> > Planning to merge this version for -rc1. Do you have any more comments
> > for this series?
> >
>
> No.
Series applied to dpdk-next-net-eventdev/for-main. Thanks
>
> >
> >> ---
> >> doc/guides/eventdevs/features/default.ini | 1 +
> >> doc/guides/rel_notes/release_22_07.rst | 5 ++++
> >> lib/eventdev/eventdev_pmd.h | 22 ++++++++++++++++
> >> lib/eventdev/rte_eventdev.c | 26 ++++++++++++++++++
> >> lib/eventdev/rte_eventdev.h | 32 ++++++++++++++++++++++-
> >> lib/eventdev/version.map | 3 +++
> >> 6 files changed, 88 insertions(+), 1 deletion(-)
> >>
> >> diff --git a/doc/guides/eventdevs/features/default.ini b/doc/guides/eventdevs/features/default.ini
> >> index 2ea233463a..00360f60c6 100644
> >> --- a/doc/guides/eventdevs/features/default.ini
> >> +++ b/doc/guides/eventdevs/features/default.ini
> >> @@ -17,6 +17,7 @@ runtime_port_link =
> >> multiple_queue_port =
> >> carry_flow_id =
> >> maintenance_free =
> >> +runtime_queue_attr =
> >>
> >> ;
> >> ; Features of a default Ethernet Rx adapter.
> >> diff --git a/doc/guides/rel_notes/release_22_07.rst b/doc/guides/rel_notes/release_22_07.rst
> >> index 88d6e96cc1..a7a912d665 100644
> >> --- a/doc/guides/rel_notes/release_22_07.rst
> >> +++ b/doc/guides/rel_notes/release_22_07.rst
> >> @@ -65,6 +65,11 @@ New Features
> >> * Added support for promiscuous mode on Windows.
> >> * Added support for MTU on Windows.
> >>
> >> +* **Added support for setting queue attributes at runtime in eventdev.**
> >> +
> >> + Added new API ``rte_event_queue_attr_set()``, to set event queue attributes
> >> + at runtime.
> >> +
> >>
> >> Removed Items
> >> -------------
> >> diff --git a/lib/eventdev/eventdev_pmd.h b/lib/eventdev/eventdev_pmd.h
> >> index ce469d47a6..3b85d9f7a5 100644
> >> --- a/lib/eventdev/eventdev_pmd.h
> >> +++ b/lib/eventdev/eventdev_pmd.h
> >> @@ -341,6 +341,26 @@ typedef int (*eventdev_queue_setup_t)(struct rte_eventdev *dev,
> >> typedef void (*eventdev_queue_release_t)(struct rte_eventdev *dev,
> >> uint8_t queue_id);
> >>
> >> +/**
> >> + * Set an event queue attribute at runtime.
> >> + *
> >> + * @param dev
> >> + * Event device pointer
> >> + * @param queue_id
> >> + * Event queue index
> >> + * @param attr_id
> >> + * Event queue attribute id
> >> + * @param attr_value
> >> + * Event queue attribute value
> >> + *
> >> + * @return
> >> + * - 0: Success.
> >> + * - <0: Error code on failure.
> >> + */
> >> +typedef int (*eventdev_queue_attr_set_t)(struct rte_eventdev *dev,
> >> + uint8_t queue_id, uint32_t attr_id,
> >> + uint64_t attr_value);
> >> +
> >> /**
> >> * Retrieve the default event port configuration.
> >> *
> >> @@ -1211,6 +1231,8 @@ struct eventdev_ops {
> >> /**< Set up an event queue. */
> >> eventdev_queue_release_t queue_release;
> >> /**< Release an event queue. */
> >> + eventdev_queue_attr_set_t queue_attr_set;
> >> + /**< Set an event queue attribute. */
> >>
> >> eventdev_port_default_conf_get_t port_def_conf;
> >> /**< Get default port configuration. */
> >> diff --git a/lib/eventdev/rte_eventdev.c b/lib/eventdev/rte_eventdev.c
> >> index 532a253553..a31e99be02 100644
> >> --- a/lib/eventdev/rte_eventdev.c
> >> +++ b/lib/eventdev/rte_eventdev.c
> >> @@ -844,6 +844,32 @@ rte_event_queue_attr_get(uint8_t dev_id, uint8_t queue_id, uint32_t attr_id,
> >> return 0;
> >> }
> >>
> >> +int
> >> +rte_event_queue_attr_set(uint8_t dev_id, uint8_t queue_id, uint32_t attr_id,
> >> + uint64_t attr_value)
> >> +{
> >> + struct rte_eventdev *dev;
> >> +
> >> + RTE_EVENTDEV_VALID_DEVID_OR_ERR_RET(dev_id, -EINVAL);
> >> + dev = &rte_eventdevs[dev_id];
> >> + if (!is_valid_queue(dev, queue_id)) {
> >> + RTE_EDEV_LOG_ERR("Invalid queue_id=%" PRIu8, queue_id);
> >> + return -EINVAL;
> >> + }
> >> +
> >> + if (!(dev->data->event_dev_cap &
> >> + RTE_EVENT_DEV_CAP_RUNTIME_QUEUE_ATTR)) {
> >> + RTE_EDEV_LOG_ERR(
> >> + "Device %" PRIu8 "does not support changing queue attributes at runtime",
> >> + dev_id);
> >> + return -ENOTSUP;
> >> + }
> >> +
> >> + RTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->queue_attr_set, -ENOTSUP);
> >> + return (*dev->dev_ops->queue_attr_set)(dev, queue_id, attr_id,
> >> + attr_value);
> >> +}
> >> +
> >> int
> >> rte_event_port_link(uint8_t dev_id, uint8_t port_id,
> >> const uint8_t queues[], const uint8_t priorities[],
> >> diff --git a/lib/eventdev/rte_eventdev.h b/lib/eventdev/rte_eventdev.h
> >> index 42a5660169..a79b1397eb 100644
> >> --- a/lib/eventdev/rte_eventdev.h
> >> +++ b/lib/eventdev/rte_eventdev.h
> >> @@ -225,7 +225,7 @@ struct rte_event;
> >> /**< Event scheduling prioritization is based on the priority associated with
> >> * each event queue.
> >> *
> >> - * @see rte_event_queue_setup()
> >> + * @see rte_event_queue_setup(), rte_event_queue_attr_set()
> >> */
> >> #define RTE_EVENT_DEV_CAP_EVENT_QOS (1ULL << 1)
> >> /**< Event scheduling prioritization is based on the priority associated with
> >> @@ -307,6 +307,13 @@ struct rte_event;
> >> * global pool, or process signaling related to load balancing.
> >> */
> >>
> >> +#define RTE_EVENT_DEV_CAP_RUNTIME_QUEUE_ATTR (1ULL << 11)
> >> +/**< Event device is capable of changing the queue attributes at runtime i.e
> >> + * after rte_event_queue_setup() or rte_event_start() call sequence. If this
> >> + * flag is not set, eventdev queue attributes can only be configured during
> >> + * rte_event_queue_setup().
> >> + */
> >> +
> >> /* Event device priority levels */
> >> #define RTE_EVENT_DEV_PRIORITY_HIGHEST 0
> >> /**< Highest priority expressed across eventdev subsystem
> >> @@ -702,6 +709,29 @@ int
> >> rte_event_queue_attr_get(uint8_t dev_id, uint8_t queue_id, uint32_t attr_id,
> >> uint32_t *attr_value);
> >>
> >> +/**
> >> + * Set an event queue attribute.
> >> + *
> >> + * @param dev_id
> >> + * Eventdev id
> >> + * @param queue_id
> >> + * Eventdev queue id
> >> + * @param attr_id
> >> + * The attribute ID to set
> >> + * @param attr_value
> >> + * The attribute value to set
> >> + *
> >> + * @return
> >> + * - 0: Successfully set attribute.
> >> + * - -EINVAL: invalid device, queue or attr_id.
> >> + * - -ENOTSUP: device does not support setting the event attribute.
> >> + * - <0: failed to set event queue attribute
> >> + */
> >> +__rte_experimental
> >> +int
> >> +rte_event_queue_attr_set(uint8_t dev_id, uint8_t queue_id, uint32_t attr_id,
> >> + uint64_t attr_value);
> >> +
> >> /* Event port specific APIs */
> >>
> >> /* Event port configuration bitmap flags */
> >> diff --git a/lib/eventdev/version.map b/lib/eventdev/version.map
> >> index cd5dada07f..c581b75c18 100644
> >> --- a/lib/eventdev/version.map
> >> +++ b/lib/eventdev/version.map
> >> @@ -108,6 +108,9 @@ EXPERIMENTAL {
> >>
> >> # added in 22.03
> >> rte_event_eth_rx_adapter_event_port_get;
> >> +
> >> + # added in 22.07
> >> + rte_event_queue_attr_set;
> >> };
> >>
> >> INTERNAL {
> >> --
> >> 2.25.1
> >>
>
Shijith Thotton <sthotton@marvell.com> writes:
> Added a new eventdev API rte_event_queue_attr_set(), to set event queue
> attributes at runtime from the values set during initialization using
> rte_event_queue_setup(). PMD's supporting this feature should expose the
> capability RTE_EVENT_DEV_CAP_RUNTIME_QUEUE_ATTR.
>
> Signed-off-by: Shijith Thotton <sthotton@marvell.com>
> Acked-by: Jerin Jacob <jerinj@marvell.com>
> ---
> doc/guides/eventdevs/features/default.ini | 1 +
> doc/guides/rel_notes/release_22_07.rst | 5 ++++
> lib/eventdev/eventdev_pmd.h | 22 ++++++++++++++++
> lib/eventdev/rte_eventdev.c | 26 ++++++++++++++++++
> lib/eventdev/rte_eventdev.h | 32 ++++++++++++++++++++++-
> lib/eventdev/version.map | 3 +++
> 6 files changed, 88 insertions(+), 1 deletion(-)
>
Acked-by: Ray Kinsella <mdr@ashroe.eu>
@@ -17,6 +17,7 @@ runtime_port_link =
multiple_queue_port =
carry_flow_id =
maintenance_free =
+runtime_queue_attr =
;
; Features of a default Ethernet Rx adapter.
@@ -65,6 +65,11 @@ New Features
* Added support for promiscuous mode on Windows.
* Added support for MTU on Windows.
+* **Added support for setting queue attributes at runtime in eventdev.**
+
+ Added new API ``rte_event_queue_attr_set()``, to set event queue attributes
+ at runtime.
+
Removed Items
-------------
@@ -341,6 +341,26 @@ typedef int (*eventdev_queue_setup_t)(struct rte_eventdev *dev,
typedef void (*eventdev_queue_release_t)(struct rte_eventdev *dev,
uint8_t queue_id);
+/**
+ * Set an event queue attribute at runtime.
+ *
+ * @param dev
+ * Event device pointer
+ * @param queue_id
+ * Event queue index
+ * @param attr_id
+ * Event queue attribute id
+ * @param attr_value
+ * Event queue attribute value
+ *
+ * @return
+ * - 0: Success.
+ * - <0: Error code on failure.
+ */
+typedef int (*eventdev_queue_attr_set_t)(struct rte_eventdev *dev,
+ uint8_t queue_id, uint32_t attr_id,
+ uint64_t attr_value);
+
/**
* Retrieve the default event port configuration.
*
@@ -1211,6 +1231,8 @@ struct eventdev_ops {
/**< Set up an event queue. */
eventdev_queue_release_t queue_release;
/**< Release an event queue. */
+ eventdev_queue_attr_set_t queue_attr_set;
+ /**< Set an event queue attribute. */
eventdev_port_default_conf_get_t port_def_conf;
/**< Get default port configuration. */
@@ -844,6 +844,32 @@ rte_event_queue_attr_get(uint8_t dev_id, uint8_t queue_id, uint32_t attr_id,
return 0;
}
+int
+rte_event_queue_attr_set(uint8_t dev_id, uint8_t queue_id, uint32_t attr_id,
+ uint64_t attr_value)
+{
+ struct rte_eventdev *dev;
+
+ RTE_EVENTDEV_VALID_DEVID_OR_ERR_RET(dev_id, -EINVAL);
+ dev = &rte_eventdevs[dev_id];
+ if (!is_valid_queue(dev, queue_id)) {
+ RTE_EDEV_LOG_ERR("Invalid queue_id=%" PRIu8, queue_id);
+ return -EINVAL;
+ }
+
+ if (!(dev->data->event_dev_cap &
+ RTE_EVENT_DEV_CAP_RUNTIME_QUEUE_ATTR)) {
+ RTE_EDEV_LOG_ERR(
+ "Device %" PRIu8 "does not support changing queue attributes at runtime",
+ dev_id);
+ return -ENOTSUP;
+ }
+
+ RTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->queue_attr_set, -ENOTSUP);
+ return (*dev->dev_ops->queue_attr_set)(dev, queue_id, attr_id,
+ attr_value);
+}
+
int
rte_event_port_link(uint8_t dev_id, uint8_t port_id,
const uint8_t queues[], const uint8_t priorities[],
@@ -225,7 +225,7 @@ struct rte_event;
/**< Event scheduling prioritization is based on the priority associated with
* each event queue.
*
- * @see rte_event_queue_setup()
+ * @see rte_event_queue_setup(), rte_event_queue_attr_set()
*/
#define RTE_EVENT_DEV_CAP_EVENT_QOS (1ULL << 1)
/**< Event scheduling prioritization is based on the priority associated with
@@ -307,6 +307,13 @@ struct rte_event;
* global pool, or process signaling related to load balancing.
*/
+#define RTE_EVENT_DEV_CAP_RUNTIME_QUEUE_ATTR (1ULL << 11)
+/**< Event device is capable of changing the queue attributes at runtime i.e
+ * after rte_event_queue_setup() or rte_event_start() call sequence. If this
+ * flag is not set, eventdev queue attributes can only be configured during
+ * rte_event_queue_setup().
+ */
+
/* Event device priority levels */
#define RTE_EVENT_DEV_PRIORITY_HIGHEST 0
/**< Highest priority expressed across eventdev subsystem
@@ -702,6 +709,29 @@ int
rte_event_queue_attr_get(uint8_t dev_id, uint8_t queue_id, uint32_t attr_id,
uint32_t *attr_value);
+/**
+ * Set an event queue attribute.
+ *
+ * @param dev_id
+ * Eventdev id
+ * @param queue_id
+ * Eventdev queue id
+ * @param attr_id
+ * The attribute ID to set
+ * @param attr_value
+ * The attribute value to set
+ *
+ * @return
+ * - 0: Successfully set attribute.
+ * - -EINVAL: invalid device, queue or attr_id.
+ * - -ENOTSUP: device does not support setting the event attribute.
+ * - <0: failed to set event queue attribute
+ */
+__rte_experimental
+int
+rte_event_queue_attr_set(uint8_t dev_id, uint8_t queue_id, uint32_t attr_id,
+ uint64_t attr_value);
+
/* Event port specific APIs */
/* Event port configuration bitmap flags */
@@ -108,6 +108,9 @@ EXPERIMENTAL {
# added in 22.03
rte_event_eth_rx_adapter_event_port_get;
+
+ # added in 22.07
+ rte_event_queue_attr_set;
};
INTERNAL {