Signed-off-by: Matias Elo <matias....@nokia.com>
---
 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

Reply via email to