Hi David, one minor comment below
On Fri, Jun 26, 2020 at 04:47:30PM +0200, David Marchand wrote: > Introduce a helper responsible for initialising the per thread context. > We can then have a unified context for EAL and non-EAL threads and > remove copy/paste'd OS-specific helpers. > > Per EAL thread CPU affinity setting is separated from the thread init. > It is to accommodate with Windows EAL where CPU affinity is not set at > the moment. > Besides, having affinity set by the master lcore in FreeBSD and Linux > will make it possible to detect errors rather than panic in the child > thread. But the cleanup when such an event happens is left for later. > > Signed-off-by: David Marchand <david.march...@redhat.com> > --- > Changes since v1: > - rebased on master, removed Windows workarounds wrt gettid and traces > support, > > --- > lib/librte_eal/common/eal_common_thread.c | 51 +++++++++++++---------- > lib/librte_eal/common/eal_thread.h | 8 ++-- > lib/librte_eal/freebsd/eal.c | 14 ++++++- > lib/librte_eal/freebsd/eal_thread.c | 32 +------------- > lib/librte_eal/linux/eal.c | 15 ++++++- > lib/librte_eal/linux/eal_thread.c | 32 +------------- > lib/librte_eal/windows/eal.c | 3 +- > lib/librte_eal/windows/eal_thread.c | 10 +---- > 8 files changed, 66 insertions(+), 99 deletions(-) > > diff --git a/lib/librte_eal/common/eal_common_thread.c > b/lib/librte_eal/common/eal_common_thread.c > index 280c64bb76..afb30236c5 100644 > --- a/lib/librte_eal/common/eal_common_thread.c > +++ b/lib/librte_eal/common/eal_common_thread.c > @@ -71,20 +71,10 @@ eal_cpuset_socket_id(rte_cpuset_t *cpusetp) > return socket_id; > } > > -int > -rte_thread_set_affinity(rte_cpuset_t *cpusetp) > +static void > +thread_update_affinity(rte_cpuset_t *cpusetp) > { > - int s; > - unsigned lcore_id; > - pthread_t tid; > - > - tid = pthread_self(); > - > - s = pthread_setaffinity_np(tid, sizeof(rte_cpuset_t), cpusetp); > - if (s != 0) { > - RTE_LOG(ERR, EAL, "pthread_setaffinity_np failed\n"); > - return -1; > - } > + unsigned int lcore_id = rte_lcore_id(); > > /* store socket_id in TLS for quick access */ > RTE_PER_LCORE(_socket_id) = > @@ -94,14 +84,24 @@ rte_thread_set_affinity(rte_cpuset_t *cpusetp) > memmove(&RTE_PER_LCORE(_cpuset), cpusetp, > sizeof(rte_cpuset_t)); > > - lcore_id = rte_lcore_id(); > if (lcore_id != (unsigned)LCORE_ID_ANY) { > /* EAL thread will update lcore_config */ > lcore_config[lcore_id].socket_id = RTE_PER_LCORE(_socket_id); > memmove(&lcore_config[lcore_id].cpuset, cpusetp, > sizeof(rte_cpuset_t)); > } > +} > > +int > +rte_thread_set_affinity(rte_cpuset_t *cpusetp) > +{ > + if (pthread_setaffinity_np(pthread_self(), sizeof(rte_cpuset_t), > + cpusetp) != 0) { > + RTE_LOG(ERR, EAL, "pthread_setaffinity_np failed\n"); > + return -1; > + } > + > + thread_update_affinity(cpusetp); > return 0; > } > > @@ -147,6 +147,19 @@ eal_thread_dump_affinity(char *str, unsigned size) > return ret; > } > > +void > +rte_thread_init(unsigned int lcore_id, rte_cpuset_t *cpuset) > +{ > + /* set the lcore ID in per-lcore memory area */ > + RTE_PER_LCORE(_lcore_id) = lcore_id; > + > + /* acquire system unique id */ > + rte_gettid(); If I understand properly, rte_gettid() is now also called for control thread. I don't think this behavior change can break anything, but it may be good to highlight it in the commit log. also, there are 2 spaces before "*/"