From: David Marchand <david.marchand@redhat.com> To: dev@dpdk.org Cc: jerinjacobk@gmail.com, bruce.richardson@intel.com, mdr@ashroe.eu, thomas@monjalon.net, arybchenko@solarflare.com, ktraynor@redhat.com, ian.stokes@intel.com, i.maximets@ovn.org, olivier.matz@6wind.com, konstantin.ananyev@intel.com, Jerin Jacob <jerinj@marvell.com>, Sunil Kumar Kori <skori@marvell.com>, Harini Ramakrishnan <harini.ramakrishnan@microsoft.com>, Omar Cardona <ocardona@microsoft.com>, Pallavi Kadam <pallavi.kadam@intel.com>, Ranjit Menon <ranjit.menon@intel.com> Subject: [dpdk-dev] [PATCH v6 04/10] eal: introduce thread uninit helper Date: Mon, 6 Jul 2020 22:52:28 +0200 Message-ID: <20200706205234.8040-5-david.marchand@redhat.com> (raw) In-Reply-To: <20200706205234.8040-1-david.marchand@redhat.com> This is a preparation step for dynamically unregistering threads. Since we explicitly allocate a per thread trace buffer in __rte_thread_init, add an internal helper to free this buffer. Signed-off-by: David Marchand <david.marchand@redhat.com> --- Changes since v5: - fixed windows build, Changes since v4: - renamed rte_thread_uninit and moved to eal_private.h, - hid freeing helper, Changes since v2: - added missing stub for windows tracing support, - moved free symbol to exported (experimental) ABI as a counterpart of the alloc symbol we already had, Changes since v1: - rebased on master, removed Windows workaround wrt traces support, --- lib/librte_eal/common/eal_common_thread.c | 9 +++++ lib/librte_eal/common/eal_common_trace.c | 49 +++++++++++++++++++---- lib/librte_eal/common/eal_private.h | 5 +++ lib/librte_eal/common/eal_trace.h | 1 + lib/librte_eal/windows/eal.c | 7 +++- 5 files changed, 63 insertions(+), 8 deletions(-) diff --git a/lib/librte_eal/common/eal_common_thread.c b/lib/librte_eal/common/eal_common_thread.c index fb06f8f802..6d1c87b1c2 100644 --- a/lib/librte_eal/common/eal_common_thread.c +++ b/lib/librte_eal/common/eal_common_thread.c @@ -20,6 +20,7 @@ #include "eal_internal_cfg.h" #include "eal_private.h" #include "eal_thread.h" +#include "eal_trace.h" RTE_DEFINE_PER_LCORE(unsigned int, _lcore_id) = LCORE_ID_ANY; RTE_DEFINE_PER_LCORE(int, _thread_id) = -1; @@ -161,6 +162,14 @@ __rte_thread_init(unsigned int lcore_id, rte_cpuset_t *cpuset) __rte_trace_mem_per_thread_alloc(); } +void +__rte_thread_uninit(void) +{ + trace_mem_per_thread_free(); + + RTE_PER_LCORE(_lcore_id) = LCORE_ID_ANY; +} + struct rte_thread_ctrl_params { void *(*start_routine)(void *); void *arg; diff --git a/lib/librte_eal/common/eal_common_trace.c b/lib/librte_eal/common/eal_common_trace.c index 875553d7e5..b6da5537fe 100644 --- a/lib/librte_eal/common/eal_common_trace.c +++ b/lib/librte_eal/common/eal_common_trace.c @@ -101,7 +101,7 @@ eal_trace_fini(void) { if (!rte_trace_is_enabled()) return; - trace_mem_per_thread_free(); + trace_mem_free(); trace_metadata_destroy(); eal_trace_args_free(); } @@ -370,24 +370,59 @@ __rte_trace_mem_per_thread_alloc(void) rte_spinlock_unlock(&trace->lock); } +static void +trace_mem_per_thread_free_unlocked(struct thread_mem_meta *meta) +{ + if (meta->area == TRACE_AREA_HUGEPAGE) + eal_free_no_trace(meta->mem); + else if (meta->area == TRACE_AREA_HEAP) + free(meta->mem); +} + void trace_mem_per_thread_free(void) +{ + struct trace *trace = trace_obj_get(); + struct __rte_trace_header *header; + uint32_t count; + + header = RTE_PER_LCORE(trace_mem); + if (header == NULL) + return; + + rte_spinlock_lock(&trace->lock); + for (count = 0; count < trace->nb_trace_mem_list; count++) { + if (trace->lcore_meta[count].mem == header) + break; + } + if (count != trace->nb_trace_mem_list) { + struct thread_mem_meta *meta = &trace->lcore_meta[count]; + + trace_mem_per_thread_free_unlocked(meta); + if (count != trace->nb_trace_mem_list - 1) { + memmove(meta, meta + 1, + sizeof(*meta) * + (trace->nb_trace_mem_list - count - 1)); + } + trace->nb_trace_mem_list--; + } + rte_spinlock_unlock(&trace->lock); +} + +void +trace_mem_free(void) { struct trace *trace = trace_obj_get(); uint32_t count; - void *mem; if (!rte_trace_is_enabled()) return; rte_spinlock_lock(&trace->lock); for (count = 0; count < trace->nb_trace_mem_list; count++) { - mem = trace->lcore_meta[count].mem; - if (trace->lcore_meta[count].area == TRACE_AREA_HUGEPAGE) - eal_free_no_trace(mem); - else if (trace->lcore_meta[count].area == TRACE_AREA_HEAP) - free(mem); + trace_mem_per_thread_free_unlocked(&trace->lcore_meta[count]); } + trace->nb_trace_mem_list = 0; rte_spinlock_unlock(&trace->lock); } diff --git a/lib/librte_eal/common/eal_private.h b/lib/librte_eal/common/eal_private.h index 5d8b53882d..a77ac7a963 100644 --- a/lib/librte_eal/common/eal_private.h +++ b/lib/librte_eal/common/eal_private.h @@ -709,4 +709,9 @@ eal_get_application_usage_hook(void); */ void __rte_thread_init(unsigned int lcore_id, rte_cpuset_t *cpuset); +/** + * Uninitialize per-lcore info for current thread. + */ +void __rte_thread_uninit(void); + #endif /* _EAL_PRIVATE_H_ */ diff --git a/lib/librte_eal/common/eal_trace.h b/lib/librte_eal/common/eal_trace.h index 8f60616156..92c5951c3a 100644 --- a/lib/librte_eal/common/eal_trace.h +++ b/lib/librte_eal/common/eal_trace.h @@ -106,6 +106,7 @@ int trace_metadata_create(void); void trace_metadata_destroy(void); int trace_mkdir(void); int trace_epoch_time_save(void); +void trace_mem_free(void); void trace_mem_per_thread_free(void); /* EAL interface */ diff --git a/lib/librte_eal/windows/eal.c b/lib/librte_eal/windows/eal.c index 9f5d019e64..addac62ae5 100644 --- a/lib/librte_eal/windows/eal.c +++ b/lib/librte_eal/windows/eal.c @@ -17,10 +17,10 @@ #include <eal_filesystem.h> #include <eal_options.h> #include <eal_private.h> -#include <rte_trace_point.h> #include <rte_vfio.h> #include "eal_hugepages.h" +#include "eal_trace.h" #include "eal_windows.h" #define MEMSIZE_IF_NO_HUGE_PAGE (64ULL * 1024ULL * 1024ULL) @@ -215,6 +215,11 @@ __rte_trace_mem_per_thread_alloc(void) { } +void +trace_mem_per_thread_free(void) +{ +} + void __rte_trace_point_emit_field(size_t sz, const char *field, const char *type) -- 2.23.0
next prev parent reply other threads:[~2020-07-06 20:53 UTC|newest] Thread overview: 126+ messages / expand[flat|nested] mbox.gz Atom feed top 2020-06-10 14:44 [dpdk-dev] [PATCH 0/7] Register external threads as lcore David Marchand 2020-06-10 14:45 ` [dpdk-dev] [PATCH 1/7] eal: relocate per thread symbols to common David Marchand 2020-06-10 14:45 ` [dpdk-dev] [PATCH 2/7] eal: fix multiple definition of per lcore thread id David Marchand 2020-06-15 6:46 ` Kinsella, Ray 2020-06-10 14:45 ` [dpdk-dev] [PATCH 3/7] eal: introduce thread init helper David Marchand 2020-06-10 14:45 ` [dpdk-dev] [PATCH 4/7] eal: introduce thread uninit helper David Marchand 2020-06-10 14:45 ` [dpdk-dev] [PATCH 5/7] eal: register non-EAL threads as lcore David Marchand 2020-06-15 6:43 ` Kinsella, Ray 2020-06-10 14:45 ` [dpdk-dev] [PATCH 6/7] eal: dump lcores David Marchand 2020-06-15 6:40 ` Kinsella, Ray 2020-06-10 14:45 ` [dpdk-dev] [PATCH 7/7] eal: add lcore hotplug notifications David Marchand 2020-06-15 6:34 ` Kinsella, Ray 2020-06-15 7:13 ` David Marchand 2020-06-10 15:09 ` [dpdk-dev] [PATCH 0/7] Register external threads as lcore Jerin Jacob 2020-06-10 15:13 ` Bruce Richardson 2020-06-10 15:18 ` David Marchand 2020-06-10 15:33 ` Jerin Jacob 2020-06-15 7:11 ` David Marchand 2020-06-19 16:22 ` [dpdk-dev] [PATCH v2 0/9] Register non-EAL " David Marchand 2020-06-19 16:22 ` [dpdk-dev] [PATCH v2 1/9] eal: relocate per thread symbols to common David Marchand 2020-06-19 16:22 ` [dpdk-dev] [PATCH v2 2/9] eal: fix multiple definition of per lcore thread id David Marchand 2020-06-19 16:22 ` [dpdk-dev] [PATCH v2 3/9] eal: introduce thread init helper David Marchand 2020-06-19 16:22 ` [dpdk-dev] [PATCH v2 4/9] eal: introduce thread uninit helper David Marchand 2020-06-19 16:22 ` [dpdk-dev] [PATCH v2 5/9] eal: move lcore role code David Marchand 2020-06-19 16:22 ` [dpdk-dev] [PATCH v2 6/9] eal: register non-EAL threads as lcores David Marchand 2020-06-19 16:22 ` [dpdk-dev] [PATCH v2 7/9] eal: add lcore init callbacks David Marchand 2020-06-19 16:22 ` [dpdk-dev] [PATCH v2 8/9] eal: add lcore iterators David Marchand 2020-06-20 2:21 ` Stephen Hemminger 2020-06-19 16:22 ` [dpdk-dev] [PATCH v2 9/9] mempool/bucket: handle non-EAL lcores David Marchand 2020-06-22 13:25 ` [dpdk-dev] [PATCH v3 0/9] Register non-EAL threads as lcore David Marchand 2020-06-22 13:25 ` [dpdk-dev] [PATCH v3 1/9] eal: relocate per thread symbols to common David Marchand 2020-06-22 13:25 ` [dpdk-dev] [PATCH v3 2/9] eal: fix multiple definition of per lcore thread id David Marchand 2020-06-22 13:25 ` [dpdk-dev] [PATCH v3 3/9] eal: introduce thread init helper David Marchand 2020-06-22 13:25 ` [dpdk-dev] [PATCH v3 4/9] eal: introduce thread uninit helper David Marchand 2020-06-22 13:25 ` [dpdk-dev] [PATCH v3 5/9] eal: move lcore role code David Marchand 2020-06-22 13:25 ` [dpdk-dev] [PATCH v3 6/9] eal: register non-EAL threads as lcores David Marchand 2020-06-22 15:49 ` Ananyev, Konstantin 2020-06-22 16:37 ` Ananyev, Konstantin 2020-06-23 7:49 ` David Marchand 2020-06-23 9:14 ` Bruce Richardson 2020-06-23 12:49 ` David Marchand 2020-06-23 13:15 ` Ananyev, Konstantin 2020-06-24 9:23 ` David Marchand 2020-06-24 9:56 ` Bruce Richardson 2020-06-24 10:08 ` Thomas Monjalon 2020-06-24 10:45 ` Ananyev, Konstantin 2020-06-24 10:39 ` Ananyev, Konstantin 2020-06-24 10:48 ` David Marchand 2020-06-24 11:59 ` Ananyev, Konstantin 2020-06-26 14:43 ` David Marchand 2020-06-30 10:35 ` Thomas Monjalon 2020-06-30 12:07 ` Ananyev, Konstantin 2020-06-30 12:44 ` Olivier Matz 2020-06-30 14:37 ` Thomas Monjalon 2020-06-30 19:02 ` Ananyev, Konstantin 2020-06-30 14:35 ` Thomas Monjalon 2020-06-30 18:57 ` Ananyev, Konstantin 2020-07-01 7:48 ` David Marchand 2020-07-01 11:58 ` Ananyev, Konstantin 2020-07-02 13:06 ` David Marchand 2020-07-03 15:15 ` Thomas Monjalon 2020-07-03 16:40 ` Ananyev, Konstantin 2020-07-04 15:00 ` David Marchand 2020-07-04 21:24 ` Ananyev, Konstantin 2020-06-23 17:02 ` Andrew Rybchenko 2020-06-22 13:25 ` [dpdk-dev] [PATCH v3 7/9] eal: add lcore init callbacks David Marchand 2020-06-22 13:25 ` [dpdk-dev] [PATCH v3 8/9] eal: add lcore iterators David Marchand 2020-06-22 13:25 ` [dpdk-dev] [PATCH v3 9/9] mempool/bucket: handle non-EAL lcores David Marchand 2020-06-23 17:28 ` Andrew Rybchenko 2020-06-26 14:13 ` David Marchand 2020-06-26 14:34 ` Andrew Rybchenko 2020-06-26 14:47 ` [dpdk-dev] [PATCH v4 0/9] Register non-EAL threads as lcore David Marchand 2020-06-26 14:47 ` [dpdk-dev] [PATCH v4 1/9] eal: relocate per thread symbols to common David Marchand 2020-06-30 9:33 ` Olivier Matz 2020-06-26 14:47 ` [dpdk-dev] [PATCH v4 2/9] eal: fix multiple definition of per lcore thread id David Marchand 2020-06-30 9:34 ` Olivier Matz 2020-06-26 14:47 ` [dpdk-dev] [PATCH v4 3/9] eal: introduce thread init helper David Marchand 2020-06-30 9:37 ` Olivier Matz 2020-06-30 12:04 ` David Marchand 2020-06-26 14:47 ` [dpdk-dev] [PATCH v4 4/9] eal: introduce thread uninit helper David Marchand 2020-06-26 15:00 ` Jerin Jacob 2020-06-29 9:07 ` David Marchand 2020-06-29 8:59 ` [dpdk-dev] [EXT] " Sunil Kumar Kori 2020-06-29 9:25 ` David Marchand 2020-06-30 9:42 ` [dpdk-dev] " Olivier Matz 2020-07-01 8:00 ` David Marchand 2020-06-26 14:47 ` [dpdk-dev] [PATCH v4 5/9] eal: move lcore role code David Marchand 2020-06-30 9:45 ` Olivier Matz 2020-06-26 14:47 ` [dpdk-dev] [PATCH v4 6/9] eal: register non-EAL threads as lcores David Marchand 2020-06-29 14:27 ` Ananyev, Konstantin 2020-06-30 10:07 ` Olivier Matz 2020-07-01 7:13 ` David Marchand 2020-07-01 9:11 ` Olivier Matz 2020-06-26 14:47 ` [dpdk-dev] [PATCH v4 7/9] eal: add lcore init callbacks David Marchand 2020-06-29 12:46 ` Ananyev, Konstantin 2020-06-30 10:09 ` Olivier Matz 2020-06-30 10:15 ` Olivier Matz 2020-06-26 14:47 ` [dpdk-dev] [PATCH v4 8/9] eal: add lcore iterators David Marchand 2020-06-30 10:11 ` Olivier Matz 2020-06-26 14:47 ` [dpdk-dev] [PATCH v4 9/9] mempool/bucket: handle non-EAL lcores David Marchand 2020-06-26 14:52 ` Andrew Rybchenko 2020-07-06 14:15 ` [dpdk-dev] [PATCH v5 00/10] Register non-EAL threads as lcore David Marchand 2020-07-06 14:15 ` [dpdk-dev] [PATCH v5 01/10] eal: relocate per thread symbols to common David Marchand 2020-07-06 14:15 ` [dpdk-dev] [PATCH v5 02/10] eal: fix multiple definition of per lcore thread id David Marchand 2020-07-06 14:15 ` [dpdk-dev] [PATCH v5 03/10] eal: introduce thread init helper David Marchand 2020-07-06 14:16 ` [dpdk-dev] [PATCH v5 04/10] eal: introduce thread uninit helper David Marchand 2020-07-06 14:16 ` [dpdk-dev] [PATCH v5 05/10] eal: move lcore role code David Marchand 2020-07-06 14:16 ` [dpdk-dev] [PATCH v5 06/10] eal: register non-EAL threads as lcores David Marchand 2020-07-06 14:16 ` [dpdk-dev] [PATCH v5 07/10] eal: add lcore init callbacks David Marchand 2020-07-06 14:16 ` [dpdk-dev] [PATCH v5 08/10] eal: add lcore iterators David Marchand 2020-07-06 14:16 ` [dpdk-dev] [PATCH v5 09/10] mempool/bucket: handle non-EAL lcores David Marchand 2020-07-06 14:16 ` [dpdk-dev] [PATCH v5 10/10] eal: add multiprocess disable API David Marchand 2020-07-06 20:52 ` [dpdk-dev] [PATCH v6 00/10] Register non-EAL threads as lcore David Marchand 2020-07-06 20:52 ` [dpdk-dev] [PATCH v6 01/10] eal: relocate per thread symbols to common David Marchand 2020-07-06 20:52 ` [dpdk-dev] [PATCH v6 02/10] eal: fix multiple definition of per lcore thread id David Marchand 2020-07-06 20:52 ` [dpdk-dev] [PATCH v6 03/10] eal: introduce thread init helper David Marchand 2020-07-06 20:52 ` David Marchand [this message] 2020-07-06 20:52 ` [dpdk-dev] [PATCH v6 05/10] eal: move lcore role code David Marchand 2020-07-06 20:52 ` [dpdk-dev] [PATCH v6 06/10] eal: register non-EAL threads as lcores David Marchand 2020-07-06 20:52 ` [dpdk-dev] [PATCH v6 07/10] eal: add lcore init callbacks David Marchand 2020-07-06 20:52 ` [dpdk-dev] [PATCH v6 08/10] eal: add lcore iterators David Marchand 2020-07-06 20:52 ` [dpdk-dev] [PATCH v6 09/10] mempool/bucket: handle non-EAL lcores David Marchand 2020-07-06 20:52 ` [dpdk-dev] [PATCH v6 10/10] eal: add multiprocess disable API David Marchand 2020-07-06 23:22 ` [dpdk-dev] [PATCH v6 00/10] Register non-EAL threads as lcore Ananyev, Konstantin 2020-07-08 13:05 ` David Marchand 2020-07-08 13:06 ` 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=20200706205234.8040-5-david.marchand@redhat.com \ --to=david.marchand@redhat.com \ --cc=arybchenko@solarflare.com \ --cc=bruce.richardson@intel.com \ --cc=dev@dpdk.org \ --cc=harini.ramakrishnan@microsoft.com \ --cc=i.maximets@ovn.org \ --cc=ian.stokes@intel.com \ --cc=jerinj@marvell.com \ --cc=jerinjacobk@gmail.com \ --cc=konstantin.ananyev@intel.com \ --cc=ktraynor@redhat.com \ --cc=mdr@ashroe.eu \ --cc=ocardona@microsoft.com \ --cc=olivier.matz@6wind.com \ --cc=pallavi.kadam@intel.com \ --cc=ranjit.menon@intel.com \ --cc=skori@marvell.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
DPDK patches and discussions This inbox may be cloned and mirrored by anyone: git clone --mirror https://inbox.dpdk.org/dev/0 dev/git/0.git # If you have public-inbox 1.1+ installed, you may # initialize and index your mirror using the following commands: public-inbox-init -V2 dev dev/ https://inbox.dpdk.org/dev \ dev@dpdk.org public-inbox-index dev Example config snippet for mirrors. Newsgroup available over NNTP: nntp://inbox.dpdk.org/inbox.dpdk.dev AGPL code for this site: git clone https://public-inbox.org/public-inbox.git