aboutsummaryrefslogtreecommitdiff
path: root/platform
diff options
context:
space:
mode:
authorIvan Khoronzhuk <ivan.khoronzhuk@linaro.org>2016-01-22 16:05:56 +0200
committerIvan Khoronzhuk <ivan.khoronzhuk@linaro.org>2016-02-10 15:36:20 +0200
commitfddbaf8a25abccb2a3beb63192fac3926603815c (patch)
tree8104e288a44a6035c24c504d77a11c2d831248e0 /platform
parent66e397f398444253cf17a40a492d5c63aae92507 (diff)
linux-ks2: time: assign local start time for each thread
It's correct to use own start time for each thread running on it's own CPU. Signed-off-by: Ivan Khoronzhuk <ivan.khoronzhuk@linaro.org>
Diffstat (limited to 'platform')
-rw-r--r--platform/linux-keystone2/include/odp_internal.h5
-rw-r--r--platform/linux-keystone2/odp_init.c8
-rw-r--r--platform/linux-keystone2/odp_time.c11
3 files changed, 16 insertions, 8 deletions
diff --git a/platform/linux-keystone2/include/odp_internal.h b/platform/linux-keystone2/include/odp_internal.h
index b3c78916..54c2585f 100644
--- a/platform/linux-keystone2/include/odp_internal.h
+++ b/platform/linux-keystone2/include/odp_internal.h
@@ -74,8 +74,9 @@ int odp_schedule_term_global(void);
int odp_schedule_init_local(int thr_id);
int odp_schedule_term_local(void);
-int odp_time_init_global(void);
-int odp_time_term_global(void);
+int odp_time_local_init(void);
+int odp_time_global_init(void);
+int odp_time_global_term(void);
int odp_timer_init_global(void);
int odp_timer_term_global(void);
diff --git a/platform/linux-keystone2/odp_init.c b/platform/linux-keystone2/odp_init.c
index 4e420b2d..cd40bbb7 100644
--- a/platform/linux-keystone2/odp_init.c
+++ b/platform/linux-keystone2/odp_init.c
@@ -74,14 +74,14 @@ int _odp_term_global(enum init_stage stage)
/* Fall through */
case MCSDK_INIT:
- if (odp_time_term_global()) {
+ if (mcsdk_global_term()) {
ODP_ERR("McSDK termination failed\n");
rc = -1;
}
/* Fall through */
case TIME_INIT:
- if (odp_time_term_global()) {
+ if (odp_time_global_term()) {
ODP_ERR("ODP time term failed.\n");
rc = -1;
}
@@ -164,7 +164,7 @@ int odp_init_global(const odp_init_t *params,
}
stage = MCSDK_INIT;
- if (odp_time_init_global()) {
+ if (odp_time_global_init()) {
ODP_ERR("ODP time init failed.\n");
goto init_failed;
}
@@ -255,6 +255,8 @@ int odp_init_local(odp_thread_type_t thr_type)
return -1;
}
+ odp_time_local_init();
+
if (odp_schedule_init_local(thread_id)) {
odp_pr_err("ODP schedule local init failed.\n");
return -1;
diff --git a/platform/linux-keystone2/odp_time.c b/platform/linux-keystone2/odp_time.c
index 8cd3de7a..07afdc0e 100644
--- a/platform/linux-keystone2/odp_time.c
+++ b/platform/linux-keystone2/odp_time.c
@@ -21,7 +21,7 @@ typedef struct time_data_s {
odp_time_t start;
} time_data_t;
-static time_data_t local_time;
+static __thread time_data_t local_time;
static inline uint64_t time_local_res(void)
{
@@ -171,7 +171,7 @@ uint64_t odp_time_to_u64(odp_time_t time)
return time.tick;
}
-int odp_time_init_global(void)
+int odp_time_local_init(void)
{
local_time.rate = hplib_mUtilGetTicksPerSec();
local_time.ns_to_tick = (double)local_time.rate / GIGA;
@@ -181,7 +181,12 @@ int odp_time_init_global(void)
return 0;
}
-int odp_time_term_global(void)
+int odp_time_global_init(void)
+{
+ return 0;
+}
+
+int odp_time_global_term(void)
{
return 0;
}