On 04/07/15 15:31, Mike Holmes wrote:


On 7 April 2015 at 08:07, Maxim Uvarov <[email protected] <mailto:[email protected]>> 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, <[email protected]
        <mailto:[email protected]>
        <mailto:[email protected]
        <mailto:[email protected]>>> wrote:

            From: Alexandru Badicioiu <[email protected]
        <mailto:[email protected]>
            <mailto:[email protected]
        <mailto:[email protected]>>>

            Signed-off-by: Alexandru Badicioiu
        <[email protected]
        <mailto:[email protected]>
            <mailto:[email protected]
        <mailto:[email protected]>>>

            ---
             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
        [email protected] <mailto:[email protected]>
        <mailto:[email protected]
        <mailto:[email protected]>>
        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
        [email protected] <mailto:[email protected]>
        https://lists.linaro.org/mailman/listinfo/lng-odp


    _______________________________________________
    lng-odp mailing list
    [email protected] <mailto:[email protected]>
    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
[email protected]
https://lists.linaro.org/mailman/listinfo/lng-odp

Reply via email to