On Thu, Dec 10, 2015 at 2:05 AM, Ivan Khoronzhuk <ivan.khoronz...@linaro.org
> wrote:

>
>
> On 10.12.15 08:42, Maxim Uvarov wrote:
>
>> Going to apply this patch to unblock builds in new distros. Any
>> objections?
>>
>> Maxim.
>>
>
> I worry about change of timespec struct can break linux-generic time API.
> I believe it will not happen, but that's why I like Maxim`s approach a
> little more.
> [lng-odp] [API-NEXT PATCH 2/2] linux-generic: time: use same type as
> returned



In the (unlikely) event that the struct changes and that change would be
made in a non-backward compatible manner, then inn that case ODP would
simply update the implementation to  match the new internal API while
maintaining the
external definition.  This might involve changing the union to do
intermediate copies, however for now the union is more efficient, which is
why that's the technique used here.


>
>
>> On 12/09/2015 19:25, Ola Liljedahl wrote:
>>
>>> On 9 December 2015 at 16:53, Bill Fischofer <bill.fischo...@linaro.org
>>> <mailto: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
>>>     <mailto: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
>>>     <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;
>>>     @@ -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
>>>     <http://time.in>);
>>>     +       start_time = ret ? odp_time_null() : time.ex;
>>>
>>>             return ret;
>>>      }
>>>     --
>>>     2.1.4
>>>
>>>     _______________________________________________
>>>     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
>>>
>>
>> _______________________________________________
>> lng-odp mailing list
>> lng-odp@lists.linaro.org
>> https://lists.linaro.org/mailman/listinfo/lng-odp
>>
>
> --
> Regards,
> Ivan Khoronzhuk
>
> _______________________________________________
> 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