All of lore.kernel.org
 help / color / mirror / Atom feed
From: Tyler Retzlaff <roretzla@linux.microsoft.com>
To: Konstantin Ananyev <konstantin.v.ananyev@yandex.ru>
Cc: dev@dpdk.org, thomas@monjalon.net, dmitry.kozliuk@gmail.com,
	anatoly.burakov@intel.com,
	Narcisa Vasile <navasile@microsoft.com>
Subject: Re: [PATCH v5 1/3] eal: add basic thread ID and current thread identifier API
Date: Thu, 5 May 2022 00:11:36 -0700	[thread overview]
Message-ID: <20220505071136.GA27566@linuxonhyperv3.guj3yctzbm1etfxqx2vob5hsef.xx.internal.cloudapp.net> (raw)
In-Reply-To: <11c226e0-2e11-5367-8cb6-b76f471ea2a5@yandex.ru>

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 <navasile@microsoft.com>
> >Signed-off-by: Tyler Retzlaff <roretzla@linux.microsoft.com>
> >Acked-by: Dmitry Kozlyuk <dmitry.kozliuk@gmail.com>
> >---
> >  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 <stdint.h>
> >+
> >  #include <rte_os.h>
> >  #include <rte_compat.h>
> >@@ -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 <errno.h>
> >@@ -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 *))

  reply	other threads:[~2022-05-05  7:11 UTC|newest]

Thread overview: 60+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-04-01 13:29 [PATCH 0/3] add eal functions for thread affinity Tyler Retzlaff
2022-04-01 13:29 ` [PATCH 1/3] eal/windows: translate Windows errors to errno-style errors Tyler Retzlaff
2022-04-01 13:29 ` [PATCH 2/3] eal: implement functions for get/set thread affinity Tyler Retzlaff
2022-04-08 14:01   ` Dmitry Kozlyuk
2022-04-09  8:02     ` Tyler Retzlaff
2022-04-01 13:29 ` [PATCH 3/3] test/threads: add unit test for thread API Tyler Retzlaff
2022-04-08 14:01   ` Dmitry Kozlyuk
2022-04-09  8:56     ` Tyler Retzlaff
2022-04-11 22:52       ` Dmitry Kozlyuk
2022-04-08  8:57 ` [PATCH 0/3] add eal functions for thread affinity David Marchand
2022-04-08 13:46   ` Tyler Retzlaff
2022-04-11  7:32     ` David Marchand
2022-04-12 10:43 ` [PATCH v2 0/4] add eal functions for thread affinity and self Tyler Retzlaff
2022-04-12 10:43   ` [PATCH v2 1/4] eal/windows: translate Windows errors to errno-style errors Tyler Retzlaff
2022-04-12 17:26     ` Menon, Ranjit
2022-04-13  7:07       ` Tyler Retzlaff
2022-04-25  8:25     ` David Marchand
2022-04-25  8:52       ` Tyler Retzlaff
2022-04-12 10:43   ` [PATCH v2 2/4] eal: add basic thread ID and current thread identifier API Tyler Retzlaff
2022-04-12 10:43   ` [PATCH v2 3/4] eal: implement functions for get/set thread affinity Tyler Retzlaff
2022-04-13  7:30     ` Tyler Retzlaff
2022-04-12 10:43   ` [PATCH v2 4/4] test/threads: add unit test for thread API Tyler Retzlaff
2022-04-13  7:43 ` [PATCH v3 0/4] add eal functions for thread affinity and self Tyler Retzlaff
2022-04-13  7:43   ` [PATCH v3 1/4] eal/windows: translate Windows errors to errno-style errors Tyler Retzlaff
2022-04-13  7:43   ` [PATCH v3 2/4] eal: add basic thread ID and current thread identifier API Tyler Retzlaff
2022-04-25  8:26     ` David Marchand
2022-04-25  8:53       ` Tyler Retzlaff
2022-04-13  7:43   ` [PATCH v3 3/4] eal: implement functions for get/set thread affinity Tyler Retzlaff
2022-04-25  8:26     ` David Marchand
2022-04-25  8:55       ` Tyler Retzlaff
2022-04-13  7:43   ` [PATCH v3 4/4] test/threads: add unit test for thread API Tyler Retzlaff
2022-04-26  7:50 ` [PATCH v4 0/3] add eal functions for thread affinity and self Tyler Retzlaff
2022-04-26  7:50   ` [PATCH v4 1/3] eal: add basic thread ID and current thread identifier API Tyler Retzlaff
2022-05-01  9:18     ` Dmitry Kozlyuk
2022-04-26  7:50   ` [PATCH v4 2/3] eal: implement functions for get/set thread affinity Tyler Retzlaff
2022-05-01  9:18     ` Dmitry Kozlyuk
2022-04-26  7:50   ` [PATCH v4 3/3] test/threads: add unit test for thread API Tyler Retzlaff
2022-05-01  9:18     ` Dmitry Kozlyuk
2022-05-03  9:38       ` Tyler Retzlaff
2022-05-04 15:46 ` [PATCH v5 0/3] add eal functions for thread affinity and self Tyler Retzlaff
2022-05-04 15:46   ` [PATCH v5 1/3] eal: add basic thread ID and current thread identifier API Tyler Retzlaff
2022-05-04 22:55     ` Konstantin Ananyev
2022-05-05  7:11       ` Tyler Retzlaff [this message]
2022-05-06 19:37         ` Konstantin Ananyev
2022-05-07  8:25           ` Morten Brørup
2022-05-07 13:57             ` Konstantin Ananyev
2022-05-07 19:47               ` Morten Brørup
2022-05-10 21:52                 ` Konstantin Ananyev
2022-05-11  7:17                   ` Tyler Retzlaff
2022-05-11  7:36                     ` Morten Brørup
2022-05-11 22:27                     ` Konstantin Ananyev
2022-05-04 15:46   ` [PATCH v5 2/3] eal: implement functions for get/set thread affinity Tyler Retzlaff
2022-05-04 15:46   ` [PATCH v5 3/3] test/threads: add unit test for thread API Tyler Retzlaff
2022-05-12 13:14 ` [PATCH v6 0/3] add eal functions for thread affinity and self Tyler Retzlaff
2022-05-12 13:14   ` [PATCH v6 1/3] eal: add basic thread ID and current thread identifier API Tyler Retzlaff
2022-05-15 22:02     ` Konstantin Ananyev
2022-05-16  6:21       ` Tyler Retzlaff
2022-05-12 13:14   ` [PATCH v6 2/3] eal: implement functions for get/set thread affinity Tyler Retzlaff
2022-05-12 13:14   ` [PATCH v6 3/3] test/threads: add unit test for thread API Tyler Retzlaff
2022-05-19 15:05   ` [PATCH v6 0/3] add eal functions for thread affinity and self David Marchand

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20220505071136.GA27566@linuxonhyperv3.guj3yctzbm1etfxqx2vob5hsef.xx.internal.cloudapp.net \
    --to=roretzla@linux.microsoft.com \
    --cc=anatoly.burakov@intel.com \
    --cc=dev@dpdk.org \
    --cc=dmitry.kozliuk@gmail.com \
    --cc=konstantin.v.ananyev@yandex.ru \
    --cc=navasile@microsoft.com \
    --cc=thomas@monjalon.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.