diff options
author | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2024-10-10 13:17:30 +0300 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2024-10-10 13:49:09 +0300 |
commit | 1e0f696469d6892959e621cebb3d2b722b816951 (patch) | |
tree | 97adf2c22db8c9c5435b88d881be25c525ff62af | |
parent | 9b15f68c41270b636153f94443acb86033b6e818 (diff) | |
download | linux-1e0f696469d6892959e621cebb3d2b722b816951.tar.xz |
Revert "perf callchain: Fix stitch LBR memory leaks"
This reverts commit 42cd165b4cf89fb42b794d3a9ee792a7696c49b3 which is
commit 599c19397b17d197fc1184bbc950f163a292efc9 upstream.
It causes build breaks in the 6.6.y tree and should not have been
applied, so revert it.
Link: https://lore.kernel.org/r/894e27c0-c1e8-476d-ae16-11ab65853d1f@oracle.com
Link: https://lore.kernel.org/r/f7bbebca-4da4-4270-ba6c-659a4c40b430@gmail.com
Reported-by: Harshit Mogalapalli <harshit.m.mogalapalli@oracle.com>
Reported-by: Florian Fainelli <f.fainelli@gmail.com>
Cc: Kan Liang <kan.liang@linux.intel.com>
Cc: Ian Rogers <irogers@google.com>
Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Andi Kleen <ak@linux.intel.com>
Cc: Anne Macedo <retpolanne@posteo.net>
Cc: Changbin Du <changbin.du@huawei.com>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Mark Rutland <mark.rutland@arm.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: Sasha Levin <sashal@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-rw-r--r-- | tools/perf/util/machine.c | 17 | ||||
-rw-r--r-- | tools/perf/util/thread.c | 4 | ||||
-rw-r--r-- | tools/perf/util/thread.h | 1 |
3 files changed, 2 insertions, 20 deletions
diff --git a/tools/perf/util/machine.c b/tools/perf/util/machine.c index 24dead4e3065..7c6874804660 100644 --- a/tools/perf/util/machine.c +++ b/tools/perf/util/machine.c @@ -2536,12 +2536,8 @@ static void save_lbr_cursor_node(struct thread *thread, cursor->curr = cursor->first; else cursor->curr = cursor->curr->next; - - map_symbol__exit(&lbr_stitch->prev_lbr_cursor[idx].ms); memcpy(&lbr_stitch->prev_lbr_cursor[idx], cursor->curr, sizeof(struct callchain_cursor_node)); - lbr_stitch->prev_lbr_cursor[idx].ms.maps = maps__get(cursor->curr->ms.maps); - lbr_stitch->prev_lbr_cursor[idx].ms.map = map__get(cursor->curr->ms.map); lbr_stitch->prev_lbr_cursor[idx].valid = true; cursor->pos++; @@ -2752,9 +2748,6 @@ static bool has_stitched_lbr(struct thread *thread, memcpy(&stitch_node->cursor, &lbr_stitch->prev_lbr_cursor[i], sizeof(struct callchain_cursor_node)); - stitch_node->cursor.ms.maps = maps__get(lbr_stitch->prev_lbr_cursor[i].ms.maps); - stitch_node->cursor.ms.map = map__get(lbr_stitch->prev_lbr_cursor[i].ms.map); - if (callee) list_add(&stitch_node->node, &lbr_stitch->lists); else @@ -2778,8 +2771,6 @@ static bool alloc_lbr_stitch(struct thread *thread, unsigned int max_lbr) if (!thread__lbr_stitch(thread)->prev_lbr_cursor) goto free_lbr_stitch; - thread__lbr_stitch(thread)->prev_lbr_cursor_size = max_lbr + 1; - INIT_LIST_HEAD(&thread__lbr_stitch(thread)->lists); INIT_LIST_HEAD(&thread__lbr_stitch(thread)->free_lists); @@ -2835,12 +2826,8 @@ static int resolve_lbr_callchain_sample(struct thread *thread, max_lbr, callee); if (!stitched_lbr && !list_empty(&lbr_stitch->lists)) { - struct stitch_list *stitch_node; - - list_for_each_entry(stitch_node, &lbr_stitch->lists, node) - map_symbol__exit(&stitch_node->cursor.ms); - - list_splice_init(&lbr_stitch->lists, &lbr_stitch->free_lists); + list_replace_init(&lbr_stitch->lists, + &lbr_stitch->free_lists); } memcpy(&lbr_stitch->prev_sample, sample, sizeof(*sample)); } diff --git a/tools/perf/util/thread.c b/tools/perf/util/thread.c index 6817b99e550b..61e9f449c725 100644 --- a/tools/perf/util/thread.c +++ b/tools/perf/util/thread.c @@ -478,7 +478,6 @@ void thread__free_stitch_list(struct thread *thread) return; list_for_each_entry_safe(pos, tmp, &lbr_stitch->lists, node) { - map_symbol__exit(&pos->cursor.ms); list_del_init(&pos->node); free(pos); } @@ -488,9 +487,6 @@ void thread__free_stitch_list(struct thread *thread) free(pos); } - for (unsigned int i = 0 ; i < lbr_stitch->prev_lbr_cursor_size; i++) - map_symbol__exit(&lbr_stitch->prev_lbr_cursor[i].ms); - zfree(&lbr_stitch->prev_lbr_cursor); free(thread__lbr_stitch(thread)); thread__set_lbr_stitch(thread, NULL); diff --git a/tools/perf/util/thread.h b/tools/perf/util/thread.h index a5423f834dc9..0df775b5c110 100644 --- a/tools/perf/util/thread.h +++ b/tools/perf/util/thread.h @@ -28,7 +28,6 @@ struct lbr_stitch { struct list_head free_lists; struct perf_sample prev_sample; struct callchain_cursor_node *prev_lbr_cursor; - unsigned int prev_lbr_cursor_size; }; struct thread_rb_node { |