I do like having the _s as it is more readable IMO. What happens when you have 
a self reference in another structure.

#1
typedef struct odp_<name>_t {
        struct odp_<name>_t     * name;
} odp_<name>_t;

OR #2

typedef struct odp_<name>_s {
        struct odp_<name>_s     * name;
} odp_<name>_t;

OR #3

typedef struct odp_<name> {
        struct odp_<name>               * name;
} odp_<name>_t;

I feel like I am getting my eyes check is one better or two better or one 
better or three better :-)

I vote for #2 as it is the cleanest and most readable, we should not rely on 
the fact that structure name and typedef name are in different name spaces.

On Aug 29, 2014, at 12:34 PM, Mike Holmes <[email protected]> wrote:

> The common set is option 1, which is what we have in may places, I dont like 
> that we make it possible to reference the struct without the typedef, but 
> unless we have further dissent we have a winner.I think.
> 
> Mike
> 
> 
> 
> 
> On 29 August 2014 13:28, William Mills <[email protected]> wrote:
> OK, Yes I never say anything on this list but ...
> 
> 
> On 08/29/2014 01:19 PM, Mike Holmes wrote:
> Ok, I need a better feel for consensus here or it will flip flop :), as
> this impacts all structs we really need a final answer
> 
> typedef struct odp_<name>_t {...} odp_<name>_t;
> OR
> typedef struct odp_<name>_s {...} odp_<name>_t;
> OR
> typedef struct {...} odp_<name>_t;
> 
> I prefer the latter, why even name it unless you need to reference the
> name inside the struct being typedefed ?
> 
> 
> I wrote/collected our internal coding conventions and we insisted on a
> name.  The reason (at least at that time) was some debuggers showed the 
> structure name but not the typedef name.
> 
> We used struct odp_<name>_tag {...} to emphasize that it should not be
> used in the code.  In retrospect I don't like that but either the _s or
> _t above are OK.
> 
> 
> 
> 
> On 29 August 2014 13:10, Bill Fischofer <[email protected]
> <mailto:[email protected]>> wrote:
> 
>     We've been using odp_<name>_t for typedef stuff, taking advantage
>     that of the fact that struct tags occupy a different namespace.  So
> 
>     typedef struct odp_<name>_t {...} odp_<name>_t;
> 
>     is perfectly valid and unambiguous C and avoids additional namespace
>     clutter.
> 
>     odp_<name>_e has been suggested for ODP enums.
> 
>     Bill
> 
> 
>     On Fri, Aug 29, 2014 at 12:05 PM, Mike Holmes
>     <[email protected] <mailto:[email protected]>> wrote:
> 
> 
> 
> 
>         On 29 August 2014 03:59, Savolainen, Petri (NSN - FI/Espoo)
>         <[email protected] <mailto:[email protected]>> wrote:
> 
> 
> 
>              > -----Original Message-----
>              > From: [email protected]
>             <mailto:[email protected]> [mailto:lng-odp-
>             <mailto:lng-odp->
>              > [email protected]
>             <mailto:[email protected]>] On Behalf Of ext Mike Holmes
>              > Sent: Thursday, August 28, 2014 9:26 PM
>              > To: [email protected]
>             <mailto:[email protected]>
>              > Subject: [lng-odp] [PATCH v4] Add-global_init-paramiters
>              >
>              > Signed-off-by: Mike Holmes <[email protected]
>             <mailto:[email protected]>>
> 
>              > ---
>              >
>              > v2:
>              > Factor out odp_platform_init so that odp_global_init is
>             only defined
>              > for linux_generic and resued.
>              >
>              > v3:
>              > Use -M to simplify the diff
>              > Fix missing doxygen comments
>              >
>              > v4:
>              > Improve the documentation.
>              >
>              >  example/generator/odp_generator.c                  |  2 +-
>              >  example/l2fwd/odp_l2fwd.c                          |  2 +-
>              >  example/odp_example/odp_example.c                  |  2 +-
>              >  example/packet/odp_pktio.c                         |  2 +-
>              >  example/timer/odp_timer_test.c                     |  2 +-
>              >  platform/linux-dpdk/Makefile.am                    |  3 +-
>              >  platform/linux-dpdk/{odp_init.c => odp_platform.c} | 63
>             +----------------
>              > --
>              >  platform/linux-generic/Makefile.am                 |  1 +
>              >  platform/linux-generic/include/api/odp_init.h      | 34
>             +++++++---
>              >  platform/linux-generic/include/odp_internal.h      |  3 +
>              >  platform/linux-generic/odp_init.c                  |  9 ++-
>              >  platform/linux-generic/odp_platform.c              | 14
>             +++++
>              >  platform/linux-keystone2/Makefile.am               |  3 +-
>              >  .../linux-keystone2/{odp_init.c => odp_platform.c} | 72
>             +++--------------
>              > -----
>              >  test/api_test/odp_common.c                         |  2 +-
>              >  15 files changed, 72 insertions(+), 142 deletions(-)
>              >  rename platform/linux-dpdk/{odp_init.c =>
>             odp_platform.c} (50%)
>              >  create mode 100644 platform/linux-generic/odp_platform.c
>              >  rename platform/linux-keystone2/{odp_init.c =>
>             odp_platform.c} (72%)
>              >
>              > diff --git a/example/generator/odp_generator.c
>              > b/example/generator/odp_generator.c
>              > index 9fa9b37..ba7aa68 100644
>              > --- a/example/generator/odp_generator.c
>              > +++ b/example/generator/odp_generator.c
>              > @@ -525,7 +525,7 @@ int main(int argc, char *argv[])
>              >       int core_count;
>              >
>              >       /* Init ODP before calling anything else */
>              > -     if (odp_init_global()) {
>              > +     if (odp_init_global(NULL, NULL)) {
>              >               ODP_ERR("Error: ODP global init failed.\n");
>              >               exit(EXIT_FAILURE);
>              >       }
>              > diff --git a/example/l2fwd/odp_l2fwd.c
>             b/example/l2fwd/odp_l2fwd.c
>              > index d74449a..f8d6729 100644
>              > --- a/example/l2fwd/odp_l2fwd.c
>              > +++ b/example/l2fwd/odp_l2fwd.c
>              > @@ -323,7 +323,7 @@ int main(int argc, char *argv[])
>              >       odp_pktio_t pktio;
>              >
>              >       /* Init ODP before calling anything else */
>              > -     if (odp_init_global()) {
>              > +     if (odp_init_global(NULL, NULL)) {
>              >               ODP_ERR("Error: ODP global init failed.\n");
>              >               exit(EXIT_FAILURE);
>              >       }
>              > diff --git a/example/odp_example/odp_example.c
>              > b/example/odp_example/odp_example.c
>              > index f0bdf29..3d38ac7 100644
>              > --- a/example/odp_example/odp_example.c
>              > +++ b/example/odp_example/odp_example.c
>              > @@ -951,7 +951,7 @@ int main(int argc, char *argv[])
>              >
>              >       memset(thread_tbl, 0, sizeof(thread_tbl));
>              >
>              > -     if (odp_init_global()) {
>              > +     if (odp_init_global(NULL, NULL)) {
>              >               printf("ODP global init failed.\n");
>              >               return -1;
>              >       }
>              > diff --git a/example/packet/odp_pktio.c
>             b/example/packet/odp_pktio.c
>              > index f247bd0..f3543a0 100644
>              > --- a/example/packet/odp_pktio.c
>              > +++ b/example/packet/odp_pktio.c
>              > @@ -311,7 +311,7 @@ int main(int argc, char *argv[])
>              >       int core_count;
>              >
>              >       /* Init ODP before calling anything else */
>              > -     if (odp_init_global()) {
>              > +     if (odp_init_global(NULL, NULL)) {
>              >               ODP_ERR("Error: ODP global init failed.\n");
>              >               exit(EXIT_FAILURE);
>              >       }
>              > diff --git a/example/timer/odp_timer_test.c
>              > b/example/timer/odp_timer_test.c
>              > index bf1d7df..abf90aa 100644
>              > --- a/example/timer/odp_timer_test.c
>              > +++ b/example/timer/odp_timer_test.c
>              > @@ -260,7 +260,7 @@ int main(int argc, char *argv[])
>              >
>              >       memset(thread_tbl, 0, sizeof(thread_tbl));
>              >
>              > -     if (odp_init_global()) {
>              > +     if (odp_init_global(NULL, NULL)) {
>              >               printf("ODP global init failed.\n");
>              >               return -1;
>              >       }
>              > diff --git a/platform/linux-dpdk/Makefile.am
>             b/platform/linux-
>              > dpdk/Makefile.am
>              > index ff49b7d..70fa549 100644
>              > --- a/platform/linux-dpdk/Makefile.am
>              > +++ b/platform/linux-dpdk/Makefile.am
>              > @@ -67,13 +67,14 @@ __LIB__libodp_la_SOURCES = \
>              >                          odp_buffer.c \
>              >                          odp_buffer_pool.c \
>              >                          ../linux-generic/odp_coremask.c \
>              > -                        odp_init.c \
>              > +                        ../linux-generic/odp_init.c \
>              >                          odp_linux.c \
>              >                          odp_packet.c \
>              >                          odp_packet_dpdk.c \
>              >
>             ../linux-generic/odp_packet_flags.c \
>              >                          odp_packet_io.c \
>              >
>             ../linux-generic/odp_packet_socket.c \
>              > +                        odp_platform.c \
>              >                          odp_queue.c \
>              >                          ../linux-generic/odp_ring.c \
>              >                          ../linux-generic/odp_rwlock.c \
>              > diff --git a/platform/linux-dpdk/odp_init.c b/platform/linux-
>              > dpdk/odp_platform.c
>              > similarity index 50%
>              > rename from platform/linux-dpdk/odp_init.c
>              > rename to platform/linux-dpdk/odp_platform.c
>              > index ecc2066..5a054fd 100644
>              > --- a/platform/linux-dpdk/odp_init.c
>              > +++ b/platform/linux-dpdk/odp_platform.c
>              > @@ -1,4 +1,4 @@
>              > -/* Copyright (c) 2013, Linaro Limited
>              > +/* Copyright (c) 2014, Linaro Limited
>              >   * All rights reserved.
>              >   *
>              >   * SPDX-License-Identifier:     BSD-3-Clause
>              > @@ -9,7 +9,7 @@
>              >  #include <odp_debug.h>
>              >  #include <odp_packet_dpdk.h>
>              >
>              > -int odp_init_dpdk(void)
>              > +int odp_init_platform(odp_global_platform_init_t
>             *platform_params
>              > ODP_UNUSED)
>              >  {
>              >       int test_argc = 5;
>              >       char *test_argv[6];
>              > @@ -50,64 +50,7 @@ int odp_init_dpdk(void)
>              >       return 0;
>              >  }
>              >
>              > -int odp_init_global(void)
>              > +int odp_crypto_init_global(void)
> 
>             Is crypto init now in odp_platform.c? It should be in
>             odp_crypto.c or similar...
> 
>         no problem
>         I can make a dummy   odp_crypto.c for ks2 and point DPDK at the
>         linux generic. I was trying to avoid
>         connecting internals.
> 
> 
>              >  {
>              > -     odp_thread_init_global();
>              > -
>              > -     odp_system_info_init();
>              > -
>              > -     if (odp_init_dpdk()) {
>              > -             ODP_ERR("ODP dpdk init failed.\n");
>              > -             return -1;
>              > -     }
>              > -
>              > -     if (odp_shm_init_global()) {
>              > -             ODP_ERR("ODP shm init failed.\n");
>              > -             return -1;
>              > -     }
>              > -
>              > -     if (odp_buffer_pool_init_global()) {
>              > -             ODP_ERR("ODP buffer pool init failed.\n");
>              > -             return -1;
>              > -     }
>              > -
>              > -     if (odp_queue_init_global()) {
>              > -             ODP_ERR("ODP queue init failed.\n");
>              > -             return -1;
>              > -     }
>              > -
>              > -     if (odp_schedule_init_global()) {
>              > -             ODP_ERR("ODP schedule init failed.\n");
>              > -             return -1;
>              > -     }
>              > -
>              > -     if (odp_pktio_init_global()) {
>              > -             ODP_ERR("ODP packet io init failed.\n");
>              > -             return -1;
>              > -     }
>              > -
>              > -     if (odp_timer_init_global()) {
>              > -             ODP_ERR("ODP timer init failed.\n");
>              > -             return -1;
>              > -     }
>              > -
>              > -     return 0;
>              > -}
>              > -
>              > -
>              > -int odp_init_local(int thr_id)
>              > -{
>              > -     odp_thread_init_local(thr_id);
>              > -
>              > -     if (odp_pktio_init_local()) {
>              > -             ODP_ERR("ODP packet io local init failed.\n");
>              > -             return -1;
>              > -     }
>              > -
>              > -     if (odp_schedule_init_local()) {
>              > -             ODP_ERR("ODP schedule local init failed.\n");
>              > -             return -1;
>              > -     }
>              > -
>              >       return 0;
>              >  }
>              > diff --git a/platform/linux-generic/Makefile.am
>             b/platform/linux-
>              > generic/Makefile.am
>              > index f4dfdc1..c4aae9d 100644
>              > --- a/platform/linux-generic/Makefile.am
>              > +++ b/platform/linux-generic/Makefile.am
>              > @@ -62,6 +62,7 @@ __LIB__libodp_la_SOURCES = \
>              >                          odp_packet_flags.c \
>              >                          odp_packet_io.c \
>              >                          odp_packet_socket.c \
>              > +                        odp_platform.c \
>              >                          odp_queue.c \
>              >                          odp_ring.c \
>              >                          odp_rwlock.c \
>              > diff --git a/platform/linux-generic/include/api/odp_init.h
>              > b/platform/linux-generic/include/api/odp_init.h
>              > index 490324a..ece4547 100644
>              > --- a/platform/linux-generic/include/api/odp_init.h
>              > +++ b/platform/linux-generic/include/api/odp_init.h
>              > @@ -22,24 +22,42 @@ extern "C" {
>              >
>              >  #include <odp_std_types.h>
>              >
>              > -
>              > -
>              > +/** ODP  initialisation data.
>              > + * Data  that is required to initialize the ODP API with the
>              > + * application specific data such as specifying a
>             logging callback, the
>              > log
>              > + * level etc.
>              > + */
>              > +typedef struct odp_global_init {
> 
>             The struct name should be "struct odp_global_init_t",
>             "struct odp_global_init_s" or "struct odp_global_init_".
> 
>             The name without postfix (odp_global_init) should be
>             reserved for variable names.
>             no probelm
> 
>         I will go with odp_init_s
> 
>              > +} odp_global_init_t;
> 
>             In short, this could be named odp_init_t. It's the main init
>             struct there will be.
>             If there will be a local init struct it could be then
>             odp_init_local_t...
> 
>              > +
>              > +/** ODP platform initialization data.
>              > + * @note ODP API does nothing with this data. It is the
>             underlying
>              > + * implementation requires it and any data passed here
>             is not portable.
>              > + * It is required that the application takes care of
>             identifying and
>              > + * passing any required platform specific data.
>              > + */
>              > +typedef struct odp_global_platform_init {
> 
>             Same thing, rename struct.
> 
>         no problem
>         odp_init_platform_s
> 
> 
>              > +} odp_platform_init_t;
> 
> 
>             Same thing, odp_platform_init_t ??
> 
> 
>              >
>              >  /**
>              > - * Perform global ODP initalisation.
>              > - *
>              > - * This function must be called once before calling
>              > - * any other ODP API functions.
>              > + * Perform global ODP initialisation.
>              >   *
>              > + * This function must be called once before calling any
>             other ODP API
>              > + * functions.
>              > + * @param[in] params Those parameters that are
>             interpreted by the ODP API
> 
>             "Those parameters that are common to all ODP
>             implementations. Specified in this API"
> 
>             API does not interpret, implementation does...
> 
> 
>         Ok, I am struggling with names
> 
>         how about "platform SDK" for the underlying code such as DPDK,
>         so that the platform has an API
>         implementation -  which is actually implemented in terms of a
>         platform SDK
> 
>         We need to distinguish that implementations should not use the
>         platform parameters unless the underlying
>         framework requires it, not that any implementation is free to
>         just add local stuff - or thats how it feels to me at least.
> 
> 
>              > + * @param[in] platform_params Those parameters that are
>             passed without
>              > + * interpretation by the ODP API to the implementation.
> 
>             " ... implementation specific parameter. Specified outside
>             of ODP API"
> 
>              >   * @return 0 if successful
>              >   */
>              > -int odp_init_global(void);
>              > +int odp_init_global(odp_global_init_t *params,
>              > +                 odp_global_platform_init_t
>             *platform_params);
>              >
>              >
>              >  /**
>              > - * Perform thread local ODP initalisation.
>              > + * Perform thread local ODP initialisation.
>              >   *
>              >   * All threads must call this function before calling
>              > + *
> 
>             Extra line feed?
> 
>         Will fix
> 
> 
>              >   * any other ODP API functions.
>              >   * @param thr_id Thread id
>              >   * @return 0 if successful
>              > diff --git a/platform/linux-generic/include/odp_internal.h
>              > b/platform/linux-generic/include/odp_internal.h
>              > index aa79493..6c71fc9 100644
>              > --- a/platform/linux-generic/include/odp_internal.h
>              > +++ b/platform/linux-generic/include/odp_internal.h
>              > @@ -4,6 +4,7 @@
>              >   * SPDX-License-Identifier:     BSD-3-Clause
>              >   */
>              >
>              > +#include <odp_init.h>
>              >
>              >  /**
>              >   * @file
>              > @@ -42,6 +43,8 @@ int odp_schedule_init_local(void);
>              >  int odp_timer_init_global(void);
>              >  int odp_timer_disarm_all(void);
>              >
>              > +int odp_init_platform(odp_global_platform_init_t
>             *platform_params);
>              > +
>              >  #ifdef __cplusplus
>              >  }
>              >  #endif
>              > diff --git a/platform/linux-generic/odp_init.c
>             b/platform/linux-
>              > generic/odp_init.c
>              > index 5b7e192..f595def 100644
>              > --- a/platform/linux-generic/odp_init.c
>              > +++ b/platform/linux-generic/odp_init.c
>              > @@ -8,13 +8,18 @@
>              >  #include <odp_internal.h>
>              >  #include <odp_debug.h>
>              >
>              > -
>              > -int odp_init_global(void)
>              > +int odp_init_global(odp_global_init_t *params  ODP_UNUSED,
>              > +                 odp_global_platform_init_t
>             *platform_params ODP_UNUSED)
>              >  {
>              >       odp_thread_init_global();
>              >
>              >       odp_system_info_init();
>              >
>              > +     if (odp_init_platform(platform_params)) {
> 
>             platform_params is used here, so remove ODP_UNUSED from
>             argument list.
> 
>             On the other hand, it would be better to remove
>             odp_init_platform()
>             altogether since does not do anything. It's better to add it
>             when actually used.
>             The order of init calls is very important, e.g. now you
>             could not allocate shared
>             memory in odp_init_platform() because it's executed before
>             shm init...
> 
>           odp_init_platform() does do something for DPDK / KS2 and we
>         need a place holder because
>         we want this to be shared between implementations don't we ?
>         This is the stuff that must happen before any ODP init starts to
>         satisfy the platform SDK
> 
> 
>             - Petri
> 
>              > +             ODP_ERR("ODP platform init failed.\n");
>              > +             return -1;
>              > +     }
>              > +
>              >       if (odp_shm_init_global()) {
>              >               ODP_ERR("ODP shm init failed.\n");
>              >               return -1;
>              > diff --git a/platform/linux-generic/odp_platform.c
>             b/platform/linux-
>              > generic/odp_platform.c
>              > new file mode 100644
>              > index 0000000..a9efa7f
>              > --- /dev/null
>              > +++ b/platform/linux-generic/odp_platform.c
>              > @@ -0,0 +1,14 @@
>              > +/* Copyright (c) 2014, Linaro Limited
>              > + * All rights reserved.
>              > + *
>              > + * SPDX-License-Identifier:     BSD-3-Clause
>              > + */
>              > +
>              > +#include <odp_init.h>
>              > +#include <odp_internal.h>
>              > +#include <odp_debug.h>
>              > +
>              > +int odp_init_platform(odp_global_platform_init_t
>             *platform_params
>              > ODP_UNUSED)
>              > +{
>              > +     return 0;
>              > +}
> 
> 
> 
> 
> 
> 
> 
>         --
>         *Mike Holmes*
> 
>         Linaro Technical Manager / Lead
>         LNG - ODP
> 
>         _______________________________________________
>         lng-odp mailing list
>         [email protected] <mailto:[email protected]>
>         http://lists.linaro.org/mailman/listinfo/lng-odp
> 
> 
> 
> 
> 
> --
> *Mike Holmes*
> 
> Linaro Technical Manager / Lead
> LNG - ODP
> 
> 
> _______________________________________________
> lng-odp mailing list
> [email protected]
> http://lists.linaro.org/mailman/listinfo/lng-odp
> 
> 
> 
> To unsubscribe from this group and stop receiving emails from it, send an 
> email to [email protected].
> 
> 
> 
> 
> -- 
> Mike Holmes 
> Linaro Technical Manager / Lead 
> LNG - ODP
> _______________________________________________
> lng-odp mailing list
> [email protected]
> http://lists.linaro.org/mailman/listinfo/lng-odp

Keith Wiles, Principal Technologist with CTO office, Wind River mobile 
972-213-5533


_______________________________________________
lng-odp mailing list
[email protected]
http://lists.linaro.org/mailman/listinfo/lng-odp

Reply via email to