The comments in the file say that.  I'd assume each commit message as this
file grows would describe the specific reason for its changes.

On Thu, Sep 3, 2015 at 2:14 PM, Mike Holmes <[email protected]> wrote:

>
>
> On 3 September 2015 at 14:59, Bill Fischofer <[email protected]>
> wrote:
>
>> With the addition of ordered queues, there is a circular typedef
>> relationship between odp_queue_internal.h and odp_buffer_internal.h.
>> The standard forward declaration technique that GCC accepts is strictly
>> not acceptable to C99 and is flagged by clang. The solution is to create
>> a common header file that can contain these forward declarations.
>>
>> Signed-off-by: Bill Fischofer <[email protected]>
>>
>
> Reviewed-by: Mike Holmes
>
>
>> ---
>>  platform/linux-generic/Makefile.am                 |  1 +
>>  .../linux-generic/include/odp_buffer_internal.h    | 11 ++------
>>  .../include/odp_forward_typedefs_internal.h        | 32
>> ++++++++++++++++++++++
>>  .../linux-generic/include/odp_queue_internal.h     |  5 ++--
>>  4 files changed, 39 insertions(+), 10 deletions(-)
>>  create mode 100644
>> platform/linux-generic/include/odp_forward_typedefs_internal.h
>>
>> diff --git a/platform/linux-generic/Makefile.am
>> b/platform/linux-generic/Makefile.am
>> index f2c081a..4c79730 100644
>> --- a/platform/linux-generic/Makefile.am
>> +++ b/platform/linux-generic/Makefile.am
>> @@ -122,6 +122,7 @@ noinst_HEADERS = \
>>                   ${srcdir}/include/odp_classification_internal.h \
>>                   ${srcdir}/include/odp_crypto_internal.h \
>>                   ${srcdir}/include/odp_debug_internal.h \
>> +                 ${srcdir}/include/odp_forward_typedefs_internal.h \
>>                   ${srcdir}/include/odp_internal.h \
>>                   ${srcdir}/include/odp_packet_internal.h \
>>                   ${srcdir}/include/odp_packet_io_internal.h \
>> diff --git a/platform/linux-generic/include/odp_buffer_internal.h
>> b/platform/linux-generic/include/odp_buffer_internal.h
>> index 6badeba..4cacca1 100644
>> --- a/platform/linux-generic/include/odp_buffer_internal.h
>> +++ b/platform/linux-generic/include/odp_buffer_internal.h
>> @@ -29,7 +29,7 @@ extern "C" {
>>  #include <odp/byteorder.h>
>>  #include <odp/thread.h>
>>  #include <odp/event.h>
>> -
>> +#include <odp_forward_typedefs_internal.h>
>>
>>  #define ODP_BITSIZE(x) \
>>         ((x) <=     2 ?  1 : \
>> @@ -101,13 +101,8 @@ typedef union odp_buffer_bits_t {
>>         };
>>  } odp_buffer_bits_t;
>>
>> -/* forward declaration */
>> -struct odp_buffer_hdr_t;
>> -union queue_entry_u;
>> -typedef union queue_entry_u queue_entry_t;
>> -
>>  /* Common buffer header */
>> -typedef struct odp_buffer_hdr_t {
>> +struct odp_buffer_hdr_t {
>>         struct odp_buffer_hdr_t *next;       /* next buf in a list--keep
>> 1st */
>>         union {                              /* Multi-use secondary link
>> */
>>                 struct odp_buffer_hdr_t *prev;
>> @@ -144,7 +139,7 @@ typedef struct odp_buffer_hdr_t {
>>                 queue_entry_t   *target_qe;  /* ordered queue target */
>>                 uint64_t         sync;       /* for ordered
>> synchronization */
>>         };
>> -} odp_buffer_hdr_t;
>> +};
>>
>>  /** @internal Compile time assert that the
>>   * allocator field can handle any allocator id*/
>> diff --git
>> a/platform/linux-generic/include/odp_forward_typedefs_internal.h
>> b/platform/linux-generic/include/odp_forward_typedefs_internal.h
>> new file mode 100644
>> index 0000000..f8832f7
>> --- /dev/null
>> +++ b/platform/linux-generic/include/odp_forward_typedefs_internal.h
>> @@ -0,0 +1,32 @@
>> +/* Copyright (c) 2015, Linaro Limited
>> + * All rights reserved.
>> + *
>> + * SPDX-License-Identifier:     BSD-3-Clause
>> + */
>> +
>> +/**
>> + * @file
>> + *
>> + * ODP forward typedefs - implementation internal
>> + *
>> + * This needs to be a separate file because it is needed by both
>> + * odp_queue_internal.h and odp_buffer_internal.h and clang prohibits
>> forward
>> + * "redefining" typedefs. Note that this file can be extended with
>> additional
>> + * forward typedefs as needed.
>> + */
>>
>
> Nit: I think this would be cleaner just saying the following to save
> editing when updated with a new define.
>
> Contains forward typedefs when multiple files need the same definition.
>
>
>
>> +
>> +#ifndef ODP_FORWARD_TYPEDEFS_INTERNAL_H_
>> +#define ODP_FORWARD_TYPEDEFS_INTERNAL_H_
>> +
>> +#ifdef __cplusplus
>> +extern "C" {
>> +#endif
>> +
>> +typedef struct odp_buffer_hdr_t odp_buffer_hdr_t;
>> +typedef union queue_entry_u queue_entry_t;
>> +
>> +#ifdef __cplusplus
>> +}
>> +#endif
>> +
>> +#endif
>> diff --git a/platform/linux-generic/include/odp_queue_internal.h
>> b/platform/linux-generic/include/odp_queue_internal.h
>> index 0f30965..19a0f07 100644
>> --- a/platform/linux-generic/include/odp_queue_internal.h
>> +++ b/platform/linux-generic/include/odp_queue_internal.h
>> @@ -19,6 +19,7 @@ extern "C" {
>>  #endif
>>
>>  #include <odp/queue.h>
>> +#include <odp_forward_typedefs_internal.h>
>>  #include <odp_buffer_internal.h>
>>  #include <odp_align_internal.h>
>>  #include <odp/packet_io.h>
>> @@ -86,10 +87,10 @@ struct queue_entry_s {
>>         odp_atomic_u64_t  sync_out;
>>  };
>>
>> -typedef union queue_entry_u {
>> +union queue_entry_u {
>>         struct queue_entry_s s;
>>         uint8_t pad[ODP_CACHE_LINE_SIZE_ROUNDUP(sizeof(struct
>> queue_entry_s))];
>> -} queue_entry_t;
>> +};
>>
>>
>>  queue_entry_t *get_qentry(uint32_t queue_id);
>> --
>> 2.1.4
>>
>> _______________________________________________
>> lng-odp mailing list
>> [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