Message ID | 159a14ece2480a3704ee34ee0d81dda331c16957.1648549553.git.sthotton@marvell.com (mailing list archive) |
---|---|
State | Superseded, archived |
Delegated to: | Jerin Jacob |
Headers | show |
Series | Extend and set event queue attributes at runtime | expand |
Context | Check | Description |
---|---|---|
ci/checkpatch | success | coding style OK |
> -----Original Message----- > From: Shijith Thotton <sthotton@marvell.com> > Sent: Tuesday, March 29, 2022 2:11 PM > To: dev@dpdk.org; jerinj@marvell.com > Cc: Shijith Thotton <sthotton@marvell.com>; pbhagavatula@marvell.com; Ray > Kinsella <mdr@ashroe.eu> > Subject: [PATCH 1/6] eventdev: support to set queue attributes at runtime <snip> > +/** > + * 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, > + uint32_t attr_value); Is using a uint64_t a better type for attr_value? Given there might be more in future, limiting to 32-bits now may cause headaches later, and uint64_t doesn't cost extra? I think 32-bits of attr_id is enough :) Same comment on the _get() API in patch 2/6, a uint64_t * would be a better fit there in my opinion. <snip>
On 2022-03-29 15:11, Shijith Thotton 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> > --- > doc/guides/eventdevs/features/default.ini | 1 + > lib/eventdev/eventdev_pmd.h | 22 +++++++++++++ > lib/eventdev/rte_eventdev.c | 31 ++++++++++++++++++ > lib/eventdev/rte_eventdev.h | 38 ++++++++++++++++++++++- > lib/eventdev/version.map | 3 ++ > 5 files changed, 94 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..6182749503 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, > + uint32_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..13c8af877e 100644 > --- a/lib/eventdev/rte_eventdev.c > +++ b/lib/eventdev/rte_eventdev.c > @@ -844,6 +844,37 @@ 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, > + uint32_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 (attr_id > RTE_EVENT_QUEUE_ATTR_MAX) { > + RTE_EDEV_LOG_ERR("Invalid attribute ID %" PRIu8, attr_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..19710cd0c5 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 > @@ -678,6 +685,11 @@ rte_event_queue_setup(uint8_t dev_id, uint8_t queue_id, > */ > #define RTE_EVENT_QUEUE_ATTR_SCHEDULE_TYPE 4 > > +/** > + * Maximum supported attribute ID. > + */ > +#define RTE_EVENT_QUEUE_ATTR_MAX RTE_EVENT_QUEUE_ATTR_SCHEDULE_TYPE > + This #define will assure that every new attribute breaks the ABI. Is that intentional? > /** > * Get an attribute from a queue. > * > @@ -702,6 +714,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, > + uint32_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 {
><snip> > >> +/** >> + * 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, >> + uint32_t attr_value); > >Is using a uint64_t a better type for attr_value? Given there might be more in >future, >limiting to 32-bits now may cause headaches later, and uint64_t doesn't cost >extra? > >I think 32-bits of attr_id is enough :) > >Same comment on the _get() API in patch 2/6, a uint64_t * would be a better fit >there in my opinion. > ><snip> Changing size of attr_value will an ABI break. Can we wait till a need arises ?
> -----Original Message----- > From: Shijith Thotton <sthotton@marvell.com> > Sent: Monday, April 4, 2022 10:36 AM > To: Van Haaren, Harry <harry.van.haaren@intel.com>; dev@dpdk.org; Jerin Jacob > Kollanukkaran <jerinj@marvell.com> > Cc: Pavan Nikhilesh Bhagavatula <pbhagavatula@marvell.com>; Ray Kinsella > <mdr@ashroe.eu> > Subject: RE: [PATCH 1/6] eventdev: support to set queue attributes at runtime > > ><snip> > > > >> +/** > >> + * 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, > >> + uint32_t attr_value); > > > >Is using a uint64_t a better type for attr_value? Given there might be more in > >future, > >limiting to 32-bits now may cause headaches later, and uint64_t doesn't cost > >extra? > > > >I think 32-bits of attr_id is enough :) > > > >Same comment on the _get() API in patch 2/6, a uint64_t * would be a better fit > >there in my opinion. > > > ><snip> > > Changing size of attr_value will an ABI break. Can we wait till a need arises ? Ah, I forgot that the _get() function is already upstream in DPDK today. Its actually an API *and* ABI break, which is worse, as user code would have to change (not just a re-compile against the newer DPDK version...). Any application attempting source-compatibility with 21.11 and 22.11 would have to #ifdef the parameter, switching uint32_t* and uint64_t*... or use some magic void* hacks. Yes I suppose that waiting until a u64 is required for a real-world use-case is probably better than breaking existing users code today (or in next ABI breaking release) with the intent of getting to "perfect" API/ABIs... Suggest to use a u64 for _set() to avoid getting into this same situation again, but leave _get() as is, until it is required to change for a real use-case?
>> 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> >> --- >> doc/guides/eventdevs/features/default.ini | 1 + >> lib/eventdev/eventdev_pmd.h | 22 +++++++++++++ >> lib/eventdev/rte_eventdev.c | 31 ++++++++++++++++++ >> lib/eventdev/rte_eventdev.h | 38 ++++++++++++++++++++++- >> lib/eventdev/version.map | 3 ++ >> 5 files changed, 94 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..6182749503 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, >> + uint32_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..13c8af877e 100644 >> --- a/lib/eventdev/rte_eventdev.c >> +++ b/lib/eventdev/rte_eventdev.c >> @@ -844,6 +844,37 @@ 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, >> + uint32_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 (attr_id > RTE_EVENT_QUEUE_ATTR_MAX) { >> + RTE_EDEV_LOG_ERR("Invalid attribute ID %" PRIu8, attr_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..19710cd0c5 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 >> @@ -678,6 +685,11 @@ rte_event_queue_setup(uint8_t dev_id, uint8_t >queue_id, >> */ >> #define RTE_EVENT_QUEUE_ATTR_SCHEDULE_TYPE 4 >> >> +/** >> + * Maximum supported attribute ID. >> + */ >> +#define RTE_EVENT_QUEUE_ATTR_MAX >RTE_EVENT_QUEUE_ATTR_SCHEDULE_TYPE >> + > >This #define will assure that every new attribute breaks the ABI. Is >that intentional? > Will remove . >> /** >> * Get an attribute from a queue. >> * >> @@ -702,6 +714,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, >> + uint32_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 {
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..6182749503 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, + uint32_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..13c8af877e 100644 --- a/lib/eventdev/rte_eventdev.c +++ b/lib/eventdev/rte_eventdev.c @@ -844,6 +844,37 @@ 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, + uint32_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 (attr_id > RTE_EVENT_QUEUE_ATTR_MAX) { + RTE_EDEV_LOG_ERR("Invalid attribute ID %" PRIu8, attr_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..19710cd0c5 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 @@ -678,6 +685,11 @@ rte_event_queue_setup(uint8_t dev_id, uint8_t queue_id, */ #define RTE_EVENT_QUEUE_ATTR_SCHEDULE_TYPE 4 +/** + * Maximum supported attribute ID. + */ +#define RTE_EVENT_QUEUE_ATTR_MAX RTE_EVENT_QUEUE_ATTR_SCHEDULE_TYPE + /** * Get an attribute from a queue. * @@ -702,6 +714,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, + uint32_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 {
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> --- doc/guides/eventdevs/features/default.ini | 1 + lib/eventdev/eventdev_pmd.h | 22 +++++++++++++ lib/eventdev/rte_eventdev.c | 31 ++++++++++++++++++ lib/eventdev/rte_eventdev.h | 38 ++++++++++++++++++++++- lib/eventdev/version.map | 3 ++ 5 files changed, 94 insertions(+), 1 deletion(-)