On 10/06/2020 15:45, David Marchand wrote: > Because of the inline accessor + static declaration in rte_gettid(), > we end up with multiple symbols for RTE_PER_LCORE(_thread_id). > Each compilation unit will pay a cost when accessing this information > for the first time. > > $ nm build/app/dpdk-testpmd | grep per_lcore__thread_id > 0000000000000054 d per_lcore__thread_id.5037 > 0000000000000040 d per_lcore__thread_id.5103 > 0000000000000048 d per_lcore__thread_id.5259 > 000000000000004c d per_lcore__thread_id.5259 > 0000000000000044 d per_lcore__thread_id.5933 > 0000000000000058 d per_lcore__thread_id.6261 > 0000000000000050 d per_lcore__thread_id.7378 > 000000000000005c d per_lcore__thread_id.7496 > 000000000000000c d per_lcore__thread_id.8016 > 0000000000000010 d per_lcore__thread_id.8431 > > Make it global as part of the DPDK_21 stable ABI. > > Fixes: ef76436c6834 ("eal: get unique thread id") > > Signed-off-by: David Marchand <david.march...@redhat.com> > --- > lib/librte_eal/common/eal_common_thread.c | 1 + > lib/librte_eal/include/rte_eal.h | 3 ++- > lib/librte_eal/rte_eal_version.map | 7 +++++++ > 3 files changed, 10 insertions(+), 1 deletion(-) > > diff --git a/lib/librte_eal/common/eal_common_thread.c > b/lib/librte_eal/common/eal_common_thread.c > index 25200e5a99..f04d880880 100644 > --- a/lib/librte_eal/common/eal_common_thread.c > +++ b/lib/librte_eal/common/eal_common_thread.c > @@ -24,6 +24,7 @@ > #include "eal_thread.h" > > RTE_DEFINE_PER_LCORE(unsigned int, _lcore_id) = LCORE_ID_ANY; > +RTE_DEFINE_PER_LCORE(int, _thread_id) = -1; > static RTE_DEFINE_PER_LCORE(unsigned int, _socket_id) = > (unsigned int)SOCKET_ID_ANY; > static RTE_DEFINE_PER_LCORE(rte_cpuset_t, _cpuset); > diff --git a/lib/librte_eal/include/rte_eal.h > b/lib/librte_eal/include/rte_eal.h > index 2f9ed298de..2edf8c6556 100644 > --- a/lib/librte_eal/include/rte_eal.h > +++ b/lib/librte_eal/include/rte_eal.h > @@ -447,6 +447,8 @@ enum rte_intr_mode rte_eal_vfio_intr_mode(void); > */ > int rte_sys_gettid(void); > > +RTE_DECLARE_PER_LCORE(int, _thread_id); > + > /** > * Get system unique thread id. > * > @@ -456,7 +458,6 @@ int rte_sys_gettid(void); > */ > static inline int rte_gettid(void) > { > - static RTE_DEFINE_PER_LCORE(int, _thread_id) = -1; > if (RTE_PER_LCORE(_thread_id) == -1) > RTE_PER_LCORE(_thread_id) = rte_sys_gettid(); > return RTE_PER_LCORE(_thread_id); > diff --git a/lib/librte_eal/rte_eal_version.map > b/lib/librte_eal/rte_eal_version.map > index d8038749a4..fdfc3f1a88 100644 > --- a/lib/librte_eal/rte_eal_version.map > +++ b/lib/librte_eal/rte_eal_version.map > @@ -221,6 +221,13 @@ DPDK_20.0 { > local: *; > }; > > +DPDK_21 { > + global: > + > + per_lcore__thread_id; > + > +} DPDK_20.0; > + > EXPERIMENTAL { > global:
Acked-by: Ray Kinsella <m...@ashroe.eu>