On 12/11/2015 16:30, Bill Fischofer wrote:


On Fri, Dec 11, 2015 at 7:27 AM, Maxim Uvarov <maxim.uva...@linaro.org <mailto:maxim.uva...@linaro.org>> wrote:

    On 12/11/2015 16:22, Bill Fischofer 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.

        Signed-off-by: Bill Fischofer <bill.fischo...@linaro.org
        <mailto:bill.fischo...@linaro.org>>
        ---
          .../linux-generic/include/odp/plat/time_types.h |  9 ++++---
          platform/linux-generic/odp_time.c                  | 30
        +++++++++++-----------
          2 files changed, 20 insertions(+), 19 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..e999beb 100644
        --- a/platform/linux-generic/include/odp/plat/time_types.h
        +++ b/platform/linux-generic/include/odp/plat/time_types.h
        @@ -21,11 +21,12 @@ extern "C" {
           *  @{
           **/
          -typedef struct timespec odp_time_t;
        +typedef struct {
        +       int64_t tv_sec;

    time_t is not reachable?

Not sure I understand this comment.  Can you elaborate?

I think this patch is correct. First argument might be time_t, but looks like it's the same size as everywhere.

Will hold patch for some small time to see of somebody have any objections.

Maxim.

        +       int64_t tv_nsec;
        +} odp_time_t;
          -odp_time_t odp_time_null(void);
        -
        -#define ODP_TIME_NULL  odp_time_null()
        +#define ODP_TIME_NULL ((odp_time_t){0, 0})
            /**
           * @}
        diff --git a/platform/linux-generic/odp_time.c
        b/platform/linux-generic/odp_time.c
        index 1c7c214..9b64b37 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
        <http://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;
        @@ -113,18 +118,13 @@ uint64_t odp_time_to_u64(odp_time_t time)
                return time_to_ns(time) / resolution;
          }
          -odp_time_t odp_time_null(void)
        -{
        -       return (struct timespec) {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
        <http://time.in>);
        +       start_time = ret ? ODP_TIME_NULL : time.ex;
                return ret;
          }


    _______________________________________________
    lng-odp mailing list
    lng-odp@lists.linaro.org <mailto: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