On Tue, Apr 5, 2022 at 11:12 AM Shijith Thotton <sthot...@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 <sthot...@marvell.com>
Please update release notes. With the above change, Acked-by: Jerin Jacob <jer...@marvell.com> > --- > doc/guides/eventdevs/features/default.ini | 1 + > lib/eventdev/eventdev_pmd.h | 22 +++++++++++++++ > lib/eventdev/rte_eventdev.c | 26 ++++++++++++++++++ > lib/eventdev/rte_eventdev.h | 33 ++++++++++++++++++++++- > lib/eventdev/version.map | 3 +++ > 5 files changed, 84 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/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..16e9d5fb5b 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,30 @@ 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 event attribute. > + * - -EBUSY: device is in running state > + * - <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 >