[PATCH v3 1/5] eventdev: support to set queue attributes at runtime

Shijith Thotton sthotton at marvell.com
Mon May 16 05:57:58 CEST 2022


>> 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 at marvell.com>
>> Acked-by: Jerin Jacob <jerinj at 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               | 33 ++++++++++++++++++++++-
>>   lib/eventdev/version.map                  |  3 +++
>>   6 files changed, 89 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..c1163ee8ec 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
>
>I thought the point of this new interface was to allow setting queue
>attributes when the event device was running?
>
>It would be useful for the caller to be able to distinguish between
>"busy, but please try again later", and "busy, forever". Maybe the
>latter is what's meant here? In that case, what is the difference with
>EBUSY and ENOTSUP?
>

As there are multiple queue attributes, not all attributes could be supported by
all PMDs. ENOTSUP can be returned for unsupported attributes.

>> + *   - <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 {



More information about the dev mailing list