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 5D02BA00C4; Thu, 5 May 2022 09:11:39 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 12C5C40C35; Thu, 5 May 2022 09:11:39 +0200 (CEST) Received: from linux.microsoft.com (linux.microsoft.com [13.77.154.182]) by mails.dpdk.org (Postfix) with ESMTP id 96B9440042 for ; Thu, 5 May 2022 09:11:37 +0200 (CEST) Received: by linux.microsoft.com (Postfix, from userid 1086) id 95AD020E9BF5; Thu, 5 May 2022 00:11:36 -0700 (PDT) DKIM-Filter: OpenDKIM Filter v2.11.0 linux.microsoft.com 95AD020E9BF5 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.microsoft.com; s=default; t=1651734696; bh=JIEb7KNjxhQBNC5Tiqe1qSZ/fW6CxAlztB9IM3WFhTI=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=jXicycWwrtksazGYGPFkoOjcput0WNveGcXCpgx4MpmM/kZpImxHz2L6/pfOcsA3a IMlCuqIUmk3dG6U2qquLN+TUDoc1LzfhjBi2X4Awn7IaeCurQ9IAbmUSuc3RVQRV9n 4seLb7/0HzgLntWmzUnash1mvx+nE5PSA62F/hPE= Date: Thu, 5 May 2022 00:11:36 -0700 From: Tyler Retzlaff To: Konstantin Ananyev Cc: dev@dpdk.org, thomas@monjalon.net, dmitry.kozliuk@gmail.com, anatoly.burakov@intel.com, Narcisa Vasile Subject: Re: [PATCH v5 1/3] eal: add basic thread ID and current thread identifier API Message-ID: <20220505071136.GA27566@linuxonhyperv3.guj3yctzbm1etfxqx2vob5hsef.xx.internal.cloudapp.net> 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> <11c226e0-2e11-5367-8cb6-b76f471ea2a5@yandex.ru> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <11c226e0-2e11-5367-8cb6-b76f471ea2a5@yandex.ru> User-Agent: Mutt/1.5.21 (2010-09-15) 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 On Wed, May 04, 2022 at 11:55:57PM +0100, Konstantin Ananyev wrote: > 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? i believe the previous discussions are. * preference for reduced or no conditional compilation. * preference for sizeof(type) to be `the same' on all platforms. * preference for platform agnostic headers. i.e. don't drag platform specific headers into the application namespace when including rte_xxx.h headers. > 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'. yes, this is correct. newer posix introduced this to allow the use of structs. i assume prior reviewers are aware of the recent posix standard (or should be). this type makes no attempt to be usable on platforms that use a handle > sizeof(uintptr_t). though any platform that does is free to shove a pointer to struct into the handle at the cost of a dereference if that is their implementation. > > > >+} 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 *))