On Mon, Dec 14, 2015 at 6:40 AM, Maxim Uvarov <maxim.uva...@linaro.org>
wrote:

> On 12/14/2015 14:39, Bill Fischofer wrote:
>
>>
>>
>> On Mon, Dec 14, 2015 at 3:24 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;
>>         +       int64_t tv_nsec;
>>         +} odp_time_t;
>>
>>
>>     Looks like that struct should be moved to ./include/odp/api/time.h
>>     Overwise apps will relay on different time structures which
>>     platforms can redifine.
>>
>>
>> odp_time_t, like other ODP types, expects a platform-dependent
>> definition.  There's no need to define the type as part of the ODP time
>> APIs.  I'll add this topic to today's arch call discussions.
>>
>
> In that case you need to add accessors and getters to time fields. I.e.
> apps can not directly relay on struct members.
> odp_time_sec(odp_time_t time)
> odp_time_sec_set(odp_time_t time)
> odp_time_nsec(odp_time_t time)
> odp_time_nsec_set(odp_time_t time)
>
> which looks ugly for me. It's better to define some common struct which
> apps can use directly.
>

That might not be a bad extension, but they are not currently part of the
API.  The only manipulations on odp_time_t currently defined are the
ability to convert an odp_time_t to and from nanoseconds, the ability to
get the current time, and the ability to add, subtract, and compare two
odp_time_t values.

>
> Maxim.
>
>
>>     Also doxygen notes are missing:
>>     /opt/Linaro/check-odp.git/build/odp-apply/include/odp/api/time.h:32:
>>     warning: documented symbol `odp_time_t' was not declared or defined.
>>
>> /opt/Linaro/check-odp.git/build/odp-apply/platform/linux-generic/include/odp/plat/time_types.h:25:
>>     warning: Member tv_sec (variable) of class odp_time_t is not
>>     documented.
>>
>> /opt/Linaro/check-odp.git/build/odp-apply/platform/linux-generic/include/odp/plat/time_types.h:26:
>>     warning: Member tv_nsec (variable) of class odp_time_t is not
>>     documented.
>>
>>     Maxim.
>>
>>
>>           -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