summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>2024-10-10 13:17:30 +0300
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2024-10-10 13:49:09 +0300
commit1e0f696469d6892959e621cebb3d2b722b816951 (patch)
tree97adf2c22db8c9c5435b88d881be25c525ff62af
parent9b15f68c41270b636153f94443acb86033b6e818 (diff)
downloadlinux-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.c17
-rw-r--r--tools/perf/util/thread.c4
-rw-r--r--tools/perf/util/thread.h1
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 {