Introduce function in <rte_lcore.h> to retrieve a lcore worker
thread's pthread id.

This change allows applications to do things like changing the name of
a lcore thread, or detect if it's getting interrupted (e.g. getting
preempted by another thread).

Signed-off-by: Mattias Rönnblom <mattias.ronnb...@ericsson.com>
---
 lib/librte_eal/common/eal_common_thread.c |  8 ++++++++
 lib/librte_eal/include/rte_lcore.h        | 14 ++++++++++++++
 lib/librte_eal/rte_eal_version.map        |  3 +++
 3 files changed, 25 insertions(+)

diff --git a/lib/librte_eal/common/eal_common_thread.c 
b/lib/librte_eal/common/eal_common_thread.c
index 73a055902..6233aef11 100644
--- a/lib/librte_eal/common/eal_common_thread.c
+++ b/lib/librte_eal/common/eal_common_thread.c
@@ -294,3 +294,11 @@ rte_thread_unregister(void)
                RTE_LOG(DEBUG, EAL, "Unregistered non-EAL thread (was lcore 
%u).\n",
                        lcore_id);
 }
+
+int rte_lcore_thread_id(unsigned int lcore_id, pthread_t *id)
+{
+       if (lcore_id >= RTE_MAX_LCORE)
+               return -1;
+       *id = lcore_config[lcore_id].thread_id;
+       return 0;
+}
diff --git a/lib/librte_eal/include/rte_lcore.h 
b/lib/librte_eal/include/rte_lcore.h
index b8b64a625..dae8d11ca 100644
--- a/lib/librte_eal/include/rte_lcore.h
+++ b/lib/librte_eal/include/rte_lcore.h
@@ -363,6 +363,20 @@ int rte_thread_set_affinity(rte_cpuset_t *cpusetp);
  */
 void rte_thread_get_affinity(rte_cpuset_t *cpusetp);
 
+/**
+ * Get the thread id of a lcore worker thread.
+ *
+ * @param lcore_id
+ *   The identifier of the lcore, which MUST be between 0 and RTE_MAX_LCORE-1.
+ * @param[out] id
+ *   A pointer that will be filled in with the lcore worker thread's POSIX
+ *   thread id, on success.
+ * @return
+ *   On success, return 0; otherwise return a negative value.
+ */
+__rte_experimental
+int rte_lcore_thread_id(unsigned int lcore_id, pthread_t *id);
+
 /**
  * Set thread names.
  *
diff --git a/lib/librte_eal/rte_eal_version.map 
b/lib/librte_eal/rte_eal_version.map
index bf0c17c23..571aacd17 100644
--- a/lib/librte_eal/rte_eal_version.map
+++ b/lib/librte_eal/rte_eal_version.map
@@ -403,6 +403,9 @@ EXPERIMENTAL {
        rte_mp_disable;
        rte_thread_register;
        rte_thread_unregister;
+
+       # added in 20.11
+       rte_lcore_thread_id;
 };
 
 INTERNAL {
-- 
2.25.1

Reply via email to