Use internal queue type instead of API handle. This way per
packet queue conversions are avoided.

Signed-off-by: Petri Savolainen <petri.savolai...@linaro.org>
---
 platform/linux-generic/include/odp_packet_internal.h |  3 ++-
 platform/linux-generic/include/odp_queue_if.h        |  2 ++
 platform/linux-generic/odp_classification.c          | 10 +++++-----
 platform/linux-generic/odp_packet_io.c               |  4 +---
 4 files changed, 10 insertions(+), 9 deletions(-)

diff --git a/platform/linux-generic/include/odp_packet_internal.h 
b/platform/linux-generic/include/odp_packet_internal.h
index cdd139bb..d513f05e 100644
--- a/platform/linux-generic/include/odp_packet_internal.h
+++ b/platform/linux-generic/include/odp_packet_internal.h
@@ -27,6 +27,7 @@ extern "C" {
 #include <odp/api/crypto.h>
 #include <odp_crypto_internal.h>
 #include <odp/api/plat/packet_types.h>
+#include <odp_queue_if.h>
 
 /** Minimum segment length expected by packet_parse_common() */
 #define PACKET_PARSE_SEG_LEN 96
@@ -126,7 +127,7 @@ typedef struct {
        odp_time_t timestamp;
 
        /* Classifier destination queue */
-       odp_queue_t dst_queue;
+       queue_t dst_queue;
 
        /* Result for crypto */
        odp_crypto_generic_op_result_t op_result;
diff --git a/platform/linux-generic/include/odp_queue_if.h 
b/platform/linux-generic/include/odp_queue_if.h
index 168d0e9e..b5cbd515 100644
--- a/platform/linux-generic/include/odp_queue_if.h
+++ b/platform/linux-generic/include/odp_queue_if.h
@@ -48,6 +48,8 @@ typedef struct {
 typedef struct { char dummy; } _queue_t;
 typedef _queue_t *queue_t;
 
+#define QUEUE_NULL ((queue_t)NULL)
+
 typedef int (*queue_init_global_fn_t)(void);
 typedef int (*queue_term_global_fn_t)(void);
 typedef int (*queue_init_local_fn_t)(void);
diff --git a/platform/linux-generic/odp_classification.c 
b/platform/linux-generic/odp_classification.c
index 5f153e73..cc08b9f4 100644
--- a/platform/linux-generic/odp_classification.c
+++ b/platform/linux-generic/odp_classification.c
@@ -162,7 +162,7 @@ odp_cos_t odp_cls_cos_create(const char *name, 
odp_cls_cos_param_t *param)
 
        /* Packets are dropped if Queue or Pool is invalid*/
        if (param->queue == ODP_QUEUE_INVALID)
-               queue = NULL;
+               queue = QUEUE_NULL;
        else
                queue = queue_fn->from_ext(param->queue);
 
@@ -264,7 +264,7 @@ int odp_cos_queue_set(odp_cos_t cos_id, odp_queue_t 
queue_id)
        /* Locking is not required as intermittent stale
        data during CoS modification is acceptable*/
        if (queue_id == ODP_QUEUE_INVALID)
-               cos->s.queue = NULL;
+               cos->s.queue = QUEUE_NULL;
        else
                cos->s.queue = queue_fn->from_ext(queue_id);
        return 0;
@@ -279,7 +279,7 @@ odp_queue_t odp_cos_queue(odp_cos_t cos_id)
                return ODP_QUEUE_INVALID;
        }
 
-       if (!cos->s.queue)
+       if (cos->s.queue == QUEUE_NULL)
                return ODP_QUEUE_INVALID;
 
        return queue_fn->to_ext(cos->s.queue);
@@ -841,12 +841,12 @@ int cls_classify_packet(pktio_entry_t *entry, const 
uint8_t *base,
        if (cos == NULL)
                return -EINVAL;
 
-       if (cos->s.queue == NULL || cos->s.pool == ODP_POOL_INVALID)
+       if (cos->s.queue == QUEUE_NULL || cos->s.pool == ODP_POOL_INVALID)
                return -EFAULT;
 
        *pool = cos->s.pool;
        pkt_hdr->p.input_flags.dst_queue = 1;
-       pkt_hdr->dst_queue = queue_fn->to_ext(cos->s.queue);
+       pkt_hdr->dst_queue = cos->s.queue;
 
        return 0;
 }
diff --git a/platform/linux-generic/odp_packet_io.c 
b/platform/linux-generic/odp_packet_io.c
index 4dd28549..6ff35046 100644
--- a/platform/linux-generic/odp_packet_io.c
+++ b/platform/linux-generic/odp_packet_io.c
@@ -566,11 +566,9 @@ static inline int pktin_recv_buf(odp_pktin_queue_t queue,
                buf_hdr = packet_to_buf_hdr(pkt);
 
                if (pkt_hdr->p.input_flags.dst_queue) {
-                       queue_t dst_queue;
                        int ret;
 
-                       dst_queue = queue_fn->from_ext(pkt_hdr->dst_queue);
-                       ret = queue_fn->enq(dst_queue, buf_hdr);
+                       ret = queue_fn->enq(pkt_hdr->dst_queue, buf_hdr);
                        if (ret < 0)
                                odp_packet_free(pkt);
                        continue;
-- 
2.13.0

Reply via email to