From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by smtp.lore.kernel.org (Postfix) with ESMTP id D68B8C433F5 for ; Wed, 4 May 2022 15:46:46 +0000 (UTC) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id B5F2242829; Wed, 4 May 2022 17:46:31 +0200 (CEST) Received: from linux.microsoft.com (linux.microsoft.com [13.77.154.182]) by mails.dpdk.org (Postfix) with ESMTP id 35DE840E5A for ; Wed, 4 May 2022 17:46:28 +0200 (CEST) Received: by linux.microsoft.com (Postfix, from userid 1086) id 40F9A20EB0F8; Wed, 4 May 2022 08:46:27 -0700 (PDT) DKIM-Filter: OpenDKIM Filter v2.11.0 linux.microsoft.com 40F9A20EB0F8 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.microsoft.com; s=default; t=1651679187; bh=044wvus8eYcextfwZrQ9MD3XhcbzFDsYaLzgCxMRJNE=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=TX/ypTKIu1Mk2+mYaspByEYSbtYa3y5UqYJLT2milGz1gc0k8Woaxox6ejx3Zx17F NhewEDw8DI/KJ+7ikQtIqts0r6red4aJMPvhtsL9AvvNXhkVmATUwc0IIdyShVALPw Xk5vsUKLONTKqrPPxq0Bh9wxhs63UHB9v1qcKY9E= From: Tyler Retzlaff To: dev@dpdk.org Cc: thomas@monjalon.net, dmitry.kozliuk@gmail.com, anatoly.burakov@intel.com, Tyler Retzlaff , Narcisa Vasile Subject: [PATCH v5 1/3] eal: add basic thread ID and current thread identifier API Date: Wed, 4 May 2022 08:46:23 -0700 Message-Id: <1651679185-23260-2-git-send-email-roretzla@linux.microsoft.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1651679185-23260-1-git-send-email-roretzla@linux.microsoft.com> References: <1648819793-18948-1-git-send-email-roretzla@linux.microsoft.com> <1651679185-23260-1-git-send-email-roretzla@linux.microsoft.com> X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Provide a portable type-safe thread identifier. Provide rte_thread_self for obtaining current thread identifier. Signed-off-by: Narcisa Vasile Signed-off-by: Tyler Retzlaff Acked-by: Dmitry Kozlyuk --- lib/eal/include/rte_thread.h | 22 ++++++++++++++++++++++ lib/eal/unix/rte_thread.c | 11 +++++++++++ lib/eal/version.map | 3 +++ lib/eal/windows/rte_thread.c | 10 ++++++++++ 4 files changed, 46 insertions(+) diff --git a/lib/eal/include/rte_thread.h b/lib/eal/include/rte_thread.h index 8be8ed8..14478ba 100644 --- a/lib/eal/include/rte_thread.h +++ b/lib/eal/include/rte_thread.h @@ -1,7 +1,10 @@ /* SPDX-License-Identifier: BSD-3-Clause * Copyright(c) 2021 Mellanox Technologies, Ltd + * Copyright (C) 2022 Microsoft Corporation */ +#include + #include #include @@ -21,10 +24,29 @@ #endif /** + * Thread id descriptor. + */ +typedef struct { + uintptr_t opaque_id; /**< thread identifier */ +} rte_thread_t; + +/** * TLS key type, an opaque pointer. */ typedef struct eal_tls_key *rte_thread_key; +/** + * @warning + * @b EXPERIMENTAL: this API may change without prior notice. + * + * Get the id of the calling thread. + * + * @return + * Return the thread id of the calling thread. + */ +__rte_experimental +rte_thread_t rte_thread_self(void); + #ifdef RTE_HAS_CPUSET /** diff --git a/lib/eal/unix/rte_thread.c b/lib/eal/unix/rte_thread.c index c34ede9..82e008f 100644 --- a/lib/eal/unix/rte_thread.c +++ b/lib/eal/unix/rte_thread.c @@ -1,5 +1,6 @@ /* SPDX-License-Identifier: BSD-3-Clause * Copyright 2021 Mellanox Technologies, Ltd + * Copyright (C) 2022 Microsoft Corporation */ #include @@ -15,6 +16,16 @@ struct eal_tls_key { pthread_key_t thread_index; }; +rte_thread_t +rte_thread_self(void) +{ + rte_thread_t thread_id; + + thread_id.opaque_id = (uintptr_t)pthread_self(); + + return thread_id; +} + int rte_thread_key_create(rte_thread_key *key, void (*destructor)(void *)) { diff --git a/lib/eal/version.map b/lib/eal/version.map index b53eeb3..05ce8f9 100644 --- a/lib/eal/version.map +++ b/lib/eal/version.map @@ -420,6 +420,9 @@ EXPERIMENTAL { rte_intr_instance_free; rte_intr_type_get; rte_intr_type_set; + + # added in 22.07 + rte_thread_self; }; INTERNAL { diff --git a/lib/eal/windows/rte_thread.c b/lib/eal/windows/rte_thread.c index 667287c..59fed3c 100644 --- a/lib/eal/windows/rte_thread.c +++ b/lib/eal/windows/rte_thread.c @@ -11,6 +11,16 @@ struct eal_tls_key { DWORD thread_index; }; +rte_thread_t +rte_thread_self(void) +{ + rte_thread_t thread_id; + + thread_id.opaque_id = GetCurrentThreadId(); + + return thread_id; +} + int rte_thread_key_create(rte_thread_key *key, __rte_unused void (*destructor)(void *)) -- 1.8.3.1