On 9 December 2015 at 16:53, Bill Fischofer <bill.fischo...@linaro.org>
wrote:

> The linux-generic implementation of odp_time_t makes use of POSIX
> APIs that are sensitive to the _POSIX_C_SOURCE level. Use an indirection
> mechanism so that these dependencies do not "bleed through" the ODP API.
> This means that ODP applications can be independent of _POSIX_C_SOURCE
> level.
>
Yes this is the way it should be done. This is also another step in the ODP
API becoming binary portable and run-time independent of the actual
implementation.


>
> Signed-off-by: Bill Fischofer <bill.fischo...@linaro.org>
> ---
>  .../linux-generic/include/odp/plat/time_types.h    |  5 +++-
>  platform/linux-generic/odp_time.c                  | 27
> +++++++++++++---------
>  2 files changed, 20 insertions(+), 12 deletions(-)
>
> diff --git a/platform/linux-generic/include/odp/plat/time_types.h
> b/platform/linux-generic/include/odp/plat/time_types.h
> index e5765ec..05e2b59 100644
> --- a/platform/linux-generic/include/odp/plat/time_types.h
> +++ b/platform/linux-generic/include/odp/plat/time_types.h
> @@ -21,7 +21,10 @@ extern "C" {
>   *  @{
>   **/
>
> -typedef struct timespec odp_time_t;
> +typedef struct {
> +       uint64_t tv_sec;
> +       int64_t  tv_nsec;
> +} odp_time_t;
>
>  odp_time_t odp_time_null(void);
>
> diff --git a/platform/linux-generic/odp_time.c
> b/platform/linux-generic/odp_time.c
> index 1c7c214..b5737f6 100644
> --- a/platform/linux-generic/odp_time.c
> +++ b/platform/linux-generic/odp_time.c
> @@ -11,7 +11,12 @@
>  #include <odp/hints.h>
>  #include <odp_debug_internal.h>
>
> -static struct timespec start_time;
> +typedef union {
> +       odp_time_t      ex;
> +       struct timespec in;
> +} _odp_time_t;
> +
> +static odp_time_t start_time;
>
>  static inline
>  uint64_t time_to_ns(odp_time_t time)
> @@ -27,7 +32,7 @@ uint64_t time_to_ns(odp_time_t time)
>  static inline
>  odp_time_t time_diff(odp_time_t t2, odp_time_t t1)
>  {
> -       struct timespec time;
> +       odp_time_t time;
>
>         time.tv_sec = t2.tv_sec - t1.tv_sec;
>         time.tv_nsec = t2.tv_nsec - t1.tv_nsec;
> @@ -43,13 +48,13 @@ odp_time_t time_diff(odp_time_t t2, odp_time_t t1)
>  odp_time_t odp_time_local(void)
>  {
>         int ret;
> -       struct timespec time;
> +       _odp_time_t time;
>
> -       ret = clock_gettime(CLOCK_MONOTONIC_RAW, &time);
> +       ret = clock_gettime(CLOCK_MONOTONIC_RAW, &time.in);
>         if (odp_unlikely(ret != 0))
>                 ODP_ABORT("clock_gettime failed\n");
>
> -       return time_diff(time, start_time);
> +       return time_diff(time.ex, start_time);
>  }
>
>  odp_time_t odp_time_diff(odp_time_t t2, odp_time_t t1)
> @@ -64,7 +69,7 @@ uint64_t odp_time_to_ns(odp_time_t time)
>
>  odp_time_t odp_time_local_from_ns(uint64_t ns)
>  {
> -       struct timespec time;
> +       odp_time_t time;
>
>         time.tv_sec = ns / ODP_TIME_SEC_IN_NS;
>         time.tv_nsec = ns - time.tv_sec * ODP_TIME_SEC_IN_NS;
> @@ -85,7 +90,7 @@ int odp_time_cmp(odp_time_t t2, odp_time_t t1)
>
>  odp_time_t odp_time_sum(odp_time_t t1, odp_time_t t2)
>  {
> -       struct timespec time;
> +       odp_time_t time;
>
>         time.tv_sec = t2.tv_sec + t1.tv_sec;
>         time.tv_nsec = t2.tv_nsec + t1.tv_nsec;
> @@ -115,16 +120,16 @@ uint64_t odp_time_to_u64(odp_time_t time)
>
>  odp_time_t odp_time_null(void)
>  {
> -       return (struct timespec) {0, 0};
> +       return (odp_time_t) {0, 0};
>  }
>
>  int odp_time_global_init(void)
>  {
>         int ret;
> -       struct timespec time;
> +       _odp_time_t time;
>
> -       ret = clock_gettime(CLOCK_MONOTONIC_RAW, &time);
> -       start_time = ret ? odp_time_null() : time;
> +       ret = clock_gettime(CLOCK_MONOTONIC_RAW, &time.in);
> +       start_time = ret ? odp_time_null() : time.ex;
>
>         return ret;
>  }
> --
> 2.1.4
>
> _______________________________________________
> 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

Reply via email to