I'm announcing the release of the 6.6.56 kernel.
This fixes a build error in perf that I should have caught before 6.6.55 was released (my fault, it was correctly reported...). If you do not use the perf tool in the 6.6.y tree, there is no need to upgrade.
The updated 6.6.y git tree can be found at: git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-6.6.y and can be browsed at the normal kernel.org git web browser: https://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git%3Ba=summa...
thanks,
greg k-h
------------
Makefile | 4 ++-- tools/perf/util/machine.c | 17 ++--------------- tools/perf/util/thread.c | 4 ---- tools/perf/util/thread.h | 1 - 4 files changed, 4 insertions(+), 22 deletions(-)
Greg Kroah-Hartman (2): Revert "perf callchain: Fix stitch LBR memory leaks" Linux 6.6.56
diff --git a/Makefile b/Makefile index 6e297758842d..301c5694995c 100644 --- a/Makefile +++ b/Makefile @@ -1,9 +1,9 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 6 PATCHLEVEL = 6 -SUBLEVEL = 55 +SUBLEVEL = 56 EXTRAVERSION = -NAME = Hurr durr I'ma ninja sloth +NAME = Pinguïn Aangedreven
# *DOCUMENTATION* # To see a list of typical targets execute "make help" 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 {
linux-stable-mirror@lists.linaro.org