diff mbox

[1/1] odp_ipsec: runtime select scheduled vs poll queues

Message ID 1427959779-11307-1-git-send-email-alexandru.badicioiu@linaro.org
State Superseded
Headers show

Commit Message

Alexandru Badicioiu April 2, 2015, 7:29 a.m. UTC
From: Alexandru Badicioiu <alexandru.badicioiu@linaro.org>

Signed-off-by: Alexandru Badicioiu <alexandru.badicioiu@linaro.org>
---
 example/ipsec/odp_ipsec.c |   64 +++++++++++++++++++++++---------------------
 1 files changed, 33 insertions(+), 31 deletions(-)

Comments

Mike Holmes April 6, 2015, 5:50 p.m. UTC | #1
Subject needs to localize to examples
example: odp_ipsec: runtime select scheduled vs poll queues

This patch also fixes the compile of ./configure CFLAGS=-DIPSEC_POLL_QUEUES
 https://bugs.linaro.org/show_bug.cgi?id=1441 so it should be a separate
patch referencing this bug.


On 2 April 2015 at 03:29, <alexandru.badicioiu@linaro.org> wrote:

> From: Alexandru Badicioiu <alexandru.badicioiu@linaro.org>
>
> Signed-off-by: Alexandru Badicioiu <alexandru.badicioiu@linaro.org>
> ---
>  example/ipsec/odp_ipsec.c |   64
> +++++++++++++++++++++++---------------------
>  1 files changed, 33 insertions(+), 31 deletions(-)
>
> diff --git a/example/ipsec/odp_ipsec.c b/example/ipsec/odp_ipsec.c
> index 0cbf5b4..9fb048a 100644
> --- a/example/ipsec/odp_ipsec.c
> +++ b/example/ipsec/odp_ipsec.c
> @@ -211,14 +211,14 @@ void free_pkt_ctx(pkt_ctx_t *ctx)
>
>  /**
>   * Example supports either polling queues or using odp_schedule
> - *
> - * Specify "CFLAGS=-DIPSEC_POLL_QUEUES" during configure to enable polling
> - * versus calling odp_schedule
> - *
> - * @todo Make this command line driven versus compile time
> - *       (see https://bugs.linaro.org/show_bug.cgi?id=625)
>   */
> -#ifdef IPSEC_POLL_QUEUES
> +typedef odp_queue_t (*queue_create_func_t)
> +                   (const char *, odp_queue_type_t, odp_queue_param_t *);
> +typedef odp_event_t (*schedule_func_t)
> +                    (odp_queue_t *, uint64_t);
> +
> +static queue_create_func_t queue_create;
> +static schedule_func_t schedule;
>
>  #define MAX_POLL_QUEUES 256
>
> @@ -245,7 +245,8 @@ odp_queue_t polled_odp_queue_create(const char *name,
>
>         if ((ODP_QUEUE_TYPE_SCHED == type) || (ODP_QUEUE_TYPE_PKTIN ==
> type)) {
>                 poll_queues[num_polled_queues++] = my_queue;
> -               printf("%s: adding %d\n", __func__, my_queue);
> +               printf("%s: adding %"PRIu64"\n", __func__,
> +                      odp_queue_to_u64(my_queue));
>         }
>
>         return my_queue;
> @@ -255,7 +256,7 @@ odp_queue_t polled_odp_queue_create(const char *name,
>   * odp_schedule replacement to poll queues versus using ODP scheduler
>   */
>  static
> -odp_buffer_t polled_odp_schedule(odp_queue_t *from, uint64_t wait)
> +odp_event_t polled_odp_schedule(odp_queue_t *from, uint64_t wait)
>  {
>         uint64_t start_cycle;
>         uint64_t cycle;
> @@ -268,11 +269,11 @@ odp_buffer_t polled_odp_schedule(odp_queue_t *from,
> uint64_t wait)
>
>                 for (idx = 0; idx < num_polled_queues; idx++) {
>                         odp_queue_t queue = poll_queues[idx];
> -                       odp_buffer_t buf;
> +                       odp_event_t buf;
>
>                         buf = odp_queue_deq(queue);
>
> -                       if (ODP_BUFFER_INVALID != buf) {
> +                       if (ODP_EVENT_INVALID != buf) {
>                                 *from = queue;
>                                 return buf;
>                         }
> @@ -285,11 +286,11 @@ odp_buffer_t polled_odp_schedule(odp_queue_t *from,
> uint64_t wait)
>                         break;
>
>                 if (0 == start_cycle) {
> -                       start_cycle = odp_time_get_cycles();
> +                       start_cycle = odp_time_cycles();
>                         continue;
>                 }
>
> -               cycle = odp_time_get_cycles();
> +               cycle = odp_time_cycles();
>                 diff  = odp_time_diff_cycles(start_cycle, cycle);
>
>                 if (wait < diff)
> @@ -297,20 +298,9 @@ odp_buffer_t polled_odp_schedule(odp_queue_t *from,
> uint64_t wait)
>         }
>
>         *from = ODP_QUEUE_INVALID;
> -       return ODP_BUFFER_INVALID;
> +       return ODP_EVENT_INVALID;
>  }
>
> -
> -#define QUEUE_CREATE(n, t, p) polled_odp_queue_create(n, t, p)
> -#define SCHEDULE(q, w)        polled_odp_schedule(q, w)
> -
> -#else
> -
> -#define QUEUE_CREATE(n, t, p) odp_queue_create(n, t, p)
> -#define SCHEDULE(q, w)        odp_schedule(q, w)
> -
> -#endif
> -
>  /**
>   * IPsec pre argument processing intialization
>   */
> @@ -330,7 +320,7 @@ void ipsec_init_pre(void)
>         qparam.sched.sync  = ODP_SCHED_SYNC_ATOMIC;
>         qparam.sched.group = ODP_SCHED_GROUP_DEFAULT;
>
> -       completionq = QUEUE_CREATE("completion",
> +       completionq = queue_create("completion",
>                                    ODP_QUEUE_TYPE_SCHED,
>                                    &qparam);
>         if (ODP_QUEUE_INVALID == completionq) {
>



> @@ -342,7 +332,7 @@ void ipsec_init_pre(void)
>         qparam.sched.sync  = ODP_SCHED_SYNC_ATOMIC;
>         qparam.sched.group = ODP_SCHED_GROUP_DEFAULT;
>
> -       seqnumq = QUEUE_CREATE("seqnum",
> +       seqnumq = queue_create("seqnum",
>                                ODP_QUEUE_TYPE_SCHED,
>                                &qparam);
>         if (ODP_QUEUE_INVALID == seqnumq) {
> @@ -448,7 +438,7 @@ void initialize_loop(char *intf)
>         snprintf(queue_name, sizeof(queue_name), "%i-loop_inq_def", idx);
>         queue_name[ODP_QUEUE_NAME_LEN - 1] = '\0';
>
> -       inq_def = QUEUE_CREATE(queue_name, ODP_QUEUE_TYPE_SCHED, &qparam);
> +       inq_def = queue_create(queue_name, ODP_QUEUE_TYPE_SCHED, &qparam);
>         if (ODP_QUEUE_INVALID == inq_def) {
>                 EXAMPLE_ERR("Error: input queue creation failed for %s\n",
>                             intf);
> @@ -461,7 +451,7 @@ void initialize_loop(char *intf)
>         snprintf(queue_name, sizeof(queue_name), "%i-loop_outq_def", idx);
>         queue_name[ODP_QUEUE_NAME_LEN - 1] = '\0';
>
> -       outq_def = QUEUE_CREATE(queue_name, ODP_QUEUE_TYPE_POLL, &qparam);
> +       outq_def = queue_create(queue_name, ODP_QUEUE_TYPE_POLL, &qparam);
>         if (ODP_QUEUE_INVALID == outq_def) {
>                 EXAMPLE_ERR("Error: output queue creation failed for %s\n",
>                             intf);
> @@ -525,7 +515,7 @@ 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, ODP_QUEUE_TYPE_PKTIN, &qparam);
>         if (ODP_QUEUE_INVALID == inq_def) {
>                 EXAMPLE_ERR("Error: pktio queue creation failed for %s\n",
>                             intf);
> @@ -1007,7 +997,7 @@ void *pktio_thread(void *arg EXAMPLE_UNUSED)
>                 odp_crypto_op_result_t result;
>
>                 /* Use schedule to get event from any input queue */
> -               ev = SCHEDULE(&dispatchq, ODP_SCHED_WAIT);
> +               ev = schedule(&dispatchq, ODP_SCHED_WAIT);
>
>                 /* Determine new work versus completion or sequence number
> */
>                 if (ODP_EVENT_PACKET == odp_event_type(ev)) {
> @@ -1153,6 +1143,16 @@ main(int argc, char *argv[])
>         char cpumaskstr[ODP_CPUMASK_STR_SIZE];
>         odp_pool_param_t params;
>
> +       /* create by default scheduled queues */
> +       queue_create = odp_queue_create;
> +       schedule = odp_schedule;
> +
> +       /* check for using poll queues */
> +       if (getenv("ODP_IPSEC_USE_POLL_QUEUES")) {

+               queue_create = polled_odp_queue_create;
> +               schedule = polled_odp_schedule;
> +       }
> +
>         /* Init ODP before calling anything else */
>         if (odp_init_global(NULL, NULL)) {
>                 EXAMPLE_ERR("Error: ODP global init failed.\n");
> @@ -1496,6 +1496,8 @@ static void usage(char *progname)
>

program


>                "                        ODP_PKTIO_DISABLE_SOCKET_MMSG\n"
>                "                        ODP_PKTIO_DISABLE_SOCKET_BASIC\n"
>                " can be used to advanced pkt I/O selection for
> linux-generic\n"
> +              "                        ODP_IPSEC_USE_POLL_QUEUES\n"
> +              " to enable use of poll queues instead of scheduled
> (default)\n"
>                "\n", NO_PATH(progname), NO_PATH(progname)
>                 );

 }
> --
> 1.7.3.4
>
> _______________________________________________
> lng-odp mailing list
> lng-odp@lists.linaro.org
> https://lists.linaro.org/mailman/listinfo/lng-odp
>
Maxim Uvarov April 7, 2015, 12:07 p.m. UTC | #2
On 04/06/15 20:50, Mike Holmes wrote:
> Subject needs to localize to examples
> example: odp_ipsec: runtime select scheduled vs poll queues
>
> This patch also fixes the compile of ./configure 
> CFLAGS=-DIPSEC_POLL_QUEUES 
> https://bugs.linaro.org/show_bug.cgi?id=1441 so it should be a 
> separate patch referencing this bug.
>
>
Can we on each build build 2 versions of binaries with poll queues and 
without. In that case if something will stop to compile we can find it 
earlier.

Maxim.

> On 2 April 2015 at 03:29, <alexandru.badicioiu@linaro.org 
> <mailto:alexandru.badicioiu@linaro.org>> wrote:
>
>     From: Alexandru Badicioiu <alexandru.badicioiu@linaro.org
>     <mailto:alexandru.badicioiu@linaro.org>>
>
>     Signed-off-by: Alexandru Badicioiu <alexandru.badicioiu@linaro.org
>     <mailto:alexandru.badicioiu@linaro.org>>
>     ---
>      example/ipsec/odp_ipsec.c |   64
>     +++++++++++++++++++++++---------------------
>      1 files changed, 33 insertions(+), 31 deletions(-)
>
>     diff --git a/example/ipsec/odp_ipsec.c b/example/ipsec/odp_ipsec.c
>     index 0cbf5b4..9fb048a 100644
>     --- a/example/ipsec/odp_ipsec.c
>     +++ b/example/ipsec/odp_ipsec.c
>     @@ -211,14 +211,14 @@ void free_pkt_ctx(pkt_ctx_t *ctx)
>
>      /**
>       * Example supports either polling queues or using odp_schedule
>     - *
>     - * Specify "CFLAGS=-DIPSEC_POLL_QUEUES" during configure to
>     enable polling
>     - * versus calling odp_schedule
>     - *
>     - * @todo Make this command line driven versus compile time
>     - *       (see https://bugs.linaro.org/show_bug.cgi?id=625)
>       */
>     -#ifdef IPSEC_POLL_QUEUES
>     +typedef odp_queue_t (*queue_create_func_t)
>     +                   (const char *, odp_queue_type_t,
>     odp_queue_param_t *);
>     +typedef odp_event_t (*schedule_func_t)
>     +                    (odp_queue_t *, uint64_t);
>     +
>     +static queue_create_func_t queue_create;
>     +static schedule_func_t schedule;
>
>      #define MAX_POLL_QUEUES 256
>
>     @@ -245,7 +245,8 @@ odp_queue_t polled_odp_queue_create(const char
>     *name,
>
>             if ((ODP_QUEUE_TYPE_SCHED == type) ||
>     (ODP_QUEUE_TYPE_PKTIN == type)) {
>                     poll_queues[num_polled_queues++] = my_queue;
>     -               printf("%s: adding %d\n", __func__, my_queue);
>     +               printf("%s: adding %"PRIu64"\n", __func__,
>     +                      odp_queue_to_u64(my_queue));
>             }
>
>             return my_queue;
>     @@ -255,7 +256,7 @@ odp_queue_t polled_odp_queue_create(const char
>     *name,
>       * odp_schedule replacement to poll queues versus using ODP scheduler
>       */
>      static
>     -odp_buffer_t polled_odp_schedule(odp_queue_t *from, uint64_t wait)
>     +odp_event_t polled_odp_schedule(odp_queue_t *from, uint64_t wait)
>      {
>             uint64_t start_cycle;
>             uint64_t cycle;
>     @@ -268,11 +269,11 @@ odp_buffer_t polled_odp_schedule(odp_queue_t
>     *from, uint64_t wait)
>
>                     for (idx = 0; idx < num_polled_queues; idx++) {
>                             odp_queue_t queue = poll_queues[idx];
>     -                       odp_buffer_t buf;
>     +                       odp_event_t buf;
>
>                             buf = odp_queue_deq(queue);
>
>     -                       if (ODP_BUFFER_INVALID != buf) {
>     +                       if (ODP_EVENT_INVALID != buf) {
>                                     *from = queue;
>                                     return buf;
>                             }
>     @@ -285,11 +286,11 @@ odp_buffer_t polled_odp_schedule(odp_queue_t
>     *from, uint64_t wait)
>                             break;
>
>                     if (0 == start_cycle) {
>     -                       start_cycle = odp_time_get_cycles();
>     +                       start_cycle = odp_time_cycles();
>                             continue;
>                     }
>
>     -               cycle = odp_time_get_cycles();
>     +               cycle = odp_time_cycles();
>                     diff  = odp_time_diff_cycles(start_cycle, cycle);
>
>                     if (wait < diff)
>     @@ -297,20 +298,9 @@ odp_buffer_t polled_odp_schedule(odp_queue_t
>     *from, uint64_t wait)
>             }
>
>             *from = ODP_QUEUE_INVALID;
>     -       return ODP_BUFFER_INVALID;
>     +       return ODP_EVENT_INVALID;
>      }
>
>     -
>     -#define QUEUE_CREATE(n, t, p) polled_odp_queue_create(n, t, p)
>     -#define SCHEDULE(q, w)        polled_odp_schedule(q, w)
>     -
>     -#else
>     -
>     -#define QUEUE_CREATE(n, t, p) odp_queue_create(n, t, p)
>     -#define SCHEDULE(q, w)        odp_schedule(q, w)
>     -
>     -#endif
>     -
>      /**
>       * IPsec pre argument processing intialization
>       */
>     @@ -330,7 +320,7 @@ void ipsec_init_pre(void)
>             qparam.sched.sync  = ODP_SCHED_SYNC_ATOMIC;
>             qparam.sched.group = ODP_SCHED_GROUP_DEFAULT;
>
>     -       completionq = QUEUE_CREATE("completion",
>     +       completionq = queue_create("completion",
>                                        ODP_QUEUE_TYPE_SCHED,
>                                        &qparam);
>             if (ODP_QUEUE_INVALID == completionq) {
>
>
>     @@ -342,7 +332,7 @@ void ipsec_init_pre(void)
>             qparam.sched.sync  = ODP_SCHED_SYNC_ATOMIC;
>             qparam.sched.group = ODP_SCHED_GROUP_DEFAULT;
>
>     -       seqnumq = QUEUE_CREATE("seqnum",
>     +       seqnumq = queue_create("seqnum",
>                                    ODP_QUEUE_TYPE_SCHED,
>                                    &qparam);
>             if (ODP_QUEUE_INVALID == seqnumq) {
>     @@ -448,7 +438,7 @@ void initialize_loop(char *intf)
>             snprintf(queue_name, sizeof(queue_name),
>     "%i-loop_inq_def", idx);
>             queue_name[ODP_QUEUE_NAME_LEN - 1] = '\0';
>
>     -       inq_def = QUEUE_CREATE(queue_name, ODP_QUEUE_TYPE_SCHED,
>     &qparam);
>     +       inq_def = queue_create(queue_name, ODP_QUEUE_TYPE_SCHED,
>     &qparam);
>             if (ODP_QUEUE_INVALID == inq_def) {
>                     EXAMPLE_ERR("Error: input queue creation failed
>     for %s\n",
>                                 intf);
>     @@ -461,7 +451,7 @@ void initialize_loop(char *intf)
>             snprintf(queue_name, sizeof(queue_name),
>     "%i-loop_outq_def", idx);
>             queue_name[ODP_QUEUE_NAME_LEN - 1] = '\0';
>
>     -       outq_def = QUEUE_CREATE(queue_name, ODP_QUEUE_TYPE_POLL,
>     &qparam);
>     +       outq_def = queue_create(queue_name, ODP_QUEUE_TYPE_POLL,
>     &qparam);
>             if (ODP_QUEUE_INVALID == outq_def) {
>                     EXAMPLE_ERR("Error: output queue creation failed
>     for %s\n",
>                                 intf);
>     @@ -525,7 +515,7 @@ 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, ODP_QUEUE_TYPE_PKTIN,
>     &qparam);
>             if (ODP_QUEUE_INVALID == inq_def) {
>                     EXAMPLE_ERR("Error: pktio queue creation failed
>     for %s\n",
>                                 intf);
>     @@ -1007,7 +997,7 @@ void *pktio_thread(void *arg EXAMPLE_UNUSED)
>                     odp_crypto_op_result_t result;
>
>                     /* Use schedule to get event from any input queue */
>     -               ev = SCHEDULE(&dispatchq, ODP_SCHED_WAIT);
>     +               ev = schedule(&dispatchq, ODP_SCHED_WAIT);
>
>                     /* Determine new work versus completion or
>     sequence number */
>                     if (ODP_EVENT_PACKET == odp_event_type(ev)) {
>     @@ -1153,6 +1143,16 @@ main(int argc, char *argv[])
>             char cpumaskstr[ODP_CPUMASK_STR_SIZE];
>             odp_pool_param_t params;
>
>     +       /* create by default scheduled queues */
>     +       queue_create = odp_queue_create;
>     +       schedule = odp_schedule;
>     +
>     +       /* check for using poll queues */
>     +       if (getenv("ODP_IPSEC_USE_POLL_QUEUES")) {
>
>     +               queue_create = polled_odp_queue_create;
>     +               schedule = polled_odp_schedule;
>     +       }
>     +
>             /* Init ODP before calling anything else */
>             if (odp_init_global(NULL, NULL)) {
>                     EXAMPLE_ERR("Error: ODP global init failed.\n");
>     @@ -1496,6 +1496,8 @@ static void usage(char *progname)
>
>
> program
>
>                    " ODP_PKTIO_DISABLE_SOCKET_MMSG\n"
>                    " ODP_PKTIO_DISABLE_SOCKET_BASIC\n"
>                    " can be used to advanced pkt I/O selection for
>     linux-generic\n"
>     +              " ODP_IPSEC_USE_POLL_QUEUES\n"
>     +              " to enable use of poll queues instead of scheduled
>     (default)\n"
>                    "\n", NO_PATH(progname), NO_PATH(progname)
>                     ); 
>
>      }
>     --
>     1.7.3.4
>
>     _______________________________________________
>     lng-odp mailing list
>     lng-odp@lists.linaro.org <mailto:lng-odp@lists.linaro.org>
>     https://lists.linaro.org/mailman/listinfo/lng-odp
>
>
>
>
> -- 
> Mike Holmes
> Technical Manager - Linaro Networking Group
> Linaro.org <http://www.linaro.org/>***│ *Open source software for ARM SoCs
>
>
>
> _______________________________________________
> lng-odp mailing list
> lng-odp@lists.linaro.org
> https://lists.linaro.org/mailman/listinfo/lng-odp
Mike Holmes April 7, 2015, 12:31 p.m. UTC | #3
On 7 April 2015 at 08:07, Maxim Uvarov <maxim.uvarov@linaro.org> wrote:

> On 04/06/15 20:50, Mike Holmes wrote:
>
>> Subject needs to localize to examples
>> example: odp_ipsec: runtime select scheduled vs poll queues
>>
>> This patch also fixes the compile of ./configure
>> CFLAGS=-DIPSEC_POLL_QUEUES https://bugs.linaro.org/show_bug.cgi?id=1441
>> so it should be a separate patch referencing this bug.
>>
>>
>>  Can we on each build build 2 versions of binaries with poll queues and
> without. In that case if something will stop to compile we can find it
> earlier.
>
>
This patch removes the @defines so the code cannot go stale it becomes a
run time decision which is good. We just need to fix the bug from when
buffers -> events that we did not notice that it was not converted so that
we complete that change first I think. Should be a simple split of the
patch.


> Maxim.
>
>  On 2 April 2015 at 03:29, <alexandru.badicioiu@linaro.org <mailto:
>> alexandru.badicioiu@linaro.org>> wrote:
>>
>>     From: Alexandru Badicioiu <alexandru.badicioiu@linaro.org
>>     <mailto:alexandru.badicioiu@linaro.org>>
>>
>>     Signed-off-by: Alexandru Badicioiu <alexandru.badicioiu@linaro.org
>>     <mailto:alexandru.badicioiu@linaro.org>>
>>
>>     ---
>>      example/ipsec/odp_ipsec.c |   64
>>     +++++++++++++++++++++++---------------------
>>      1 files changed, 33 insertions(+), 31 deletions(-)
>>
>>     diff --git a/example/ipsec/odp_ipsec.c b/example/ipsec/odp_ipsec.c
>>     index 0cbf5b4..9fb048a 100644
>>     --- a/example/ipsec/odp_ipsec.c
>>     +++ b/example/ipsec/odp_ipsec.c
>>     @@ -211,14 +211,14 @@ void free_pkt_ctx(pkt_ctx_t *ctx)
>>
>>      /**
>>       * Example supports either polling queues or using odp_schedule
>>     - *
>>     - * Specify "CFLAGS=-DIPSEC_POLL_QUEUES" during configure to
>>     enable polling
>>     - * versus calling odp_schedule
>>     - *
>>     - * @todo Make this command line driven versus compile time
>>     - *       (see https://bugs.linaro.org/show_bug.cgi?id=625)
>>       */
>>     -#ifdef IPSEC_POLL_QUEUES
>>     +typedef odp_queue_t (*queue_create_func_t)
>>     +                   (const char *, odp_queue_type_t,
>>     odp_queue_param_t *);
>>     +typedef odp_event_t (*schedule_func_t)
>>     +                    (odp_queue_t *, uint64_t);
>>     +
>>     +static queue_create_func_t queue_create;
>>     +static schedule_func_t schedule;
>>
>>      #define MAX_POLL_QUEUES 256
>>
>>     @@ -245,7 +245,8 @@ odp_queue_t polled_odp_queue_create(const char
>>     *name,
>>
>>             if ((ODP_QUEUE_TYPE_SCHED == type) ||
>>     (ODP_QUEUE_TYPE_PKTIN == type)) {
>>                     poll_queues[num_polled_queues++] = my_queue;
>>     -               printf("%s: adding %d\n", __func__, my_queue);
>>     +               printf("%s: adding %"PRIu64"\n", __func__,
>>     +                      odp_queue_to_u64(my_queue));
>>             }
>>
>>             return my_queue;
>>     @@ -255,7 +256,7 @@ odp_queue_t polled_odp_queue_create(const char
>>     *name,
>>       * odp_schedule replacement to poll queues versus using ODP scheduler
>>       */
>>      static
>>     -odp_buffer_t polled_odp_schedule(odp_queue_t *from, uint64_t wait)
>>     +odp_event_t polled_odp_schedule(odp_queue_t *from, uint64_t wait)
>>      {
>>             uint64_t start_cycle;
>>             uint64_t cycle;
>>     @@ -268,11 +269,11 @@ odp_buffer_t polled_odp_schedule(odp_queue_t
>>     *from, uint64_t wait)
>>
>>                     for (idx = 0; idx < num_polled_queues; idx++) {
>>                             odp_queue_t queue = poll_queues[idx];
>>     -                       odp_buffer_t buf;
>>     +                       odp_event_t buf;
>>
>>                             buf = odp_queue_deq(queue);
>>
>>     -                       if (ODP_BUFFER_INVALID != buf) {
>>     +                       if (ODP_EVENT_INVALID != buf) {
>>                                     *from = queue;
>>                                     return buf;
>>                             }
>>     @@ -285,11 +286,11 @@ odp_buffer_t polled_odp_schedule(odp_queue_t
>>     *from, uint64_t wait)
>>                             break;
>>
>>                     if (0 == start_cycle) {
>>     -                       start_cycle = odp_time_get_cycles();
>>     +                       start_cycle = odp_time_cycles();
>>                             continue;
>>                     }
>>
>>     -               cycle = odp_time_get_cycles();
>>     +               cycle = odp_time_cycles();
>>                     diff  = odp_time_diff_cycles(start_cycle, cycle);
>>
>>                     if (wait < diff)
>>     @@ -297,20 +298,9 @@ odp_buffer_t polled_odp_schedule(odp_queue_t
>>     *from, uint64_t wait)
>>             }
>>
>>             *from = ODP_QUEUE_INVALID;
>>     -       return ODP_BUFFER_INVALID;
>>     +       return ODP_EVENT_INVALID;
>>      }
>>
>>     -
>>     -#define QUEUE_CREATE(n, t, p) polled_odp_queue_create(n, t, p)
>>     -#define SCHEDULE(q, w)        polled_odp_schedule(q, w)
>>     -
>>     -#else
>>     -
>>     -#define QUEUE_CREATE(n, t, p) odp_queue_create(n, t, p)
>>     -#define SCHEDULE(q, w)        odp_schedule(q, w)
>>     -
>>     -#endif
>>     -
>>      /**
>>       * IPsec pre argument processing intialization
>>       */
>>     @@ -330,7 +320,7 @@ void ipsec_init_pre(void)
>>             qparam.sched.sync  = ODP_SCHED_SYNC_ATOMIC;
>>             qparam.sched.group = ODP_SCHED_GROUP_DEFAULT;
>>
>>     -       completionq = QUEUE_CREATE("completion",
>>     +       completionq = queue_create("completion",
>>                                        ODP_QUEUE_TYPE_SCHED,
>>                                        &qparam);
>>             if (ODP_QUEUE_INVALID == completionq) {
>>
>>
>>     @@ -342,7 +332,7 @@ void ipsec_init_pre(void)
>>             qparam.sched.sync  = ODP_SCHED_SYNC_ATOMIC;
>>             qparam.sched.group = ODP_SCHED_GROUP_DEFAULT;
>>
>>     -       seqnumq = QUEUE_CREATE("seqnum",
>>     +       seqnumq = queue_create("seqnum",
>>                                    ODP_QUEUE_TYPE_SCHED,
>>                                    &qparam);
>>             if (ODP_QUEUE_INVALID == seqnumq) {
>>     @@ -448,7 +438,7 @@ void initialize_loop(char *intf)
>>             snprintf(queue_name, sizeof(queue_name),
>>     "%i-loop_inq_def", idx);
>>             queue_name[ODP_QUEUE_NAME_LEN - 1] = '\0';
>>
>>     -       inq_def = QUEUE_CREATE(queue_name, ODP_QUEUE_TYPE_SCHED,
>>     &qparam);
>>     +       inq_def = queue_create(queue_name, ODP_QUEUE_TYPE_SCHED,
>>     &qparam);
>>             if (ODP_QUEUE_INVALID == inq_def) {
>>                     EXAMPLE_ERR("Error: input queue creation failed
>>     for %s\n",
>>                                 intf);
>>     @@ -461,7 +451,7 @@ void initialize_loop(char *intf)
>>             snprintf(queue_name, sizeof(queue_name),
>>     "%i-loop_outq_def", idx);
>>             queue_name[ODP_QUEUE_NAME_LEN - 1] = '\0';
>>
>>     -       outq_def = QUEUE_CREATE(queue_name, ODP_QUEUE_TYPE_POLL,
>>     &qparam);
>>     +       outq_def = queue_create(queue_name, ODP_QUEUE_TYPE_POLL,
>>     &qparam);
>>             if (ODP_QUEUE_INVALID == outq_def) {
>>                     EXAMPLE_ERR("Error: output queue creation failed
>>     for %s\n",
>>                                 intf);
>>     @@ -525,7 +515,7 @@ 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, ODP_QUEUE_TYPE_PKTIN,
>>     &qparam);
>>             if (ODP_QUEUE_INVALID == inq_def) {
>>                     EXAMPLE_ERR("Error: pktio queue creation failed
>>     for %s\n",
>>                                 intf);
>>     @@ -1007,7 +997,7 @@ void *pktio_thread(void *arg EXAMPLE_UNUSED)
>>                     odp_crypto_op_result_t result;
>>
>>                     /* Use schedule to get event from any input queue */
>>     -               ev = SCHEDULE(&dispatchq, ODP_SCHED_WAIT);
>>     +               ev = schedule(&dispatchq, ODP_SCHED_WAIT);
>>
>>                     /* Determine new work versus completion or
>>     sequence number */
>>                     if (ODP_EVENT_PACKET == odp_event_type(ev)) {
>>     @@ -1153,6 +1143,16 @@ main(int argc, char *argv[])
>>             char cpumaskstr[ODP_CPUMASK_STR_SIZE];
>>             odp_pool_param_t params;
>>
>>     +       /* create by default scheduled queues */
>>     +       queue_create = odp_queue_create;
>>     +       schedule = odp_schedule;
>>     +
>>     +       /* check for using poll queues */
>>     +       if (getenv("ODP_IPSEC_USE_POLL_QUEUES")) {
>>
>>     +               queue_create = polled_odp_queue_create;
>>     +               schedule = polled_odp_schedule;
>>     +       }
>>     +
>>             /* Init ODP before calling anything else */
>>             if (odp_init_global(NULL, NULL)) {
>>                     EXAMPLE_ERR("Error: ODP global init failed.\n");
>>     @@ -1496,6 +1496,8 @@ static void usage(char *progname)
>>
>>
>> program
>>
>>                    " ODP_PKTIO_DISABLE_SOCKET_MMSG\n"
>>                    " ODP_PKTIO_DISABLE_SOCKET_BASIC\n"
>>                    " can be used to advanced pkt I/O selection for
>>     linux-generic\n"
>>     +              " ODP_IPSEC_USE_POLL_QUEUES\n"
>>     +              " to enable use of poll queues instead of scheduled
>>     (default)\n"
>>                    "\n", NO_PATH(progname), NO_PATH(progname)
>>                     );
>>      }
>>     --
>>     1.7.3.4
>>
>>     _______________________________________________
>>     lng-odp mailing list
>>     lng-odp@lists.linaro.org <mailto:lng-odp@lists.linaro.org>
>>     https://lists.linaro.org/mailman/listinfo/lng-odp
>>
>>
>>
>>
>> --
>> Mike Holmes
>> Technical Manager - Linaro Networking Group
>> Linaro.org <http://www.linaro.org/>***│ *Open source software for ARM
>> SoCs
>>
>>
>>
>> _______________________________________________
>> lng-odp mailing list
>> lng-odp@lists.linaro.org
>> https://lists.linaro.org/mailman/listinfo/lng-odp
>>
>
> _______________________________________________
> lng-odp mailing list
> lng-odp@lists.linaro.org
> https://lists.linaro.org/mailman/listinfo/lng-odp
>
Maxim Uvarov April 7, 2015, 12:40 p.m. UTC | #4
On 04/07/15 15:31, Mike Holmes wrote:
>
>
> On 7 April 2015 at 08:07, Maxim Uvarov <maxim.uvarov@linaro.org 
> <mailto:maxim.uvarov@linaro.org>> wrote:
>
>     On 04/06/15 20:50, Mike Holmes wrote:
>
>         Subject needs to localize to examples
>         example: odp_ipsec: runtime select scheduled vs poll queues
>
>         This patch also fixes the compile of ./configure
>         CFLAGS=-DIPSEC_POLL_QUEUES
>         https://bugs.linaro.org/show_bug.cgi?id=1441 so it should be a
>         separate patch referencing this bug.
>
>
>     Can we on each build build 2 versions of binaries with poll queues
>     and without. In that case if something will stop to compile we can
>     find it earlier.
>
>
> This patch removes the @defines so the code cannot go stale it becomes 
> a run time decision which is good. We just need to fix the bug from 
> when buffers -> events that we did not notice that it was not 
> converted so that we complete that change first I think. Should be a 
> simple split of the patch.

ah, yes, that is ok.

>     Maxim.
>
>         On 2 April 2015 at 03:29, <alexandru.badicioiu@linaro.org
>         <mailto:alexandru.badicioiu@linaro.org>
>         <mailto:alexandru.badicioiu@linaro.org
>         <mailto:alexandru.badicioiu@linaro.org>>> wrote:
>
>             From: Alexandru Badicioiu <alexandru.badicioiu@linaro.org
>         <mailto:alexandru.badicioiu@linaro.org>
>             <mailto:alexandru.badicioiu@linaro.org
>         <mailto:alexandru.badicioiu@linaro.org>>>
>
>             Signed-off-by: Alexandru Badicioiu
>         <alexandru.badicioiu@linaro.org
>         <mailto:alexandru.badicioiu@linaro.org>
>             <mailto:alexandru.badicioiu@linaro.org
>         <mailto:alexandru.badicioiu@linaro.org>>>
>
>             ---
>              example/ipsec/odp_ipsec.c |   64
>             +++++++++++++++++++++++---------------------
>              1 files changed, 33 insertions(+), 31 deletions(-)
>
>             diff --git a/example/ipsec/odp_ipsec.c
>         b/example/ipsec/odp_ipsec.c
>             index 0cbf5b4..9fb048a 100644
>             --- a/example/ipsec/odp_ipsec.c
>             +++ b/example/ipsec/odp_ipsec.c
>             @@ -211,14 +211,14 @@ void free_pkt_ctx(pkt_ctx_t *ctx)
>
>              /**
>               * Example supports either polling queues or using
>         odp_schedule
>             - *
>             - * Specify "CFLAGS=-DIPSEC_POLL_QUEUES" during configure to
>             enable polling
>             - * versus calling odp_schedule
>             - *
>             - * @todo Make this command line driven versus compile time
>             - *       (see https://bugs.linaro.org/show_bug.cgi?id=625)
>               */
>             -#ifdef IPSEC_POLL_QUEUES
>             +typedef odp_queue_t (*queue_create_func_t)
>             +                   (const char *, odp_queue_type_t,
>             odp_queue_param_t *);
>             +typedef odp_event_t (*schedule_func_t)
>             +                    (odp_queue_t *, uint64_t);
>             +
>             +static queue_create_func_t queue_create;
>             +static schedule_func_t schedule;
>
>              #define MAX_POLL_QUEUES 256
>
>             @@ -245,7 +245,8 @@ odp_queue_t
>         polled_odp_queue_create(const char
>             *name,
>
>                     if ((ODP_QUEUE_TYPE_SCHED == type) ||
>             (ODP_QUEUE_TYPE_PKTIN == type)) {
>                             poll_queues[num_polled_queues++] = my_queue;
>             -               printf("%s: adding %d\n", __func__, my_queue);
>             +               printf("%s: adding %"PRIu64"\n", __func__,
>             + odp_queue_to_u64(my_queue));
>                     }
>
>                     return my_queue;
>             @@ -255,7 +256,7 @@ odp_queue_t
>         polled_odp_queue_create(const char
>             *name,
>               * odp_schedule replacement to poll queues versus using
>         ODP scheduler
>               */
>              static
>             -odp_buffer_t polled_odp_schedule(odp_queue_t *from,
>         uint64_t wait)
>             +odp_event_t polled_odp_schedule(odp_queue_t *from,
>         uint64_t wait)
>              {
>                     uint64_t start_cycle;
>                     uint64_t cycle;
>             @@ -268,11 +269,11 @@ odp_buffer_t
>         polled_odp_schedule(odp_queue_t
>             *from, uint64_t wait)
>
>                             for (idx = 0; idx < num_polled_queues;
>         idx++) {
>                                     odp_queue_t queue = poll_queues[idx];
>             -                       odp_buffer_t buf;
>             +                       odp_event_t buf;
>
>                                     buf = odp_queue_deq(queue);
>
>             -                       if (ODP_BUFFER_INVALID != buf) {
>             +                       if (ODP_EVENT_INVALID != buf) {
>                                             *from = queue;
>                                             return buf;
>                                     }
>             @@ -285,11 +286,11 @@ odp_buffer_t
>         polled_odp_schedule(odp_queue_t
>             *from, uint64_t wait)
>                                     break;
>
>                             if (0 == start_cycle) {
>             -                       start_cycle = odp_time_get_cycles();
>             +                       start_cycle = odp_time_cycles();
>                                     continue;
>                             }
>
>             -               cycle = odp_time_get_cycles();
>             +               cycle = odp_time_cycles();
>                             diff  = odp_time_diff_cycles(start_cycle,
>         cycle);
>
>                             if (wait < diff)
>             @@ -297,20 +298,9 @@ odp_buffer_t
>         polled_odp_schedule(odp_queue_t
>             *from, uint64_t wait)
>                     }
>
>                     *from = ODP_QUEUE_INVALID;
>             -       return ODP_BUFFER_INVALID;
>             +       return ODP_EVENT_INVALID;
>              }
>
>             -
>             -#define QUEUE_CREATE(n, t, p) polled_odp_queue_create(n,
>         t, p)
>             -#define SCHEDULE(q, w) polled_odp_schedule(q, w)
>             -
>             -#else
>             -
>             -#define QUEUE_CREATE(n, t, p) odp_queue_create(n, t, p)
>             -#define SCHEDULE(q, w)        odp_schedule(q, w)
>             -
>             -#endif
>             -
>              /**
>               * IPsec pre argument processing intialization
>               */
>             @@ -330,7 +320,7 @@ void ipsec_init_pre(void)
>                     qparam.sched.sync  = ODP_SCHED_SYNC_ATOMIC;
>                     qparam.sched.group = ODP_SCHED_GROUP_DEFAULT;
>
>             -       completionq = QUEUE_CREATE("completion",
>             +       completionq = queue_create("completion",
>          ODP_QUEUE_TYPE_SCHED,
>                                                &qparam);
>                     if (ODP_QUEUE_INVALID == completionq) {
>
>
>             @@ -342,7 +332,7 @@ void ipsec_init_pre(void)
>                     qparam.sched.sync  = ODP_SCHED_SYNC_ATOMIC;
>                     qparam.sched.group = ODP_SCHED_GROUP_DEFAULT;
>
>             -       seqnumq = QUEUE_CREATE("seqnum",
>             +       seqnumq = queue_create("seqnum",
>          ODP_QUEUE_TYPE_SCHED,
>                                            &qparam);
>                     if (ODP_QUEUE_INVALID == seqnumq) {
>             @@ -448,7 +438,7 @@ void initialize_loop(char *intf)
>                     snprintf(queue_name, sizeof(queue_name),
>             "%i-loop_inq_def", idx);
>                     queue_name[ODP_QUEUE_NAME_LEN - 1] = '\0';
>
>             -       inq_def = QUEUE_CREATE(queue_name,
>         ODP_QUEUE_TYPE_SCHED,
>             &qparam);
>             +       inq_def = queue_create(queue_name,
>         ODP_QUEUE_TYPE_SCHED,
>             &qparam);
>                     if (ODP_QUEUE_INVALID == inq_def) {
>                             EXAMPLE_ERR("Error: input queue creation
>         failed
>             for %s\n",
>                                         intf);
>             @@ -461,7 +451,7 @@ void initialize_loop(char *intf)
>                     snprintf(queue_name, sizeof(queue_name),
>             "%i-loop_outq_def", idx);
>                     queue_name[ODP_QUEUE_NAME_LEN - 1] = '\0';
>
>             -       outq_def = QUEUE_CREATE(queue_name,
>         ODP_QUEUE_TYPE_POLL,
>             &qparam);
>             +       outq_def = queue_create(queue_name,
>         ODP_QUEUE_TYPE_POLL,
>             &qparam);
>                     if (ODP_QUEUE_INVALID == outq_def) {
>                             EXAMPLE_ERR("Error: output queue creation
>         failed
>             for %s\n",
>                                         intf);
>             @@ -525,7 +515,7 @@ 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, ODP_QUEUE_TYPE_PKTIN,
>             &qparam);
>                     if (ODP_QUEUE_INVALID == inq_def) {
>                             EXAMPLE_ERR("Error: pktio queue creation
>         failed
>             for %s\n",
>                                         intf);
>             @@ -1007,7 +997,7 @@ void *pktio_thread(void *arg
>         EXAMPLE_UNUSED)
>                             odp_crypto_op_result_t result;
>
>                             /* Use schedule to get event from any
>         input queue */
>             -               ev = SCHEDULE(&dispatchq, ODP_SCHED_WAIT);
>             +               ev = schedule(&dispatchq, ODP_SCHED_WAIT);
>
>                             /* Determine new work versus completion or
>             sequence number */
>                             if (ODP_EVENT_PACKET == odp_event_type(ev)) {
>             @@ -1153,6 +1143,16 @@ main(int argc, char *argv[])
>                     char cpumaskstr[ODP_CPUMASK_STR_SIZE];
>                     odp_pool_param_t params;
>
>             +       /* create by default scheduled queues */
>             +       queue_create = odp_queue_create;
>             +       schedule = odp_schedule;
>             +
>             +       /* check for using poll queues */
>             +       if (getenv("ODP_IPSEC_USE_POLL_QUEUES")) {
>
>             +               queue_create = polled_odp_queue_create;
>             +               schedule = polled_odp_schedule;
>             +       }
>             +
>                     /* Init ODP before calling anything else */
>                     if (odp_init_global(NULL, NULL)) {
>                             EXAMPLE_ERR("Error: ODP global init
>         failed.\n");
>             @@ -1496,6 +1496,8 @@ static void usage(char *progname)
>
>
>         program
>
>                            " ODP_PKTIO_DISABLE_SOCKET_MMSG\n"
>                            " ODP_PKTIO_DISABLE_SOCKET_BASIC\n"
>                            " can be used to advanced pkt I/O selection for
>             linux-generic\n"
>             +              " ODP_IPSEC_USE_POLL_QUEUES\n"
>             +              " to enable use of poll queues instead of
>         scheduled
>             (default)\n"
>                            "\n", NO_PATH(progname), NO_PATH(progname)
>                             );
>              }
>             --
>             1.7.3.4
>
>             _______________________________________________
>             lng-odp mailing list
>         lng-odp@lists.linaro.org <mailto:lng-odp@lists.linaro.org>
>         <mailto:lng-odp@lists.linaro.org
>         <mailto:lng-odp@lists.linaro.org>>
>         https://lists.linaro.org/mailman/listinfo/lng-odp
>
>
>
>
>         -- 
>         Mike Holmes
>         Technical Manager - Linaro Networking Group
>         Linaro.org <http://www.linaro.org/>***│ *Open source software
>         for ARM SoCs
>
>
>
>         _______________________________________________
>         lng-odp mailing list
>         lng-odp@lists.linaro.org <mailto:lng-odp@lists.linaro.org>
>         https://lists.linaro.org/mailman/listinfo/lng-odp
>
>
>     _______________________________________________
>     lng-odp mailing list
>     lng-odp@lists.linaro.org <mailto:lng-odp@lists.linaro.org>
>     https://lists.linaro.org/mailman/listinfo/lng-odp
>
>
>
>
> -- 
> Mike Holmes
> Technical Manager - Linaro Networking Group
> Linaro.org <http://www.linaro.org/>***│ *Open source software for ARM SoCs
>
diff mbox

Patch

diff --git a/example/ipsec/odp_ipsec.c b/example/ipsec/odp_ipsec.c
index 0cbf5b4..9fb048a 100644
--- a/example/ipsec/odp_ipsec.c
+++ b/example/ipsec/odp_ipsec.c
@@ -211,14 +211,14 @@  void free_pkt_ctx(pkt_ctx_t *ctx)
 
 /**
  * Example supports either polling queues or using odp_schedule
- *
- * Specify "CFLAGS=-DIPSEC_POLL_QUEUES" during configure to enable polling
- * versus calling odp_schedule
- *
- * @todo Make this command line driven versus compile time
- *       (see https://bugs.linaro.org/show_bug.cgi?id=625)
  */
-#ifdef IPSEC_POLL_QUEUES
+typedef odp_queue_t (*queue_create_func_t)
+		    (const char *, odp_queue_type_t, odp_queue_param_t *);
+typedef odp_event_t (*schedule_func_t)
+		     (odp_queue_t *, uint64_t);
+
+static queue_create_func_t queue_create;
+static schedule_func_t schedule;
 
 #define MAX_POLL_QUEUES 256
 
@@ -245,7 +245,8 @@  odp_queue_t polled_odp_queue_create(const char *name,
 
 	if ((ODP_QUEUE_TYPE_SCHED == type) || (ODP_QUEUE_TYPE_PKTIN == type)) {
 		poll_queues[num_polled_queues++] = my_queue;
-		printf("%s: adding %d\n", __func__, my_queue);
+		printf("%s: adding %"PRIu64"\n", __func__,
+		       odp_queue_to_u64(my_queue));
 	}
 
 	return my_queue;
@@ -255,7 +256,7 @@  odp_queue_t polled_odp_queue_create(const char *name,
  * odp_schedule replacement to poll queues versus using ODP scheduler
  */
 static
-odp_buffer_t polled_odp_schedule(odp_queue_t *from, uint64_t wait)
+odp_event_t polled_odp_schedule(odp_queue_t *from, uint64_t wait)
 {
 	uint64_t start_cycle;
 	uint64_t cycle;
@@ -268,11 +269,11 @@  odp_buffer_t polled_odp_schedule(odp_queue_t *from, uint64_t wait)
 
 		for (idx = 0; idx < num_polled_queues; idx++) {
 			odp_queue_t queue = poll_queues[idx];
-			odp_buffer_t buf;
+			odp_event_t buf;
 
 			buf = odp_queue_deq(queue);
 
-			if (ODP_BUFFER_INVALID != buf) {
+			if (ODP_EVENT_INVALID != buf) {
 				*from = queue;
 				return buf;
 			}
@@ -285,11 +286,11 @@  odp_buffer_t polled_odp_schedule(odp_queue_t *from, uint64_t wait)
 			break;
 
 		if (0 == start_cycle) {
-			start_cycle = odp_time_get_cycles();
+			start_cycle = odp_time_cycles();
 			continue;
 		}
 
-		cycle = odp_time_get_cycles();
+		cycle = odp_time_cycles();
 		diff  = odp_time_diff_cycles(start_cycle, cycle);
 
 		if (wait < diff)
@@ -297,20 +298,9 @@  odp_buffer_t polled_odp_schedule(odp_queue_t *from, uint64_t wait)
 	}
 
 	*from = ODP_QUEUE_INVALID;
-	return ODP_BUFFER_INVALID;
+	return ODP_EVENT_INVALID;
 }
 
-
-#define QUEUE_CREATE(n, t, p) polled_odp_queue_create(n, t, p)
-#define SCHEDULE(q, w)        polled_odp_schedule(q, w)
-
-#else
-
-#define QUEUE_CREATE(n, t, p) odp_queue_create(n, t, p)
-#define SCHEDULE(q, w)        odp_schedule(q, w)
-
-#endif
-
 /**
  * IPsec pre argument processing intialization
  */
@@ -330,7 +320,7 @@  void ipsec_init_pre(void)
 	qparam.sched.sync  = ODP_SCHED_SYNC_ATOMIC;
 	qparam.sched.group = ODP_SCHED_GROUP_DEFAULT;
 
-	completionq = QUEUE_CREATE("completion",
+	completionq = queue_create("completion",
 				   ODP_QUEUE_TYPE_SCHED,
 				   &qparam);
 	if (ODP_QUEUE_INVALID == completionq) {
@@ -342,7 +332,7 @@  void ipsec_init_pre(void)
 	qparam.sched.sync  = ODP_SCHED_SYNC_ATOMIC;
 	qparam.sched.group = ODP_SCHED_GROUP_DEFAULT;
 
-	seqnumq = QUEUE_CREATE("seqnum",
+	seqnumq = queue_create("seqnum",
 			       ODP_QUEUE_TYPE_SCHED,
 			       &qparam);
 	if (ODP_QUEUE_INVALID == seqnumq) {
@@ -448,7 +438,7 @@  void initialize_loop(char *intf)
 	snprintf(queue_name, sizeof(queue_name), "%i-loop_inq_def", idx);
 	queue_name[ODP_QUEUE_NAME_LEN - 1] = '\0';
 
-	inq_def = QUEUE_CREATE(queue_name, ODP_QUEUE_TYPE_SCHED, &qparam);
+	inq_def = queue_create(queue_name, ODP_QUEUE_TYPE_SCHED, &qparam);
 	if (ODP_QUEUE_INVALID == inq_def) {
 		EXAMPLE_ERR("Error: input queue creation failed for %s\n",
 			    intf);
@@ -461,7 +451,7 @@  void initialize_loop(char *intf)
 	snprintf(queue_name, sizeof(queue_name), "%i-loop_outq_def", idx);
 	queue_name[ODP_QUEUE_NAME_LEN - 1] = '\0';
 
-	outq_def = QUEUE_CREATE(queue_name, ODP_QUEUE_TYPE_POLL, &qparam);
+	outq_def = queue_create(queue_name, ODP_QUEUE_TYPE_POLL, &qparam);
 	if (ODP_QUEUE_INVALID == outq_def) {
 		EXAMPLE_ERR("Error: output queue creation failed for %s\n",
 			    intf);
@@ -525,7 +515,7 @@  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, ODP_QUEUE_TYPE_PKTIN, &qparam);
 	if (ODP_QUEUE_INVALID == inq_def) {
 		EXAMPLE_ERR("Error: pktio queue creation failed for %s\n",
 			    intf);
@@ -1007,7 +997,7 @@  void *pktio_thread(void *arg EXAMPLE_UNUSED)
 		odp_crypto_op_result_t result;
 
 		/* Use schedule to get event from any input queue */
-		ev = SCHEDULE(&dispatchq, ODP_SCHED_WAIT);
+		ev = schedule(&dispatchq, ODP_SCHED_WAIT);
 
 		/* Determine new work versus completion or sequence number */
 		if (ODP_EVENT_PACKET == odp_event_type(ev)) {
@@ -1153,6 +1143,16 @@  main(int argc, char *argv[])
 	char cpumaskstr[ODP_CPUMASK_STR_SIZE];
 	odp_pool_param_t params;
 
+	/* create by default scheduled queues */
+	queue_create = odp_queue_create;
+	schedule = odp_schedule;
+
+	/* check for using poll queues */
+	if (getenv("ODP_IPSEC_USE_POLL_QUEUES")) {
+		queue_create = polled_odp_queue_create;
+		schedule = polled_odp_schedule;
+	}
+
 	/* Init ODP before calling anything else */
 	if (odp_init_global(NULL, NULL)) {
 		EXAMPLE_ERR("Error: ODP global init failed.\n");
@@ -1496,6 +1496,8 @@  static void usage(char *progname)
 	       "                        ODP_PKTIO_DISABLE_SOCKET_MMSG\n"
 	       "                        ODP_PKTIO_DISABLE_SOCKET_BASIC\n"
 	       " can be used to advanced pkt I/O selection for linux-generic\n"
+	       "                        ODP_IPSEC_USE_POLL_QUEUES\n"
+	       " to enable use of poll queues instead of scheduled (default)\n"
 	       "\n", NO_PATH(progname), NO_PATH(progname)
 		);
 }