This commit adds checks to verify the device ID is valid
to the following functions. Given that they are non-datapath,
these checks are always performed.

This commit also updates the event/octeontx test-cases to
have the correct signed-ness, as the API has changes this
change is required in order to compile.

Suggested-by: Jesse Bruni <jesse.br...@intel.com>
Signed-off-by: Harry van Haaren <harry.van.haa...@intel.com>

---
 lib/librte_eventdev/rte_eventdev.c | 36 +++++++++++++++++++++++++-----------
 lib/librte_eventdev/rte_eventdev.h | 36 ++++++++++++++++++------------------
 test/test/test_eventdev_octeontx.c | 32 +++++++++++++++++++-------------
 3 files changed, 62 insertions(+), 42 deletions(-)

diff --git a/lib/librte_eventdev/rte_eventdev.c 
b/lib/librte_eventdev/rte_eventdev.c
index bbb3805..e71f20c 100644
--- a/lib/librte_eventdev/rte_eventdev.c
+++ b/lib/librte_eventdev/rte_eventdev.c
@@ -609,21 +609,26 @@ rte_event_queue_setup(uint8_t dev_id, uint8_t queue_id,
        return (*dev->dev_ops->queue_setup)(dev, queue_id, queue_conf);
 }
 
-uint8_t
+int16_t
 rte_event_queue_count(uint8_t dev_id)
 {
        struct rte_eventdev *dev;
+       RTE_EVENTDEV_VALID_DEVID_OR_ERR_RET(dev_id, -EINVAL);
 
        dev = &rte_eventdevs[dev_id];
        return dev->data->nb_queues;
 }
 
-uint8_t
+int16_t
 rte_event_queue_priority(uint8_t dev_id, uint8_t queue_id)
 {
-       struct rte_eventdev *dev;
+       struct rte_eventdev *dev = &rte_eventdevs[dev_id];
+       RTE_EVENTDEV_VALID_DEVID_OR_ERR_RET(dev_id, -EINVAL);
+       if (!is_valid_queue(dev, queue_id)) {
+               RTE_EDEV_LOG_ERR("Invalid queue_id=%" PRIu8, queue_id);
+               return -EINVAL;
+       }
 
-       dev = &rte_eventdevs[dev_id];
        if (dev->data->event_dev_cap & RTE_EVENT_DEV_CAP_QUEUE_QOS)
                return dev->data->queues_prio[queue_id];
        else
@@ -743,28 +748,37 @@ rte_event_port_setup(uint8_t dev_id, uint8_t port_id,
        return 0;
 }
 
-uint8_t
+int16_t
 rte_event_port_dequeue_depth(uint8_t dev_id, uint8_t port_id)
 {
-       struct rte_eventdev *dev;
+       RTE_EVENTDEV_VALID_DEVID_OR_ERR_RET(dev_id, -EINVAL);
+       struct rte_eventdev *dev = &rte_eventdevs[dev_id];
+       if (!is_valid_port(dev, port_id)) {
+               RTE_EDEV_LOG_ERR("Invalid port_id=%" PRIu8, port_id);
+               return -EINVAL;
+       }
 
-       dev = &rte_eventdevs[dev_id];
        return dev->data->ports_dequeue_depth[port_id];
 }
 
-uint8_t
+int16_t
 rte_event_port_enqueue_depth(uint8_t dev_id, uint8_t port_id)
 {
-       struct rte_eventdev *dev;
+       RTE_EVENTDEV_VALID_DEVID_OR_ERR_RET(dev_id, -EINVAL);
+       struct rte_eventdev *dev = &rte_eventdevs[dev_id];
+       if (!is_valid_port(dev, port_id)) {
+               RTE_EDEV_LOG_ERR("Invalid port_id=%" PRIu8, port_id);
+               return -EINVAL;
+       }
 
-       dev = &rte_eventdevs[dev_id];
        return dev->data->ports_enqueue_depth[port_id];
 }
 
-uint8_t
+int16_t
 rte_event_port_count(uint8_t dev_id)
 {
        struct rte_eventdev *dev;
+       RTE_EVENTDEV_VALID_DEVID_OR_ERR_RET(dev_id, -EINVAL);
 
        dev = &rte_eventdevs[dev_id];
        return dev->data->nb_ports;
diff --git a/lib/librte_eventdev/rte_eventdev.h 
b/lib/librte_eventdev/rte_eventdev.h
index 128bc52..204ff82 100644
--- a/lib/librte_eventdev/rte_eventdev.h
+++ b/lib/librte_eventdev/rte_eventdev.h
@@ -611,10 +611,10 @@ rte_event_queue_setup(uint8_t dev_id, uint8_t queue_id,
  *
  * @param dev_id
  *   Event device identifier.
- * @return
- *   - The number of configured event queues
+ * @retval Positive The number of configured event queues
+ * @retval -EINVAL Invalid device id
  */
-uint8_t
+int16_t
 rte_event_queue_count(uint8_t dev_id);
 
 /**
@@ -624,13 +624,13 @@ rte_event_queue_count(uint8_t dev_id);
  *   Event device identifier.
  * @param queue_id
  *   Event queue identifier.
- * @return
- *   - If the device has RTE_EVENT_DEV_CAP_QUEUE_QOS capability then the
- *    configured priority of the event queue in
- *    [RTE_EVENT_DEV_PRIORITY_HIGHEST, RTE_EVENT_DEV_PRIORITY_LOWEST] range
- *    else the value RTE_EVENT_DEV_PRIORITY_NORMAL
+ * @retval Positive If the device has RTE_EVENT_DEV_CAP_QUEUE_QOS capability
+ *         then the configured priority of the event queue in
+ *         [RTE_EVENT_DEV_PRIORITY_HIGHEST, RTE_EVENT_DEV_PRIORITY_LOWEST]
+ *         range else the value RTE_EVENT_DEV_PRIORITY_NORMAL
+ * @retval -EINVAL Invalid device id or queue id
  */
-uint8_t
+int16_t
 rte_event_queue_priority(uint8_t dev_id, uint8_t queue_id);
 
 /* Event port specific APIs */
@@ -722,12 +722,12 @@ rte_event_port_setup(uint8_t dev_id, uint8_t port_id,
  *   Event device identifier.
  * @param port_id
  *   Event port identifier.
- * @return
- *   - The number of configured dequeue queue depth
+ * @retval Positive The dequeue queue depth
+ * @retval -EINVAL Invalid device ID or port ID
  *
  * @see rte_event_dequeue_burst()
  */
-uint8_t
+int16_t
 rte_event_port_dequeue_depth(uint8_t dev_id, uint8_t port_id);
 
 /**
@@ -738,12 +738,12 @@ rte_event_port_dequeue_depth(uint8_t dev_id, uint8_t 
port_id);
  *   Event device identifier.
  * @param port_id
  *   Event port identifier.
- * @return
- *   - The number of configured enqueue queue depth
+ * @retval Positive The enqueue queue depth
+ * @retval -EINVAL Invalid device ID or port ID
  *
  * @see rte_event_enqueue_burst()
  */
-uint8_t
+int16_t
 rte_event_port_enqueue_depth(uint8_t dev_id, uint8_t port_id);
 
 /**
@@ -751,10 +751,10 @@ rte_event_port_enqueue_depth(uint8_t dev_id, uint8_t 
port_id);
  *
  * @param dev_id
  *   Event device identifier.
- * @return
- *   - The number of configured ports
+ * @retval Positive The number of configured ports
+ * @retval -EINVAL Invalid device id
  */
-uint8_t
+int16_t
 rte_event_port_count(uint8_t dev_id);
 
 /**
diff --git a/test/test/test_eventdev_octeontx.c 
b/test/test/test_eventdev_octeontx.c
index 774d030..6794f1f 100644
--- a/test/test/test_eventdev_octeontx.c
+++ b/test/test/test_eventdev_octeontx.c
@@ -591,7 +591,7 @@ wait_workers_to_join(int lcore, const rte_atomic32_t *count)
 static inline int
 launch_workers_and_wait(int (*master_worker)(void *),
                        int (*slave_workers)(void *), uint32_t total_events,
-                       uint8_t nb_workers, uint8_t sched_type)
+                       int16_t nb_workers, uint8_t sched_type)
 {
        uint8_t port = 0;
        int w_lcore;
@@ -651,14 +651,15 @@ static int
 test_multi_queue_enq_multi_port_deq(void)
 {
        const unsigned int total_events = MAX_EVENTS;
-       uint8_t nr_ports;
+       int16_t nr_ports;
        int ret;
 
        ret = generate_random_events(total_events);
        if (ret)
                return TEST_FAILED;
 
-       nr_ports = RTE_MIN(rte_event_port_count(evdev), rte_lcore_count() - 1);
+       nr_ports = RTE_MIN(rte_event_port_count(evdev),
+                       (int)rte_lcore_count() - 1);
 
        if (!nr_ports) {
                printf("%s: Not enough ports=%d or workers=%d\n", __func__,
@@ -698,7 +699,7 @@ test_queue_to_port_single_link(void)
        }
 
        nr_links = RTE_MIN(rte_event_port_count(evdev),
-                               rte_event_queue_count(evdev));
+                               (int)rte_event_queue_count(evdev));
        const unsigned int total_events = MAX_EVENTS / nr_links;
 
        /* Link queue x to port x and inject events to queue x through port x */
@@ -750,7 +751,8 @@ static int
 test_queue_to_port_multi_link(void)
 {
        int ret, port0_events = 0, port1_events = 0;
-       uint8_t nr_queues, nr_ports, queue, port;
+       int16_t nr_queues, nr_ports, port;
+       uint8_t queue;
 
        nr_queues = rte_event_queue_count(evdev);
        nr_ports = rte_event_port_count(evdev);
@@ -854,10 +856,11 @@ test_multiport_flow_sched_type_test(uint8_t in_sched_type,
                        uint8_t out_sched_type)
 {
        const unsigned int total_events = MAX_EVENTS;
-       uint8_t nr_ports;
+       int16_t nr_ports;
        int ret;
 
-       nr_ports = RTE_MIN(rte_event_port_count(evdev), rte_lcore_count() - 1);
+       nr_ports = RTE_MIN(rte_event_port_count(evdev),
+                       (int)rte_lcore_count() - 1);
 
        if (!nr_ports) {
                printf("%s: Not enough ports=%d or workers=%d\n", __func__,
@@ -1007,10 +1010,11 @@ test_multiport_queue_sched_type_test(uint8_t 
in_sched_type,
                        uint8_t out_sched_type)
 {
        const unsigned int total_events = MAX_EVENTS;
-       uint8_t nr_ports;
+       int16_t nr_ports;
        int ret;
 
-       nr_ports = RTE_MIN(rte_event_port_count(evdev), rte_lcore_count() - 1);
+       nr_ports = RTE_MIN(rte_event_port_count(evdev),
+                       (int)rte_lcore_count() - 1);
 
        if (rte_event_queue_count(evdev) < 2 ||  !nr_ports) {
                printf("%s: Not enough queues=%d ports=%d or workers=%d\n",
@@ -1142,10 +1146,11 @@ 
worker_flow_based_pipeline_max_stages_rand_sched_type(void *arg)
 static int
 launch_multi_port_max_stages_random_sched_type(int (*fn)(void *))
 {
-       uint8_t nr_ports;
+       int16_t nr_ports;
        int ret;
 
-       nr_ports = RTE_MIN(rte_event_port_count(evdev), rte_lcore_count() - 1);
+       nr_ports = RTE_MIN(rte_event_port_count(evdev),
+                       (int)rte_lcore_count() - 1);
 
        if (!nr_ports) {
                printf("%s: Not enough ports=%d or workers=%d\n", __func__,
@@ -1288,9 +1293,10 @@ worker_ordered_flow_producer(void *arg)
 static inline int
 test_producer_consumer_ingress_order_test(int (*fn)(void *))
 {
-       uint8_t nr_ports;
+       int16_t nr_ports;
 
-       nr_ports = RTE_MIN(rte_event_port_count(evdev), rte_lcore_count() - 1);
+       nr_ports = RTE_MIN(rte_event_port_count(evdev),
+                       (int)rte_lcore_count() - 1);
 
        if (rte_lcore_count() < 3 || nr_ports < 2) {
                printf("### Not enough cores for %s test.\n", __func__);
-- 
2.7.4

Reply via email to