Type to use is now ODP_QUEUE_TYPE_POLL or ODP_QUEUE_TYPE_SCHED
  depending on the pktio it will be associated to.
These queues behave as normal queues until they are associated to a pktio
using odp_pktio_inq_setdef and will behave as standard queues after
a call to odp_pktio_inq_remdef

Signed-off-by: Nicolas Morey-Chaisemartin <nmo...@kalray.eu>
---

Following the discussion in the call, this is a very quickly made patch that 
removes ODP_QUEUE_TYPE_PKTIN.
Unless I am missing something, there are no deep issues with this change that 
prevent it from doing it now 
(apart from probable conflicts with TM and or multiple defq series)

 example/classifier/odp_classifier.c                |  2 +-
 example/generator/odp_generator.c                  |  2 +-
 example/ipsec/odp_ipsec.c                          |  7 ++-
 example/packet/odp_pktio.c                         |  4 +-
 include/odp/api/queue.h                            |  5 ---
 .../linux-generic/include/odp/plat/queue_types.h   |  3 +-
 platform/linux-generic/odp_packet_io.c             | 50 +++++++++++++++++-----
 platform/linux-generic/odp_queue.c                 | 12 +-----
 test/performance/odp_l2fwd.c                       |  5 ++-
 test/performance/odp_pktio_perf.c                  |  3 +-
 .../classification/odp_classification_test_pmr.c   |  3 +-
 .../classification/odp_classification_tests.c      |  2 +-
 test/validation/pktio/pktio.c                      |  3 +-
 13 files changed, 63 insertions(+), 38 deletions(-)

diff --git a/example/classifier/odp_classifier.c 
b/example/classifier/odp_classifier.c
index 365c748..a1681f4 100644
--- a/example/classifier/odp_classifier.c
+++ b/example/classifier/odp_classifier.c
@@ -248,7 +248,7 @@ static odp_pktio_t create_pktio(const char *dev, odp_pool_t 
pool)
                 odp_pktio_to_u64(pktio));
        inq_name[ODP_QUEUE_NAME_LEN - 1] = '\0';
 
-       inq_def = odp_queue_create(inq_name, ODP_QUEUE_TYPE_PKTIN, &qparam);
+       inq_def = odp_queue_create(inq_name, ODP_QUEUE_TYPE_SCHED, &qparam);
        if (inq_def == ODP_QUEUE_INVALID) {
                EXAMPLE_ERR("pktio inq create failed for %s\n", dev);
                exit(EXIT_FAILURE);
diff --git a/example/generator/odp_generator.c 
b/example/generator/odp_generator.c
index 9d79f89..dcc3fc8 100644
--- a/example/generator/odp_generator.c
+++ b/example/generator/odp_generator.c
@@ -352,7 +352,7 @@ static odp_pktio_t create_pktio(const char *dev, odp_pool_t 
pool)
                 odp_pktio_to_u64(pktio));
        inq_name[ODP_QUEUE_NAME_LEN - 1] = '\0';
 
-       inq_def = odp_queue_create(inq_name, ODP_QUEUE_TYPE_PKTIN, &qparam);
+       inq_def = odp_queue_create(inq_name, ODP_QUEUE_TYPE_SCHED, &qparam);
        if (inq_def == ODP_QUEUE_INVALID)
                EXAMPLE_ABORT("Error: pktio inq create failed for %s\n", dev);
 
diff --git a/example/ipsec/odp_ipsec.c b/example/ipsec/odp_ipsec.c
index d784c31..960ad1d 100644
--- a/example/ipsec/odp_ipsec.c
+++ b/example/ipsec/odp_ipsec.c
@@ -249,7 +249,7 @@ odp_queue_t polled_odp_queue_create(const char *name,
 
        my_queue = odp_queue_create(name, my_type, NULL);
 
-       if ((ODP_QUEUE_TYPE_SCHED == type) || (ODP_QUEUE_TYPE_PKTIN == type)) {
+       if (ODP_QUEUE_TYPE_SCHED == type) {
                poll_queues[num_polled_queues++] = my_queue;
                printf("%s: adding %"PRIu64"\n", __func__,
                       odp_queue_to_u64(my_queue));
@@ -525,7 +525,10 @@ void initialize_intf(char *intf)
                 odp_pktio_to_u64(pktio));
        inq_name[ODP_QUEUE_NAME_LEN - 1] = '\0';
 
-       inq_def = queue_create(inq_name, ODP_QUEUE_TYPE_PKTIN, &qparam);
+       inq_def = queue_create(inq_name,
+                              pktio_param.in_mode == ODP_PKTIN_MODE_POLL ?
+                              ODP_QUEUE_TYPE_POLL : ODP_QUEUE_TYPE_SCHED,
+                              &qparam);
        if (ODP_QUEUE_INVALID == inq_def) {
                EXAMPLE_ERR("Error: pktio queue creation failed for %s\n",
                            intf);
diff --git a/example/packet/odp_pktio.c b/example/packet/odp_pktio.c
index 93c38f5..9419db4 100644
--- a/example/packet/odp_pktio.c
+++ b/example/packet/odp_pktio.c
@@ -152,7 +152,7 @@ static odp_pktio_t create_pktio(const char *dev, odp_pool_t 
pool, int mode)
                return pktio;
        case APPL_MODE_PKT_QUEUE:
                inq_def = odp_queue_create(inq_name,
-                                          ODP_QUEUE_TYPE_PKTIN, NULL);
+                                          ODP_QUEUE_TYPE_POLL, NULL);
                break;
        case APPL_MODE_PKT_SCHED:
                odp_queue_param_init(&qparam);
@@ -161,7 +161,7 @@ static odp_pktio_t create_pktio(const char *dev, odp_pool_t 
pool, int mode)
                qparam.sched.group = ODP_SCHED_GROUP_ALL;
 
                inq_def = odp_queue_create(inq_name,
-                                          ODP_QUEUE_TYPE_PKTIN, &qparam);
+                                          ODP_QUEUE_TYPE_SCHED, &qparam);
                break;
        default:
                EXAMPLE_ABORT("invalid mode %d\n", mode);
diff --git a/include/odp/api/queue.h b/include/odp/api/queue.h
index 3ee69fc..ac98ee7 100644
--- a/include/odp/api/queue.h
+++ b/include/odp/api/queue.h
@@ -62,11 +62,6 @@ extern "C" {
  */
 
 /**
- * @def ODP_QUEUE_TYPE_PKTIN
- * Packet input queue
- */
-
-/**
  * @def ODP_QUEUE_TYPE_PKTOUT
  * Packet output queue
  */
diff --git a/platform/linux-generic/include/odp/plat/queue_types.h 
b/platform/linux-generic/include/odp/plat/queue_types.h
index a7df155..0b8e127 100644
--- a/platform/linux-generic/include/odp/plat/queue_types.h
+++ b/platform/linux-generic/include/odp/plat/queue_types.h
@@ -38,8 +38,7 @@ typedef int odp_queue_type_t;
 
 #define ODP_QUEUE_TYPE_SCHED  0
 #define ODP_QUEUE_TYPE_POLL   1
-#define ODP_QUEUE_TYPE_PKTIN  2
-#define ODP_QUEUE_TYPE_PKTOUT 3
+#define ODP_QUEUE_TYPE_PKTOUT 2
 
 /** Get printable format of odp_queue_t */
 static inline uint64_t odp_queue_to_u64(odp_queue_t hdl)
diff --git a/platform/linux-generic/odp_packet_io.c 
b/platform/linux-generic/odp_packet_io.c
index 14fb0c5..8ba8644 100644
--- a/platform/linux-generic/odp_packet_io.c
+++ b/platform/linux-generic/odp_packet_io.c
@@ -427,7 +427,19 @@ int odp_pktio_inq_setdef(odp_pktio_t id, odp_queue_t queue)
 
        qentry = queue_to_qentry(queue);
 
-       if (qentry->s.type != ODP_QUEUE_TYPE_PKTIN)
+       if (qentry->s.type != ODP_QUEUE_TYPE_SCHED &&
+           qentry->s.type != ODP_QUEUE_TYPE_POLL)
+               return -1;
+
+       /* Default inq already in place */
+       if (pktio_entry->s.inq_default != ODP_QUEUE_INVALID)
+               return -1;
+
+       /* Check for queue type incompatible with pktio in mode */
+       if ((pktio_entry->s.param.in_mode == ODP_PKTIN_MODE_SCHED &&
+            qentry->s.type != ODP_QUEUE_TYPE_SCHED) ||
+           (pktio_entry->s.param.in_mode == ODP_PKTIN_MODE_POLL &&
+            qentry->s.type != ODP_QUEUE_TYPE_POLL))
                return -1;
 
        lock_entry(pktio_entry);
@@ -435,17 +447,18 @@ int odp_pktio_inq_setdef(odp_pktio_t id, odp_queue_t 
queue)
        unlock_entry(pktio_entry);
 
        switch (qentry->s.type) {
-       /* Change to ODP_QUEUE_TYPE_POLL when ODP_QUEUE_TYPE_PKTIN is removed */
-       case ODP_QUEUE_TYPE_PKTIN:
+       case ODP_QUEUE_TYPE_POLL:
                /* User polls the input queue */
                queue_lock(qentry);
                qentry->s.pktin = id;
-               queue_unlock(qentry);
+               qentry->s.enqueue = pktin_enqueue;
+               qentry->s.dequeue = pktin_dequeue;
+               qentry->s.enqueue_multi = pktin_enq_multi;
+               qentry->s.dequeue_multi = pktin_deq_multi;
 
-       /* Uncomment when ODP_QUEUE_TYPE_PKTIN is removed
+               queue_unlock(qentry);
                break;
        case ODP_QUEUE_TYPE_SCHED:
-       */
                /* Packet input through the scheduler */
                if (schedule_pktio_start(id, ODP_SCHED_PRIO_LOWEST)) {
                        ODP_ERR("Schedule pktio start failed\n");
@@ -468,14 +481,31 @@ int odp_pktio_inq_remdef(odp_pktio_t id)
        if (pktio_entry == NULL)
                return -1;
 
+       /* No default inq in place */
+       if (pktio_entry->s.inq_default == ODP_QUEUE_INVALID)
+               return -1;
+
        lock_entry(pktio_entry);
        queue = pktio_entry->s.inq_default;
        qentry = queue_to_qentry(queue);
 
-       queue_lock(qentry);
-       qentry->s.pktin = ODP_PKTIO_INVALID;
-       queue_unlock(qentry);
-
+       switch (qentry->s.type) {
+       case ODP_QUEUE_TYPE_POLL:
+               queue_lock(qentry);
+               qentry->s.pktin = ODP_PKTIO_INVALID;
+               qentry->s.enqueue = queue_enq;
+               qentry->s.dequeue = queue_deq;
+               qentry->s.enqueue_multi = queue_enq_multi;
+               qentry->s.dequeue_multi = queue_deq_multi;
+               queue_unlock(qentry);
+               break;
+       case ODP_QUEUE_TYPE_SCHED:
+               /* Next call to odp_schedule will trigger a fail in pktin_poll
+                * and then deschedule the pktio */
+               break;
+       default:
+               ODP_ABORT("Bad queue type\n");
+       }
        pktio_entry->s.inq_default = ODP_QUEUE_INVALID;
        unlock_entry(pktio_entry);
 
diff --git a/platform/linux-generic/odp_queue.c 
b/platform/linux-generic/odp_queue.c
index db3399c..b051f5b 100644
--- a/platform/linux-generic/odp_queue.c
+++ b/platform/linux-generic/odp_queue.c
@@ -106,12 +106,6 @@ static int queue_init(queue_entry_t *queue, const char 
*name,
        }
 
        switch (type) {
-       case ODP_QUEUE_TYPE_PKTIN:
-               queue->s.enqueue = pktin_enqueue;
-               queue->s.dequeue = pktin_dequeue;
-               queue->s.enqueue_multi = pktin_enq_multi;
-               queue->s.dequeue_multi = pktin_deq_multi;
-               break;
        case ODP_QUEUE_TYPE_PKTOUT:
                queue->s.enqueue = queue_pktout_enq;
                queue->s.dequeue = pktout_dequeue;
@@ -268,8 +262,7 @@ odp_queue_t odp_queue_create(const char *name, 
odp_queue_type_t type,
                                return handle;
                        }
 
-                       if (type == ODP_QUEUE_TYPE_SCHED ||
-                           type == ODP_QUEUE_TYPE_PKTIN)
+                       if (type == ODP_QUEUE_TYPE_SCHED)
                                queue->s.status = QUEUE_STATUS_NOTSCHED;
                        else
                                queue->s.status = QUEUE_STATUS_READY;
@@ -281,8 +274,7 @@ odp_queue_t odp_queue_create(const char *name, 
odp_queue_type_t type,
                UNLOCK(&queue->s.lock);
        }
 
-       if (handle != ODP_QUEUE_INVALID &&
-           (type == ODP_QUEUE_TYPE_SCHED || type == ODP_QUEUE_TYPE_PKTIN)) {
+       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;
diff --git a/test/performance/odp_l2fwd.c b/test/performance/odp_l2fwd.c
index d201186..af14c1e 100644
--- a/test/performance/odp_l2fwd.c
+++ b/test/performance/odp_l2fwd.c
@@ -386,7 +386,10 @@ static odp_pktio_t create_pktio(const char *dev, 
odp_pool_t pool)
                 odp_pktio_to_u64(pktio));
        inq_name[ODP_QUEUE_NAME_LEN - 1] = '\0';
 
-       inq_def = odp_queue_create(inq_name, ODP_QUEUE_TYPE_PKTIN, &qparam);
+       inq_def = odp_queue_create(inq_name,
+                                  gbl_args->appl.mode == DIRECT_RECV ?
+                                  ODP_QUEUE_TYPE_POLL : ODP_QUEUE_TYPE_SCHED,
+                                  &qparam);
        if (inq_def == ODP_QUEUE_INVALID) {
                LOG_ERR("Error: pktio queue creation failed\n");
                return ODP_PKTIO_INVALID;
diff --git a/test/performance/odp_pktio_perf.c 
b/test/performance/odp_pktio_perf.c
index ffe9844..f55062a 100644
--- a/test/performance/odp_pktio_perf.c
+++ b/test/performance/odp_pktio_perf.c
@@ -780,7 +780,8 @@ static int test_init(void)
        inq_def = odp_queue_lookup(inq_name);
        if (inq_def == ODP_QUEUE_INVALID)
                inq_def = odp_queue_create(inq_name,
-                               ODP_QUEUE_TYPE_PKTIN, &qparam);
+                                          schedule ? ODP_QUEUE_TYPE_SCHED :
+                                          ODP_QUEUE_TYPE_POLL, &qparam);
 
        if (inq_def == ODP_QUEUE_INVALID)
                return -1;
diff --git a/test/validation/classification/odp_classification_test_pmr.c 
b/test/validation/classification/odp_classification_test_pmr.c
index 3f49d4c..e209ea3 100644
--- a/test/validation/classification/odp_classification_test_pmr.c
+++ b/test/validation/classification/odp_classification_test_pmr.c
@@ -86,7 +86,8 @@ odp_queue_t create_default_inq(odp_pktio_t pktio, 
odp_queue_type_t qtype)
        if (inq_def == ODP_QUEUE_INVALID)
                inq_def = odp_queue_create(
                                inq_name,
-                               ODP_QUEUE_TYPE_PKTIN,
+                               qtype == ODP_QUEUE_TYPE_POLL ?
+                               ODP_QUEUE_TYPE_POLL : ODP_QUEUE_TYPE_SCHED,
                                qtype == ODP_QUEUE_TYPE_POLL ? NULL : &qparam);
 
        CU_ASSERT(inq_def != ODP_QUEUE_INVALID);
diff --git a/test/validation/classification/odp_classification_tests.c 
b/test/validation/classification/odp_classification_tests.c
index 3944d94..34dfc8c 100644
--- a/test/validation/classification/odp_classification_tests.c
+++ b/test/validation/classification/odp_classification_tests.c
@@ -61,7 +61,7 @@ int classification_suite_init(void)
 
        sprintf(queuename, "%s", "inq_loop");
        inq_def = odp_queue_create(queuename,
-                       ODP_QUEUE_TYPE_PKTIN, &qparam);
+                       ODP_QUEUE_TYPE_SCHED, &qparam);
        odp_pktio_inq_setdef(pktio_loop, inq_def);
 
        for (i = 0; i < CLS_ENTRIES; i++)
diff --git a/test/validation/pktio/pktio.c b/test/validation/pktio/pktio.c
index 0a6592c..9a5c4e9 100644
--- a/test/validation/pktio/pktio.c
+++ b/test/validation/pktio/pktio.c
@@ -293,7 +293,8 @@ static int create_inq(odp_pktio_t pktio, odp_queue_type_t 
qtype)
        if (inq_def == ODP_QUEUE_INVALID)
                inq_def = odp_queue_create(
                                inq_name,
-                               ODP_QUEUE_TYPE_PKTIN,
+                               qtype == ODP_QUEUE_TYPE_POLL ?
+                               ODP_QUEUE_TYPE_POLL : ODP_QUEUE_TYPE_SCHED,
                                qtype == ODP_QUEUE_TYPE_POLL ? NULL : &qparam);
 
        CU_ASSERT(inq_def != ODP_QUEUE_INVALID);
_______________________________________________
lng-odp mailing list
lng-odp@lists.linaro.org
https://lists.linaro.org/mailman/listinfo/lng-odp

Reply via email to