From: Greg Kroah-Hartman Date: Sun, 9 Jun 2024 11:17:02 +0000 (+0200) Subject: 6.6-stable patches X-Git-Tag: v6.1.93~16 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=aa678908a178f233f5fb8bdaf80707c55bb6caad;p=thirdparty%2Fkernel%2Fstable-queue.git 6.6-stable patches added patches: perf-evlist-add-perf_evlist__go_system_wide-helper.patch perf-util-add-a-function-for-replacing-characters-in-a-string.patch --- diff --git a/queue-6.6/perf-evlist-add-perf_evlist__go_system_wide-helper.patch b/queue-6.6/perf-evlist-add-perf_evlist__go_system_wide-helper.patch new file mode 100644 index 00000000000..6beb5fbb320 --- /dev/null +++ b/queue-6.6/perf-evlist-add-perf_evlist__go_system_wide-helper.patch @@ -0,0 +1,62 @@ +From f6ff1c760431be34e4daaa44f242be911becd998 Mon Sep 17 00:00:00 2001 +From: Yang Jihong +Date: Mon, 4 Sep 2023 02:33:35 +0000 +Subject: perf evlist: Add perf_evlist__go_system_wide() helper + +From: Yang Jihong + +commit f6ff1c760431be34e4daaa44f242be911becd998 upstream. + +For dummy events that keep tracking, we may need to modify its cpu_maps. + +For example, change the cpu_maps to record sideband events for all CPUS. + +Add perf_evlist__go_system_wide() helper to support this scenario. + +Signed-off-by: Yang Jihong +Acked-by: Adrian Hunter +Tested-by: Ravi Bangoria +Cc: Alexander Shishkin +Cc: Andi Kleen +Cc: Anshuman Khandual +Cc: Ian Rogers +Cc: Ingo Molnar +Cc: James Clark +Cc: Jiri Olsa +Cc: Kan Liang +Cc: Mark Rutland +Cc: Namhyung Kim +Cc: Peter Zijlstra +Cc: Thomas Richter +Link: https://lore.kernel.org/r/20230904023340.12707-2-yangjihong1@huawei.com +Signed-off-by: Arnaldo Carvalho de Melo +Signed-off-by: Greg Kroah-Hartman +--- + tools/lib/perf/evlist.c | 9 +++++++++ + tools/lib/perf/include/internal/evlist.h | 2 ++ + 2 files changed, 11 insertions(+) + +--- a/tools/lib/perf/evlist.c ++++ b/tools/lib/perf/evlist.c +@@ -744,3 +744,12 @@ int perf_evlist__nr_groups(struct perf_e + } + return nr_groups; + } ++ ++void perf_evlist__go_system_wide(struct perf_evlist *evlist, struct perf_evsel *evsel) ++{ ++ if (!evsel->system_wide) { ++ evsel->system_wide = true; ++ if (evlist->needs_map_propagation) ++ __perf_evlist__propagate_maps(evlist, evsel); ++ } ++} +--- a/tools/lib/perf/include/internal/evlist.h ++++ b/tools/lib/perf/include/internal/evlist.h +@@ -135,4 +135,6 @@ int perf_evlist__id_add_fd(struct perf_e + void perf_evlist__reset_id_hash(struct perf_evlist *evlist); + + void __perf_evlist__set_leader(struct list_head *list, struct perf_evsel *leader); ++ ++void perf_evlist__go_system_wide(struct perf_evlist *evlist, struct perf_evsel *evsel); + #endif /* __LIBPERF_INTERNAL_EVLIST_H */ diff --git a/queue-6.6/perf-util-add-a-function-for-replacing-characters-in-a-string.patch b/queue-6.6/perf-util-add-a-function-for-replacing-characters-in-a-string.patch new file mode 100644 index 00000000000..7cacbd7f1c0 --- /dev/null +++ b/queue-6.6/perf-util-add-a-function-for-replacing-characters-in-a-string.patch @@ -0,0 +1,177 @@ +From 8a55c1e2c9e123b399b272a7db23f09dbb74af21 Mon Sep 17 00:00:00 2001 +From: James Clark +Date: Mon, 4 Sep 2023 10:50:45 +0100 +Subject: perf util: Add a function for replacing characters in a string + +From: James Clark + +commit 8a55c1e2c9e123b399b272a7db23f09dbb74af21 upstream. + +It finds all occurrences of a single character and replaces them with +a multi character string. This will be used in a test in a following +commit. + +Reviewed-by: Ian Rogers +Signed-off-by: James Clark +Cc: Adrian Hunter +Cc: Alexander Shishkin +Cc: Chen Zhongjin +Cc: Eduard Zingerman +Cc: Haixin Yu +Cc: Ingo Molnar +Cc: Jing Zhang +Cc: Jiri Olsa +Cc: John Garry +Cc: Kajol Jain +Cc: Kan Liang +Cc: Leo Yan +Cc: Liam Howlett +Cc: Madhavan Srinivasan +Cc: Mark Rutland +Cc: Mike Leach +Cc: Namhyung Kim +Cc: Peter Zijlstra +Cc: Ravi Bangoria +Cc: Will Deacon +Cc: Yang Jihong +Cc: linux-arm-kernel@lists.infradead.org +Link: https://lore.kernel.org/r/20230904095104.1162928-4-james.clark@arm.com +Signed-off-by: Arnaldo Carvalho de Melo +Signed-off-by: Greg Kroah-Hartman +--- + tools/perf/tests/Build | 1 + tools/perf/tests/builtin-test.c | 1 + tools/perf/tests/tests.h | 1 + tools/perf/tests/util.c | 31 +++++++++++++++++++++++++ + tools/perf/util/string.c | 48 ++++++++++++++++++++++++++++++++++++++++ + tools/perf/util/string2.h | 1 + 6 files changed, 83 insertions(+) + create mode 100644 tools/perf/tests/util.c + +--- a/tools/perf/tests/Build ++++ b/tools/perf/tests/Build +@@ -66,6 +66,7 @@ perf-y += dlfilter-test.o + perf-y += sigtrap.o + perf-y += event_groups.o + perf-y += symbols.o ++perf-y += util.o + + ifeq ($(SRCARCH),$(filter $(SRCARCH),x86 arm arm64 powerpc)) + perf-$(CONFIG_DWARF_UNWIND) += dwarf-unwind.o +--- a/tools/perf/tests/builtin-test.c ++++ b/tools/perf/tests/builtin-test.c +@@ -123,6 +123,7 @@ static struct test_suite *generic_tests[ + &suite__sigtrap, + &suite__event_groups, + &suite__symbols, ++ &suite__util, + NULL, + }; + +--- a/tools/perf/tests/tests.h ++++ b/tools/perf/tests/tests.h +@@ -145,6 +145,7 @@ DECLARE_SUITE(dlfilter); + DECLARE_SUITE(sigtrap); + DECLARE_SUITE(event_groups); + DECLARE_SUITE(symbols); ++DECLARE_SUITE(util); + + /* + * PowerPC and S390 do not support creation of instruction breakpoints using the +--- /dev/null ++++ b/tools/perf/tests/util.c +@@ -0,0 +1,31 @@ ++// SPDX-License-Identifier: GPL-2.0 ++#include "tests.h" ++#include "util/debug.h" ++ ++#include ++#include ++#include ++ ++static int test_strreplace(char needle, const char *haystack, ++ const char *replace, const char *expected) ++{ ++ char *new = strreplace_chars(needle, haystack, replace); ++ int ret = strcmp(new, expected); ++ ++ free(new); ++ return ret == 0; ++} ++ ++static int test__util(struct test_suite *t __maybe_unused, int subtest __maybe_unused) ++{ ++ TEST_ASSERT_VAL("empty string", test_strreplace(' ', "", "123", "")); ++ TEST_ASSERT_VAL("no match", test_strreplace('5', "123", "4", "123")); ++ TEST_ASSERT_VAL("replace 1", test_strreplace('3', "123", "4", "124")); ++ TEST_ASSERT_VAL("replace 2", test_strreplace('a', "abcabc", "ef", "efbcefbc")); ++ TEST_ASSERT_VAL("replace long", test_strreplace('a', "abcabc", "longlong", ++ "longlongbclonglongbc")); ++ ++ return 0; ++} ++ ++DEFINE_SUITE("util", util); +--- a/tools/perf/util/string.c ++++ b/tools/perf/util/string.c +@@ -301,3 +301,51 @@ unsigned int hex(char c) + return c - 'a' + 10; + return c - 'A' + 10; + } ++ ++/* ++ * Replace all occurrences of character 'needle' in string 'haystack' with ++ * string 'replace' ++ * ++ * The new string could be longer so a new string is returned which must be ++ * freed. ++ */ ++char *strreplace_chars(char needle, const char *haystack, const char *replace) ++{ ++ int replace_len = strlen(replace); ++ char *new_s, *to; ++ const char *loc = strchr(haystack, needle); ++ const char *from = haystack; ++ int num = 0; ++ ++ /* Count occurrences */ ++ while (loc) { ++ loc = strchr(loc + 1, needle); ++ num++; ++ } ++ ++ /* Allocate enough space for replacements and reset first location */ ++ new_s = malloc(strlen(haystack) + (num * (replace_len - 1) + 1)); ++ if (!new_s) ++ return NULL; ++ loc = strchr(haystack, needle); ++ to = new_s; ++ ++ while (loc) { ++ /* Copy original string up to found char and update positions */ ++ memcpy(to, from, 1 + loc - from); ++ to += loc - from; ++ from = loc + 1; ++ ++ /* Copy replacement string and update positions */ ++ memcpy(to, replace, replace_len); ++ to += replace_len; ++ ++ /* needle next occurrence or end of string */ ++ loc = strchr(from, needle); ++ } ++ ++ /* Copy any remaining chars + null */ ++ strcpy(to, from); ++ ++ return new_s; ++} +--- a/tools/perf/util/string2.h ++++ b/tools/perf/util/string2.h +@@ -39,5 +39,6 @@ char *strpbrk_esc(char *str, const char + char *strdup_esc(const char *str); + + unsigned int hex(char c); ++char *strreplace_chars(char needle, const char *haystack, const char *replace); + + #endif /* PERF_STRING_H */ diff --git a/queue-6.6/series b/queue-6.6/series index a88fdc2e2d1..96bbce37e27 100644 --- a/queue-6.6/series +++ b/queue-6.6/series @@ -734,3 +734,5 @@ kvm-x86-don-t-advertise-guest.maxphyaddr-as-host.maxphyaddr-in-cpuid.patch genirq-cpuhotplug-x86-vector-prevent-vector-leak-during-cpu-offline.patch platform-x86-intel-tpmi-handle-error-from-tpmi_process_info.patch platform-x86-intel-uncore-freq-don-t-present-root-domain-on-error.patch +perf-util-add-a-function-for-replacing-characters-in-a-string.patch +perf-evlist-add-perf_evlist__go_system_wide-helper.patch