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