#define LCORE_ID_ANY UINT32_MAX /**< Any lcore. */
RTE_DECLARE_PER_LCORE(unsigned, _lcore_id); /**< Per thread "lcore id". */
-RTE_DECLARE_PER_LCORE(rte_cpuset_t, _cpuset); /**< Per thread "cpuset". */
+
+/**
+ * The lcore role (used in RTE or not).
+ */
+enum rte_lcore_role_t {
+ ROLE_RTE,
+ ROLE_OFF,
+ ROLE_SERVICE,
+ ROLE_NON_EAL,
+};
/**
* Get a lcore's role.
*/
enum rte_lcore_role_t rte_eal_lcore_role(unsigned int lcore_id);
+/**
+ * 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
+ * Boolean value: positive if test is true; otherwise returns 0.
+ */
+int
+rte_lcore_has_role(unsigned int lcore_id, enum rte_lcore_role_t role);
+
/**
* Return the Application thread ID of the execution unit.
*
* to run threads with lcore IDs 0, 1, 2 and 3 on physical core 10..
*
* @return
- * Logical core ID (in EAL thread) or LCORE_ID_ANY (in non-EAL thread)
+ * Logical core ID (in EAL thread or registered non-EAL thread) or
+ * LCORE_ID_ANY (in unregistered non-EAL thread)
*/
static inline unsigned
rte_lcore_id(void)
*/
int rte_thread_setname(pthread_t id, const char *name);
+/**
+ * Get thread name.
+ *
+ * @note It fails with glibc < 2.12.
+ *
+ * @param id
+ * Thread id.
+ * @param name
+ * Thread name to set.
+ * @param len
+ * Thread name buffer length.
+ * @return
+ * On success, return 0; otherwise return a negative value.
+ */
+__rte_experimental
+int rte_thread_getname(pthread_t id, char *name, size_t len);
+
+/**
+ * Register current non-EAL thread as a lcore.
+ *
+ * @note This API is not compatible with the multi-process feature:
+ * - if a primary process registers a non-EAL thread, then no secondary process
+ * will initialise.
+ * - if a secondary process initialises successfully, trying to register a
+ * non-EAL thread from either primary or secondary processes will always end
+ * up with the thread getting LCORE_ID_ANY as lcore.
+ *
+ * @return
+ * On success, return 0; otherwise return -1 with rte_errno set.
+ */
+__rte_experimental
+int
+rte_thread_register(void);
+
+/**
+ * Unregister current thread and release lcore if one was associated.
+ */
+__rte_experimental
+void
+rte_thread_unregister(void);
+
/**
* Create a control thread.
*
const pthread_attr_t *attr,
void *(*start_routine)(void *), void *arg);
-/**
- * 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
- * Boolean value: positive if test is true; otherwise returns 0.
- */
-int
-rte_lcore_has_role(unsigned int lcore_id, enum rte_lcore_role_t role);
-
#ifdef __cplusplus
}
#endif