From: Pavan Bhagavatula <pbhagavat...@caviumnetworks.com>

This function can be used to check the role of a specific lcore.

Signed-off-by: Pavan Nikhilesh <pbhagavat...@caviumnetworks.com>
Acked-by: Harry van Haaren <harry.van.haa...@intel.com>
---

v3 changes:
 - moved changes to eal_common_thread.c
 - addressed coding style issues

v2 changes:
 - removed ack due to significant changes in patch
 - addressed review comments
 - modified commit title and message

 lib/librte_eal/bsdapp/eal/rte_eal_version.map   |  7 +++++++
 lib/librte_eal/common/eal_common_thread.c       | 14 ++++++++++++++
 lib/librte_eal/common/include/rte_lcore.h       | 14 ++++++++++++++
 lib/librte_eal/linuxapp/eal/rte_eal_version.map |  7 +++++++
 4 files changed, 42 insertions(+)

diff --git a/lib/librte_eal/bsdapp/eal/rte_eal_version.map 
b/lib/librte_eal/bsdapp/eal/rte_eal_version.map
index aac6fd7..19f75d9 100644
--- a/lib/librte_eal/bsdapp/eal/rte_eal_version.map
+++ b/lib/librte_eal/bsdapp/eal/rte_eal_version.map
@@ -237,3 +237,10 @@ EXPERIMENTAL {
        rte_service_unregister;

 } DPDK_17.08;
+
+DPDK_17.11 {
+       global:
+
+       rte_lcore_has_role;
+
+} DPDK_17.08;
diff --git a/lib/librte_eal/common/eal_common_thread.c 
b/lib/librte_eal/common/eal_common_thread.c
index 2405e93..55e9696 100644
--- a/lib/librte_eal/common/eal_common_thread.c
+++ b/lib/librte_eal/common/eal_common_thread.c
@@ -53,6 +53,20 @@ unsigned rte_socket_id(void)
        return RTE_PER_LCORE(_socket_id);
 }

+int
+rte_lcore_has_role(unsigned int lcore_id, enum rte_lcore_role_t role)
+{
+       struct rte_config *cfg = rte_eal_get_configuration();
+
+       if (lcore_id >= RTE_MAX_LCORE)
+               return -EINVAL;
+
+       if (cfg->lcore_role[lcore_id] == role)
+               return 0;
+
+       return -EINVAL;
+}
+
 int eal_cpuset_socket_id(rte_cpuset_t *cpusetp)
 {
        unsigned cpu = 0;
diff --git a/lib/librte_eal/common/include/rte_lcore.h 
b/lib/librte_eal/common/include/rte_lcore.h
index 50e0d0f..c89e6ba 100644
--- a/lib/librte_eal/common/include/rte_lcore.h
+++ b/lib/librte_eal/common/include/rte_lcore.h
@@ -262,6 +262,20 @@ void rte_thread_get_affinity(rte_cpuset_t *cpusetp);
  */
 int rte_thread_setname(pthread_t id, const char *name);

+/**
+ * Test if the core supplied has a specific role
+ *
+ * @param lcore_id
+ *   The identifier of the lcore, which MUST be between 0 and
+ *   RTE_MAX_LCORE-1.
+ * @param role
+ *   The role to be checked against.
+ * @return
+ *   On success, return 0; otherwise return a negative value.
+ */
+int
+rte_lcore_has_role(unsigned int lcore_id, enum rte_lcore_role_t role);
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/lib/librte_eal/linuxapp/eal/rte_eal_version.map 
b/lib/librte_eal/linuxapp/eal/rte_eal_version.map
index 3a8f154..60c2fbc 100644
--- a/lib/librte_eal/linuxapp/eal/rte_eal_version.map
+++ b/lib/librte_eal/linuxapp/eal/rte_eal_version.map
@@ -242,3 +242,10 @@ EXPERIMENTAL {
        rte_service_unregister;

 } DPDK_17.08;
+
+DPDK_17.11 {
+       global:
+
+       rte_lcore_has_role;
+
+} DPDK_17.08;
--
2.7.4

Reply via email to