From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id AA418A04B5; Sun, 13 Dec 2020 21:25:03 +0100 (CET) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 909F2C97A; Sun, 13 Dec 2020 21:25:01 +0100 (CET) Received: from mellanox.co.il (mail-il-dmz.mellanox.com [193.47.165.129]) by dpdk.org (Postfix) with ESMTP id 3D280C968 for ; Sun, 13 Dec 2020 21:25:00 +0100 (CET) Received: from Internal Mail-Server by MTLPINE1 (envelope-from talshn@nvidia.com) with SMTP; 13 Dec 2020 22:24:58 +0200 Received: from nvidia.com (l-wincomp04-vm.mtl.labs.mlnx [10.237.1.5]) by labmailer.mlnx (8.13.8/8.13.8) with ESMTP id 0BDKOwX5011937; Sun, 13 Dec 2020 22:24:58 +0200 From: Tal Shnaiderman To: dev@dpdk.org Cc: thomas@monjalon.net, pallavi.kadam@intel.com, dmitry.kozliuk@gmail.com, navasile@linux.microsoft.com, dmitrym@microsoft.com Date: Sun, 13 Dec 2020 22:24:37 +0200 Message-Id: <20201213202437.12880-1-talshn@nvidia.com> X-Mailer: git-send-email 2.16.1.windows.4 Subject: [dpdk-dev] [PATCH v2] eal/windows: add pthread TLS function support X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Add the following functions to the pthread shim implementation for Windows as they are needed for thread safe rte_flow functions. pthread_key_create. pthread_key_delete. pthread_getspecific. pthread_setspecific. Signed-off-by: Tal Shnaiderman --- v2: fix style issues --- lib/librte_eal/windows/include/pthread.h | 43 ++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/lib/librte_eal/windows/include/pthread.h b/lib/librte_eal/windows/include/pthread.h index fb11a07ce6..8fe18e6f00 100644 --- a/lib/librte_eal/windows/include/pthread.h +++ b/lib/librte_eal/windows/include/pthread.h @@ -34,6 +34,8 @@ typedef CRITICAL_SECTION pthread_mutex_t; typedef SYNCHRONIZATION_BARRIER pthread_barrier_t; +typedef DWORD pthread_key_t; + #define pthread_barrier_init(barrier, attr, count) \ InitializeSynchronizationBarrier(barrier, count, -1) #define pthread_barrier_wait(barrier) EnterSynchronizationBarrier(barrier, \ @@ -179,6 +181,47 @@ pthread_mutex_destroy(pthread_mutex_t *mutex) return 0; } +static inline int +pthread_key_create(pthread_key_t *key, + __rte_unused void (*destructor)(void *)) +{ + *key = TlsAlloc(); + if ((*key) == TLS_OUT_OF_INDEXES) { + RTE_LOG_WIN32_ERR("TlsAlloc()"); + return -ENOMEM; + } + return 0; +} + +static inline int +pthread_key_delete(pthread_key_t key) +{ + if (!TlsFree(key)) { + RTE_LOG_WIN32_ERR("TlsFree()"); + return -1; + } + return 0; +} + +static inline void * +pthread_getspecific(pthread_key_t key) +{ + return TlsGetValue(key); +} + +static inline int +pthread_setspecific(pthread_key_t key, const void *value) +{ + /* discard const qualifier */ + char *p = (char *) (uintptr_t) value; + + if (!TlsSetValue(key, p)) { + RTE_LOG_WIN32_ERR("TlsSetValue()"); + return -1; + } + return 0; +} + #ifdef __cplusplus } #endif -- 2.16.1.windows.4