Thanks. I'll pop over to that thread to take a look. However odp_time_t should be opaque from a user perspective--that's the purpose of having abstract types in the first place.
On Thu, Dec 10, 2015 at 9:00 AM, Mike Holmes <mike.hol...@linaro.org> wrote: > Is anyone following the OFP project, they are also discussing this struct > from a user of ODPs perspctive on a couple of threads like > http://www.openfastpath.org/pipermail/openfastpath/2015-December/000048.html > > On 10 December 2015 at 08:07, Bill Fischofer <bill.fischo...@linaro.org> > wrote: > >> >> >> 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 >> >> > > > -- > Mike Holmes > Technical Manager - Linaro Networking Group > Linaro.org <http://www.linaro.org/> *│ *Open source software for ARM SoCs > > >
_______________________________________________ lng-odp mailing list lng-odp@lists.linaro.org https://lists.linaro.org/mailman/listinfo/lng-odp