eventdev: support setting queue attributes at runtime
authorShijith Thotton <sthotton@marvell.com>
Mon, 16 May 2022 17:35:47 +0000 (23:05 +0530)
committerJerin Jacob <jerinj@marvell.com>
Tue, 17 May 2022 14:43:37 +0000 (16:43 +0200)
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
doc/guides/rel_notes/release_22_07.rst
lib/eventdev/eventdev_pmd.h
lib/eventdev/rte_eventdev.c
lib/eventdev/rte_eventdev.h
lib/eventdev/version.map

index 2ea2334..00360f6 100644 (file)
@@ -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.
index 3d86732..bd517a6 100644 (file)
@@ -92,6 +92,11 @@ New Features
   to quiesce any lcore-specific resources consumed by the event port,
   when the lcore is no more associated with an event port.
 
+* **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
 -------------
index 6173f22..8879e43 100644 (file)
@@ -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.
  *
@@ -1228,6 +1248,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. */
index 0250e57..1190b45 100644 (file)
@@ -863,6 +863,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[],
index 4454eae..4713361 100644 (file)
@@ -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 */
index 1907093..886e2ec 100644 (file)
@@ -111,6 +111,7 @@ EXPERIMENTAL {
 
        # added in 22.07
        rte_event_port_quiesce;
+       rte_event_queue_attr_set;
 };
 
 INTERNAL {