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