xref: /dpdk/lib/eal/linux/eal_thread.c (revision 93d8a7edb209db8e64ba9c1cdea2d435d5a9c2ac)
199a2dd95SBruce Richardson /* SPDX-License-Identifier: BSD-3-Clause
299a2dd95SBruce Richardson  * Copyright(c) 2010-2014 Intel Corporation
399a2dd95SBruce Richardson  */
499a2dd95SBruce Richardson 
599a2dd95SBruce Richardson #include <errno.h>
699a2dd95SBruce Richardson #include <stdio.h>
799a2dd95SBruce Richardson #include <unistd.h>
899a2dd95SBruce Richardson #include <pthread.h>
999a2dd95SBruce Richardson #include <sys/syscall.h>
1099a2dd95SBruce Richardson 
1199a2dd95SBruce Richardson #include <rte_eal.h>
1299a2dd95SBruce Richardson #include <rte_lcore.h>
136d87be58STyler Retzlaff #include <rte_log.h>
14a95d7054SDavid Marchand #include <rte_string_fns.h>
1599a2dd95SBruce Richardson 
1699a2dd95SBruce Richardson /* require calling thread tid by gettid() */
1799a2dd95SBruce Richardson int rte_sys_gettid(void)
1899a2dd95SBruce Richardson {
1999a2dd95SBruce Richardson 	return (int)syscall(SYS_gettid);
2099a2dd95SBruce Richardson }
2199a2dd95SBruce Richardson 
226d87be58STyler Retzlaff void rte_thread_set_name(rte_thread_t thread_id, const char *thread_name)
236d87be58STyler Retzlaff {
246d87be58STyler Retzlaff 	int ret = ENOSYS;
256d87be58STyler Retzlaff #if defined(__GLIBC__) && defined(__GLIBC_PREREQ)
266d87be58STyler Retzlaff #if __GLIBC_PREREQ(2, 12)
27*93d8a7edSThomas Monjalon 	char truncated[RTE_THREAD_NAME_SIZE];
286d87be58STyler Retzlaff 	const size_t truncatedsz = sizeof(truncated);
296d87be58STyler Retzlaff 
306d87be58STyler Retzlaff 	if (strlcpy(truncated, thread_name, truncatedsz) >= truncatedsz)
316d87be58STyler Retzlaff 		RTE_LOG(DEBUG, EAL, "Truncated thread name\n");
326d87be58STyler Retzlaff 
336d87be58STyler Retzlaff 	ret = pthread_setname_np((pthread_t)thread_id.opaque_id, truncated);
346d87be58STyler Retzlaff #endif
356d87be58STyler Retzlaff #endif
366d87be58STyler Retzlaff 	RTE_SET_USED(thread_id);
376d87be58STyler Retzlaff 	RTE_SET_USED(thread_name);
386d87be58STyler Retzlaff 
396d87be58STyler Retzlaff 	if (ret != 0)
406d87be58STyler Retzlaff 		RTE_LOG(DEBUG, EAL, "Failed to set thread name\n");
416d87be58STyler Retzlaff }
426d87be58STyler Retzlaff 
4399a2dd95SBruce Richardson int rte_thread_setname(pthread_t id, const char *name)
4499a2dd95SBruce Richardson {
4599a2dd95SBruce Richardson 	int ret = ENOSYS;
4699a2dd95SBruce Richardson #if defined(__GLIBC__) && defined(__GLIBC_PREREQ)
4799a2dd95SBruce Richardson #if __GLIBC_PREREQ(2, 12)
4899a2dd95SBruce Richardson 	char truncated[16];
4999a2dd95SBruce Richardson 
5099a2dd95SBruce Richardson 	strlcpy(truncated, name, sizeof(truncated));
5199a2dd95SBruce Richardson 	ret = pthread_setname_np(id, truncated);
5299a2dd95SBruce Richardson #endif
5399a2dd95SBruce Richardson #endif
5499a2dd95SBruce Richardson 	RTE_SET_USED(id);
5599a2dd95SBruce Richardson 	RTE_SET_USED(name);
5699a2dd95SBruce Richardson 	return -ret;
5799a2dd95SBruce Richardson }
58