From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id F01B6A00BE; Thu, 5 May 2022 00:56:03 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 98FFC4068A; Thu, 5 May 2022 00:56:03 +0200 (CEST) Received: from forward500p.mail.yandex.net (forward500p.mail.yandex.net [77.88.28.110]) by mails.dpdk.org (Postfix) with ESMTP id BC30040689 for ; Thu, 5 May 2022 00:56:01 +0200 (CEST) Received: from myt6-2da614b3f5d3.qloud-c.yandex.net (myt6-2da614b3f5d3.qloud-c.yandex.net [IPv6:2a02:6b8:c12:5f2e:0:640:2da6:14b3]) by forward500p.mail.yandex.net (Yandex) with ESMTP id 1D72FF021F3; Thu, 5 May 2022 01:56:01 +0300 (MSK) Received: from myt6-016ca1315a73.qloud-c.yandex.net (myt6-016ca1315a73.qloud-c.yandex.net [2a02:6b8:c12:4e0e:0:640:16c:a131]) by myt6-2da614b3f5d3.qloud-c.yandex.net (mxback/Yandex) with ESMTP id izfsV8megC-u0fu2VGN; Thu, 05 May 2022 01:56:01 +0300 X-Yandex-Fwd: 2 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yandex.ru; s=mail; t=1651704961; bh=EtZ4lJ0mqbZ87Mq5VuT/YC03TXC6n5ITKRygI+yHs1o=; h=In-Reply-To:From:Subject:Cc:References:Date:Message-ID:To; b=Q+Y0PvnXD4+S9EoxQ3j1kH+Wk1znN2RMYIgOnSCgTv+EA/N1oZZzGZK1bew1S074J YCDxAnUUCFRW5Qu2ctTQLL1CnckSDqCdkTbYZEJmAKNP7pv8DGNTBIJYkCmHKDW39x NtMAb7U8hZ3tc+qmy6afWF+VYo9zp7ebeNrvZ+eU= Authentication-Results: myt6-2da614b3f5d3.qloud-c.yandex.net; dkim=pass header.i=@yandex.ru Received: by myt6-016ca1315a73.qloud-c.yandex.net (smtp/Yandex) with ESMTPSA id AC2vvt6VUu-twNmlKo4; Thu, 05 May 2022 01:55:59 +0300 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) (Client certificate not present) Message-ID: <11c226e0-2e11-5367-8cb6-b76f471ea2a5@yandex.ru> Date: Wed, 4 May 2022 23:55:57 +0100 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.8.0 Subject: Re: [PATCH v5 1/3] eal: add basic thread ID and current thread identifier API Content-Language: en-US To: Tyler Retzlaff , dev@dpdk.org Cc: thomas@monjalon.net, dmitry.kozliuk@gmail.com, anatoly.burakov@intel.com, Narcisa Vasile References: <1648819793-18948-1-git-send-email-roretzla@linux.microsoft.com> <1651679185-23260-1-git-send-email-roretzla@linux.microsoft.com> <1651679185-23260-2-git-send-email-roretzla@linux.microsoft.com> From: Konstantin Ananyev In-Reply-To: <1651679185-23260-2-git-send-email-roretzla@linux.microsoft.com> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit 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 04/05/2022 16:46, Tyler Retzlaff пишет: > 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 */ I know that currently on linux typeof(pthread_id) == unsigned long int. Though wouldn't it be safer and cleaner to use pthread_t explicitly on posix-like systems? Something like: typedef struct { #ifdef WINDOWS uintptr_t opaque_id; #else pthread_t opaque_id; #endif }; AFAIK POSIX itself doesn't require pthread_t to be an 'arithmetic type'. > +} 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 *))