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>
17 rte_thread_t thread_id;
19 thread_id.opaque_id = GetCurrentThreadId();
25 rte_thread_key_create(rte_thread_key *key,
26 __rte_unused void (*destructor)(void *))
28 *key = malloc(sizeof(**key));
30 RTE_LOG(DEBUG, EAL, "Cannot allocate TLS key.\n");
34 (*key)->thread_index = TlsAlloc();
35 if ((*key)->thread_index == TLS_OUT_OF_INDEXES) {
36 RTE_LOG_WIN32_ERR("TlsAlloc()");
45 rte_thread_key_delete(rte_thread_key key)
48 RTE_LOG(DEBUG, EAL, "Invalid TLS key.\n");
52 if (!TlsFree(key->thread_index)) {
53 RTE_LOG_WIN32_ERR("TlsFree()");
63 rte_thread_value_set(rte_thread_key key, const void *value)
68 RTE_LOG(DEBUG, EAL, "Invalid TLS key.\n");
72 /* discard const qualifier */
73 p = (char *) (uintptr_t) value;
74 if (!TlsSetValue(key->thread_index, p)) {
75 RTE_LOG_WIN32_ERR("TlsSetValue()");
83 rte_thread_value_get(rte_thread_key key)
88 RTE_LOG(DEBUG, EAL, "Invalid TLS key.\n");
92 output = TlsGetValue(key->thread_index);
93 if (GetLastError() != ERROR_SUCCESS) {
94 RTE_LOG_WIN32_ERR("TlsGetValue()");