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