Signed-off-by: Matias Elo <[email protected]>
---
platform/linux-generic/Makefile.am | 1 +
platform/linux-generic/include/odp_thread_internal.h | 20 ++++++++++++++++++++
platform/linux-generic/odp_thread.c | 10 ++++++++++
3 files changed, 31 insertions(+)
create mode 100644 platform/linux-generic/include/odp_thread_internal.h
diff --git a/platform/linux-generic/Makefile.am
b/platform/linux-generic/Makefile.am
index 056ba67..b2ae971 100644
--- a/platform/linux-generic/Makefile.am
+++ b/platform/linux-generic/Makefile.am
@@ -144,6 +144,7 @@ noinst_HEADERS = \
${srcdir}/include/odp_schedule_if.h \
${srcdir}/include/odp_sorted_list_internal.h \
${srcdir}/include/odp_shm_internal.h \
+ ${srcdir}/include/odp_thread_internal.h \
${srcdir}/include/odp_timer_internal.h \
${srcdir}/include/odp_timer_wheel_internal.h \
${srcdir}/include/odp_traffic_mngr_internal.h \
diff --git a/platform/linux-generic/include/odp_thread_internal.h
b/platform/linux-generic/include/odp_thread_internal.h
new file mode 100644
index 0000000..9a8e482
--- /dev/null
+++ b/platform/linux-generic/include/odp_thread_internal.h
@@ -0,0 +1,20 @@
+/* Copyright (c) 2017, Linaro Limited
+ * All rights reserved.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+
+#ifndef ODP_THREAD_INTERNAL_H_
+#define ODP_THREAD_INTERNAL_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+pid_t sys_thread_id(void);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/platform/linux-generic/odp_thread.c
b/platform/linux-generic/odp_thread.c
index 33a8a7f..e98fa7a 100644
--- a/platform/linux-generic/odp_thread.c
+++ b/platform/linux-generic/odp_thread.c
@@ -17,15 +17,19 @@
#include <odp/api/align.h>
#include <odp/api/cpu.h>
#include <odp_schedule_if.h>
+#include <odp_thread_internal.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
+#include <sys/syscall.h>
+#include <unistd.h>
typedef struct {
int thr;
int cpu;
odp_thread_type_t type;
+ pid_t sys_thr_id;
} thread_state_t;
@@ -135,6 +139,11 @@ static int free_id(int thr)
return thread_globals->num;
}
+pid_t sys_thread_id(void)
+{
+ return this_thread->sys_thr_id;
+}
+
int odp_thread_init_local(odp_thread_type_t type)
{
int id;
@@ -159,6 +168,7 @@ int odp_thread_init_local(odp_thread_type_t type)
thread_globals->thr[id].thr = id;
thread_globals->thr[id].cpu = cpu;
thread_globals->thr[id].type = type;
+ thread_globals->thr[id].sys_thr_id = (pid_t)syscall(SYS_gettid);
this_thread = &thread_globals->thr[id];
--
2.7.4