1 /* SPDX-License-Identifier: BSD-3-Clause
2 * Copyright 2021 Mellanox Technologies, Ltd
5 #include <rte_common.h>
7 #include <rte_thread.h>
8 #include <rte_windows.h>
15 rte_thread_tls_key_create(rte_tls_key *key,
16 __rte_unused void (*destructor)(void *))
18 *key = malloc(sizeof(**key));
20 RTE_LOG(DEBUG, EAL, "Cannot allocate TLS key.\n");
23 (*key)->thread_index = TlsAlloc();
24 if ((*key)->thread_index == TLS_OUT_OF_INDEXES) {
25 RTE_LOG_WIN32_ERR("TlsAlloc()");
33 rte_thread_tls_key_delete(rte_tls_key key)
36 RTE_LOG(DEBUG, EAL, "Invalid TLS key.\n");
39 if (!TlsFree(key->thread_index)) {
40 RTE_LOG_WIN32_ERR("TlsFree()");
49 rte_thread_tls_value_set(rte_tls_key key, const void *value)
54 RTE_LOG(DEBUG, EAL, "Invalid TLS key.\n");
57 /* discard const qualifier */
58 p = (char *) (uintptr_t) value;
59 if (!TlsSetValue(key->thread_index, p)) {
60 RTE_LOG_WIN32_ERR("TlsSetValue()");
67 rte_thread_tls_value_get(rte_tls_key key)
72 RTE_LOG(DEBUG, EAL, "Invalid TLS key.\n");
76 output = TlsGetValue(key->thread_index);
77 if (GetLastError() != ERROR_SUCCESS) {
78 RTE_LOG_WIN32_ERR("TlsGetValue()");