Message ID | 1652361270-27116-2-git-send-email-roretzla@linux.microsoft.com (mailing list archive) |
---|---|
State | Accepted, archived |
Delegated to: | David Marchand |
Headers | show |
Series | add eal functions for thread affinity and self | expand |
Context | Check | Description |
---|---|---|
ci/checkpatch | success | coding style OK |
12/05/2022 14:14, 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 | 13 +++++++++++++ > lib/eal/version.map | 3 +++ > lib/eal/windows/rte_thread.c | 10 ++++++++++ > 4 files changed, 48 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 */ > +} 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..5e5beb1 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,18 @@ struct eal_tls_key { > pthread_key_t thread_index; > }; > > +rte_thread_t > +rte_thread_self(void) > +{ > + RTE_BUILD_BUG_ON(sizeof(pthread_t) > sizeof(uintptr_t)); As a nit: sizeof(pthread_t) > sizeof(thread_id.opaque_id) seems a bit better/safer for me. Acked-by: Konstantin Ananyev <konstantin.v.ananyev@yandex.ru> > + > + 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 *))
On Sun, May 15, 2022 at 11:02:30PM +0100, Konstantin Ananyev wrote: > 12/05/2022 14:14, 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 | 13 +++++++++++++ > > lib/eal/version.map | 3 +++ > > lib/eal/windows/rte_thread.c | 10 ++++++++++ > > 4 files changed, 48 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 */ > >+} 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..5e5beb1 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,18 @@ struct eal_tls_key { > > pthread_key_t thread_index; > > }; > >+rte_thread_t > >+rte_thread_self(void) > >+{ > >+ RTE_BUILD_BUG_ON(sizeof(pthread_t) > sizeof(uintptr_t)); > > As a nit: > sizeof(pthread_t) > sizeof(thread_id.opaque_id) > seems a bit better/safer for me. > > Acked-by: Konstantin Ananyev <konstantin.v.ananyev@yandex.ru> i won't change it for now, but i'll keep it in mind for when i'm touching this file in subsequent series submissions. thanks > > > >+ > >+ 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 *))
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 */ +} 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..5e5beb1 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,18 @@ struct eal_tls_key { pthread_key_t thread_index; }; +rte_thread_t +rte_thread_self(void) +{ + RTE_BUILD_BUG_ON(sizeof(pthread_t) > sizeof(uintptr_t)); + + 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 *))