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