Avoid queue handle conversion on fast path. Convert once after queue create and save value.
Signed-off-by: Petri Savolainen <petri.savolai...@linaro.org> --- platform/linux-generic/include/odp_packet_io_internal.h | 2 ++ platform/linux-generic/odp_packet_io.c | 13 ++++++++----- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/platform/linux-generic/include/odp_packet_io_internal.h b/platform/linux-generic/include/odp_packet_io_internal.h index 89bb6f3a..93040681 100644 --- a/platform/linux-generic/include/odp_packet_io_internal.h +++ b/platform/linux-generic/include/odp_packet_io_internal.h @@ -24,6 +24,7 @@ extern "C" { #include <odp_align_internal.h> #include <odp_debug_internal.h> #include <odp_packet_io_ring_internal.h> +#include <odp_queue_if.h> #include <odp_config_internal.h> #include <odp/api/hints.h> @@ -165,6 +166,7 @@ struct pktio_entry { struct { odp_queue_t queue; + queue_t queue_int; odp_pktin_queue_t pktin; } in_queue[PKTIO_MAX_QUEUES]; diff --git a/platform/linux-generic/odp_packet_io.c b/platform/linux-generic/odp_packet_io.c index af1307c0..3ed51ac9 100644 --- a/platform/linux-generic/odp_packet_io.c +++ b/platform/linux-generic/odp_packet_io.c @@ -128,6 +128,7 @@ static void init_in_queues(pktio_entry_t *entry) for (i = 0; i < PKTIO_MAX_QUEUES; i++) { entry->s.in_queue[i].queue = ODP_QUEUE_INVALID; + entry->s.in_queue[i].queue_int = QUEUE_NULL; entry->s.in_queue[i].pktin = PKTIN_INVALID; } } @@ -305,6 +306,7 @@ static void destroy_in_queues(pktio_entry_t *entry, int num) if (entry->s.in_queue[i].queue != ODP_QUEUE_INVALID) { odp_queue_destroy(entry->s.in_queue[i].queue); entry->s.in_queue[i].queue = ODP_QUEUE_INVALID; + entry->s.in_queue[i].queue_int = QUEUE_NULL; } } } @@ -708,8 +710,7 @@ int sched_cb_pktin_poll(int pktio_index, int num_queue, int index[]) } for (idx = 0; idx < num_queue; idx++) { - queue_t qentry; - odp_queue_t queue; + queue_t q_int; odp_pktin_queue_t pktin = entry->s.in_queue[index[idx]].pktin; num = pktin_recv_buf(pktin, hdr_tbl, QUEUE_MULTI_MAX); @@ -722,9 +723,8 @@ int sched_cb_pktin_poll(int pktio_index, int num_queue, int index[]) return -1; } - queue = entry->s.in_queue[index[idx]].queue; - qentry = queue_fn->from_ext(queue); - queue_fn->enq_multi(qentry, hdr_tbl, num); + q_int = entry->s.in_queue[index[idx]].queue_int; + queue_fn->enq_multi(q_int, hdr_tbl, num); } return 0; @@ -1281,8 +1281,11 @@ int odp_pktin_queue_config(odp_pktio_t pktio, } entry->s.in_queue[i].queue = queue; + entry->s.in_queue[i].queue_int = q_int; + } else { entry->s.in_queue[i].queue = ODP_QUEUE_INVALID; + entry->s.in_queue[i].queue_int = QUEUE_NULL; } entry->s.in_queue[i].pktin.index = i; -- 2.13.0