1 /* SPDX-License-Identifier: BSD-3-Clause
2 * Copyright 2021 Mellanox Technologies, Ltd
3 * Copyright (C) 2022 Microsoft Corporation
11 #include <rte_errno.h>
13 #include <rte_thread.h>
16 pthread_key_t thread_index;
22 RTE_BUILD_BUG_ON(sizeof(pthread_t) > sizeof(uintptr_t));
24 rte_thread_t thread_id;
26 thread_id.opaque_id = (uintptr_t)pthread_self();
32 rte_thread_key_create(rte_thread_key *key, void (*destructor)(void *))
36 *key = malloc(sizeof(**key));
38 RTE_LOG(DEBUG, EAL, "Cannot allocate TLS key.\n");
42 err = pthread_key_create(&((*key)->thread_index), destructor);
44 RTE_LOG(DEBUG, EAL, "pthread_key_create failed: %s\n",
54 rte_thread_key_delete(rte_thread_key key)
59 RTE_LOG(DEBUG, EAL, "Invalid TLS key.\n");
63 err = pthread_key_delete(key->thread_index);
65 RTE_LOG(DEBUG, EAL, "pthread_key_delete failed: %s\n",
76 rte_thread_value_set(rte_thread_key key, const void *value)
81 RTE_LOG(DEBUG, EAL, "Invalid TLS key.\n");
85 err = pthread_setspecific(key->thread_index, value);
87 RTE_LOG(DEBUG, EAL, "pthread_setspecific failed: %s\n",
96 rte_thread_value_get(rte_thread_key key)
99 RTE_LOG(DEBUG, EAL, "Invalid TLS key.\n");
103 return pthread_getspecific(key->thread_index);