- use odp_config_queues() to get number of queues and int cycle
  iterrator. That makes it more easy to reuse that function for
  other platfroms.;
- remove declaring variables to invalid at the bottom and check for
  them down the code;
- make code more easy to read;

Signed-off-by: Maxim Uvarov <[email protected]>
---
 platform/linux-generic/odp_queue.c | 36 +++++++++++++++---------------------
 1 file changed, 15 insertions(+), 21 deletions(-)

diff --git a/platform/linux-generic/odp_queue.c 
b/platform/linux-generic/odp_queue.c
index 342ffa2..0f7fd15 100644
--- a/platform/linux-generic/odp_queue.c
+++ b/platform/linux-generic/odp_queue.c
@@ -234,10 +234,8 @@ int odp_queue_lock_count(odp_queue_t handle)
 
 odp_queue_t odp_queue_create(const char *name, const odp_queue_param_t *param)
 {
-       uint32_t i;
+       int i;
        queue_entry_t *queue;
-       odp_queue_t handle = ODP_QUEUE_INVALID;
-       odp_queue_type_t type;
        odp_queue_param_t default_param;
 
        if (param == NULL) {
@@ -245,7 +243,7 @@ odp_queue_t odp_queue_create(const char *name, const 
odp_queue_param_t *param)
                param = &default_param;
        }
 
-       for (i = 0; i < ODP_CONFIG_QUEUES; i++) {
+       for (i = 0; i < odp_config_queues(); i++) {
                queue = &queue_tbl->queue[i];
 
                if (queue->s.status != QUEUE_STATUS_FREE)
@@ -253,33 +251,29 @@ odp_queue_t odp_queue_create(const char *name, const 
odp_queue_param_t *param)
 
                LOCK(&queue->s.lock);
                if (queue->s.status == QUEUE_STATUS_FREE) {
-                       if (queue_init(queue, name, param)) {
+                       if (queue_init(queue, name, param) ||
+                           queue->s.handle == ODP_QUEUE_INVALID) {
                                UNLOCK(&queue->s.lock);
-                               return handle;
+                               return ODP_QUEUE_INVALID;
                        }
 
-                       type = queue->s.type;
-
-                       if (type == ODP_QUEUE_TYPE_SCHED)
+                       if (queue->s.type == ODP_QUEUE_TYPE_SCHED) {
                                queue->s.status = QUEUE_STATUS_NOTSCHED;
-                       else
+                               if (schedule_queue_init(queue)) {
+                                       ODP_ERR("schedule queue init failed\n");
+                                       UNLOCK(&queue->s.lock);
+                                       return ODP_QUEUE_INVALID;
+                               }
+                       } else {
                                queue->s.status = QUEUE_STATUS_READY;
-
-                       handle = queue->s.handle;
+                       }
                        UNLOCK(&queue->s.lock);
-                       break;
+                       return queue->s.handle;
                }
                UNLOCK(&queue->s.lock);
        }
 
-       if (handle != ODP_QUEUE_INVALID && type == ODP_QUEUE_TYPE_SCHED) {
-               if (schedule_queue_init(queue)) {
-                       ODP_ERR("schedule queue init failed\n");
-                       return ODP_QUEUE_INVALID;
-               }
-       }
-
-       return handle;
+       return ODP_QUEUE_INVALID;
 }
 
 void queue_destroy_finalize(queue_entry_t *queue)
-- 
2.7.1.250.gff4ea60

_______________________________________________
lng-odp mailing list
[email protected]
https://lists.linaro.org/mailman/listinfo/lng-odp

Reply via email to