On 05/14/2015 13:45, Mike Holmes wrote:


On 14 May 2015 at 06:31, Maxim Uvarov <maxim.uva...@linaro.org <mailto:maxim.uva...@linaro.org>> wrote:

    On 05/14/2015 01:17, Mike Holmes wrote:



        On 13 May 2015 at 05:03, Maxim Uvarov <maxim.uva...@linaro.org
        <mailto:maxim.uva...@linaro.org>
        <mailto:maxim.uva...@linaro.org
        <mailto:maxim.uva...@linaro.org>>> wrote:

            On 05/12/2015 20:52, Mike Holmes wrote:

                I dont think you can implement a mandatory ODP API
        based on an
                optional helper api.

                The ring implementation should be inside the linux-generic
                implementation if you want to use it, other
        implementations
                can copy it as they do now from linux-generic for other
                features such as timers.

                Helpers need to be supporting the tests, examples and
                applications and not the implementations.

                We have been walking a fuzzy line previously but I
        think the
                complexities and coupling get unwound when
        linux-generic does
                not rely on or compile in any helper code.

                Mike


            I think it depends if someone else uses odp ring from
        helper or
            not. Ring itself might be useful as middle buffer between
            processes. Also I just added shm flag which is in our api
        to have
            smaller changes. I think later we can decided where it's
        better to
            move odp ring.


        I dont agree that we can decide later.  The test
        infrastructure that we decided to punt on to get 1.0 done is
        proving very difficult to fix now that it has established a
        pattern of use that is coupled to the platform is awkward
        ways, lets not do the same with helpers.

        Basing an implementation on optional code is not very robust,
        the makefile looks wrong with ../../ (below)

    we have the same for linux.c and it works. That looks good for me.
    Don't know why you don't like ../../


I object strongly to linux.c why is that built into the implementation when it is not an ODP API and is not in any way used by the implementation of linux-genric? It is optional support for tests, it makes no sense - this is exactly what I am trying to undo.

Ok, now looks like I understand. Looks like we wrongly compiled linux.c inside linux-generic implementation. linux-generic does not use any helper/linux.c functions. So that tests have to compile that helper on their build.
Send a quick patch for that.


        , we have made helpers not optional in this way. We compile in
        the now not optional ring.c and we dont test it or use it in
        any way at all!  that can't be correct.


    We compile it and test:
    ./test/api_test/odp_ring_test.c


        __LIB__libodp_la_SOURCES = \
        >------->------->-------   odp_barrier.c \
        >------->------->-------   odp_buffer.c \
        >------->------->------- odp_classification.c \
        >------->------->-------   odp_cpumask.c \
        >------->------->-------   odp_crypto.c \
        >------->------->-------   odp_errno.c \
        >------->------->-------   odp_event.c \
        >------->------->-------   odp_init.c \
        >------->------->-------   odp_impl.c \
        >------->------->------- ../../helper/linux.c \
        >------->------->-------   odp_packet.c \
        >------->------->------- odp_packet_flags.c \
        >------->------->-------   odp_packet_io.c \
        >------->------->------- odp_packet_socket.c \
        >------->------->-------   odp_pool.c \
        >------->------->-------   odp_queue.c \
        >------->------->------- ../../helper/ring.c \

        To share implementations, thus far KS2 and DPDK have their
        make file include the src from linux-generic as appropriate,
        so they will reuse ring & IPC from there and all re-use is
        then uniformly handled.


    Both KS2 and DPDK do not need odph_ring and linux-generic IPC for
    IPC support. IPC there will be implemented in different way. But
    if needed they can use odph_ring for something else


Sure, I have no objection to reusing the code, but I dont agree to doing so by including it from the helper directory.

I do not see nothing bad in including them. But that include has to be reasonable. In case of IPC it is reasonable (ring.c). In case of linux.c it's not reasonable due to implementation even do not use that functions.



        Let start by being clear what the helpers are before we start
        coupling them even more tightly with IPC.


    ok.

        Previously stated and presumed still true is this description
        "Helpers are there to help tests, examples and applications,
not implementations. Helpers are optional for applications" we need to establish this as fact before deciding much more.

        If helpers are not  separate support code from the
        implementation then we need to state that all implementations
        should compile them all in so that customers of vendor
        implementations can run the validation tests.


    I think that implementation should not be limitation here. If any
implementation wish to use helper it's free to do it.

    I would say that "Helpers are functions which are optional for
    applications. That function is very often used in ODP applications
but they are not separate ODP API.

If they are not separate why are they not in the ODP API ? We say very clearly that there are no optional odp apis yet here we are coding exactly that so lets add them to the API or not.
Because they are optional and you can create application without that functions. I.e. use systems one or create your custom function. Most of that function can not be HW offloaded so no need
to put them to separate API.


    These functions are not hided inside implementation so that apps
    can use them directly. "


    Maxim.

        Mike


            Maxim.


                On 8 May 2015 at 05:57, Maxim Uvarov
        <maxim.uva...@linaro.org <mailto:maxim.uva...@linaro.org>
                <mailto:maxim.uva...@linaro.org
        <mailto:maxim.uva...@linaro.org>>
                <mailto:maxim.uva...@linaro.org
        <mailto:maxim.uva...@linaro.org>
                <mailto:maxim.uva...@linaro.org
        <mailto:maxim.uva...@linaro.org>>>> wrote:

                    Signed-off-by: Maxim Uvarov
        <maxim.uva...@linaro.org <mailto:maxim.uva...@linaro.org>
                <mailto:maxim.uva...@linaro.org
        <mailto:maxim.uva...@linaro.org>>
                    <mailto:maxim.uva...@linaro.org
        <mailto:maxim.uva...@linaro.org>

                <mailto:maxim.uva...@linaro.org
        <mailto:maxim.uva...@linaro.org>>>>

                    ---
                     helper/include/odp/helper/ring.h | 2 ++
                     helper/ring.c                    | 9 ++++++++-
                     2 files changed, 10 insertions(+), 1 deletion(-)

                    diff --git a/helper/include/odp/helper/ring.h
                    b/helper/include/odp/helper/ring.h
                    index 65c32ad..5e640a7 100644
                    --- a/helper/include/odp/helper/ring.h
                    +++ b/helper/include/odp/helper/ring.h
                    @@ -158,6 +158,8 @@ typedef struct odph_ring {

                     #define ODPH_RING_F_SP_ENQ 0x0001 /* The default
        enqueue is
                    "single-producer".*/
                     #define ODPH_RING_F_SC_DEQ 0x0002 /* The default
        dequeue is
                    "single-consumer".*/
                    +#define ODPH_RING_SHM_PROC 0x0004 /* If set -
        ring is visible
                    from different
                    +  processes. Default is
                thread
                    visible.     */
                     #define ODPH_RING_QUOT_EXCEED (1 << 31) /* Quota
        exceed for
                    burst ops */
                     #define ODPH_RING_SZ_MASK (unsigned)(0x0fffffff)
        /* Ring size
                    mask */

                    diff --git a/helper/ring.c b/helper/ring.c
                    index a24a020..0927a6c 100644
                    --- a/helper/ring.c
                    +++ b/helper/ring.c
                    @@ -159,8 +159,14 @@ odph_ring_create(const char
        *name,
                unsigned
                    count, unsigned flags)
                            char ring_name[ODPH_RING_NAMESIZE];
                            odph_ring_t *r;
                            size_t ring_size;
                    +       uint32_t shm_flag;
                            odp_shm_t shm;

                    +       if (flags & ODPH_RING_SHM_PROC)
                    +               shm_flag = ODP_SHM_PROC;
                    +       else
                    +               shm_flag = 0;
                    +
                            /* count must be a power of 2 */
                            if (!ODP_VAL_IS_POWER_2(count) || (count >
                    ODPH_RING_SZ_MASK)) {
                                    ODP_ERR("Requested size is
        invalid, must
                be power
                    of 2, and  do not exceed the size limit %u\n",
                    @@ -173,7 +179,8 @@ odph_ring_create(const char *name,
                unsigned
                    count, unsigned flags)

        odp_rwlock_write_lock(&qlock);
                            /* reserve a memory zone for this ring.*/
                    -       shm = odp_shm_reserve(ring_name, ring_size,
                    ODP_CACHE_LINE_SIZE, 0);
                    +       shm = odp_shm_reserve(ring_name, ring_size,
                    ODP_CACHE_LINE_SIZE,
                    +                             shm_flag);

                            r = odp_shm_addr(shm);

                    --
                    1.9.1

        _______________________________________________
                    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>>
                <mailto: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





-- Mike Holmes
        Technical Manager - Linaro Networking Group
        Linaro.org <http://www.linaro.org/>***│ *Open source software
        for ARM SoCs





--
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

Reply via email to