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_key_create(rte_thread_key *key,
16 __rte_unused void (*destructor)(void *))
18 *key = malloc(sizeof(**key));
20 RTE_LOG(DEBUG, EAL, "Cannot allocate TLS key.\n");
24 (*key)->thread_index = TlsAlloc();
25 if ((*key)->thread_index == TLS_OUT_OF_INDEXES) {
26 RTE_LOG_WIN32_ERR("TlsAlloc()");
35 rte_thread_key_delete(rte_thread_key key)
38 RTE_LOG(DEBUG, EAL, "Invalid TLS key.\n");
42 if (!TlsFree(key->thread_index)) {
43 RTE_LOG_WIN32_ERR("TlsFree()");
53 rte_thread_value_set(rte_thread_key key, const void *value)
58 RTE_LOG(DEBUG, EAL, "Invalid TLS key.\n");
62 /* discard const qualifier */
63 p = (char *) (uintptr_t) value;
64 if (!TlsSetValue(key->thread_index, p)) {
65 RTE_LOG_WIN32_ERR("TlsSetValue()");
73 rte_thread_value_get(rte_thread_key key)
78 RTE_LOG(DEBUG, EAL, "Invalid TLS key.\n");
82 output = TlsGetValue(key->thread_index);
83 if (GetLastError() != ERROR_SUCCESS) {
84 RTE_LOG_WIN32_ERR("TlsGetValue()");