]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
Fixes for 4.14
authorSasha Levin <sashal@kernel.org>
Mon, 25 Apr 2022 08:25:55 +0000 (04:25 -0400)
committerSasha Levin <sashal@kernel.org>
Mon, 25 Apr 2022 08:25:55 +0000 (04:25 -0400)
Signed-off-by: Sasha Levin <sashal@kernel.org>
queue-4.14/powerpc-perf-fix-power9-event-alternatives.patch [new file with mode: 0644]
queue-4.14/series

diff --git a/queue-4.14/powerpc-perf-fix-power9-event-alternatives.patch b/queue-4.14/powerpc-perf-fix-power9-event-alternatives.patch
new file mode 100644 (file)
index 0000000..d004341
--- /dev/null
@@ -0,0 +1,90 @@
+From 1c44d9659e688a04a25b2dd7e1b86938ca318d34 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 19 Apr 2022 17:18:27 +0530
+Subject: powerpc/perf: Fix power9 event alternatives
+
+From: Athira Rajeev <atrajeev@linux.vnet.ibm.com>
+
+[ Upstream commit 0dcad700bb2776e3886fe0a645a4bf13b1e747cd ]
+
+When scheduling a group of events, there are constraint checks done to
+make sure all events can go in a group. Example, one of the criteria is
+that events in a group cannot use the same PMC. But platform specific
+PMU supports alternative event for some of the event codes. During
+perf_event_open(), if any event group doesn't match constraint check
+criteria, further lookup is done to find alternative event.
+
+By current design, the array of alternatives events in PMU code is
+expected to be sorted by column 0. This is because in
+find_alternative() the return criteria is based on event code
+comparison. ie. "event < ev_alt[i][0])". This optimisation is there
+since find_alternative() can be called multiple times. In power9 PMU
+code, the alternative event array is not sorted properly and hence there
+is breakage in finding alternative events.
+
+To work with existing logic, fix the alternative event array to be
+sorted by column 0 for power9-pmu.c
+
+Results:
+
+With alternative events, multiplexing can be avoided. That is, for
+example, in power9 PM_LD_MISS_L1 (0x3e054) has alternative event,
+PM_LD_MISS_L1_ALT (0x400f0). This is an identical event which can be
+programmed in a different PMC.
+
+Before:
+
+ # perf stat -e r3e054,r300fc
+
+ Performance counter stats for 'system wide':
+
+           1057860      r3e054              (50.21%)
+               379      r300fc              (49.79%)
+
+       0.944329741 seconds time elapsed
+
+Since both the events are using PMC3 in this case, they are
+multiplexed here.
+
+After:
+
+ # perf stat -e r3e054,r300fc
+
+ Performance counter stats for 'system wide':
+
+           1006948      r3e054
+               182      r300fc
+
+Fixes: 91e0bd1e6251 ("powerpc/perf: Add PM_LD_MISS_L1 and PM_BR_2PATH to power9 event list")
+Signed-off-by: Athira Rajeev <atrajeev@linux.vnet.ibm.com>
+Reviewed-by: Madhavan Srinivasan <maddy@linux.vnet.ibm.com>
+Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
+Link: https://lore.kernel.org/r/20220419114828.89843-1-atrajeev@linux.vnet.ibm.com
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ arch/powerpc/perf/power9-pmu.c | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+diff --git a/arch/powerpc/perf/power9-pmu.c b/arch/powerpc/perf/power9-pmu.c
+index efb19b089023..75d3a10e20fe 100644
+--- a/arch/powerpc/perf/power9-pmu.c
++++ b/arch/powerpc/perf/power9-pmu.c
+@@ -107,11 +107,11 @@ extern struct attribute_group isa207_pmu_format_group;
+ /* Table of alternatives, sorted by column 0 */
+ static const unsigned int power9_event_alternatives[][MAX_ALT] = {
+-      { PM_INST_DISP,                 PM_INST_DISP_ALT },
+-      { PM_RUN_CYC_ALT,               PM_RUN_CYC },
+-      { PM_RUN_INST_CMPL_ALT,         PM_RUN_INST_CMPL },
+-      { PM_LD_MISS_L1,                PM_LD_MISS_L1_ALT },
+       { PM_BR_2PATH,                  PM_BR_2PATH_ALT },
++      { PM_INST_DISP,                 PM_INST_DISP_ALT },
++      { PM_RUN_CYC_ALT,               PM_RUN_CYC },
++      { PM_LD_MISS_L1,                PM_LD_MISS_L1_ALT },
++      { PM_RUN_INST_CMPL_ALT,         PM_RUN_INST_CMPL },
+ };
+ static int power9_get_alternatives(u64 event, unsigned int flags, u64 alt[])
+-- 
+2.35.1
+
index 54d0d6571097bdcfbc47dff12ba43b4ddffedaa8..23d0a1daef06515b27bebaedf0d61d2b51bc09f8 100644 (file)
@@ -19,3 +19,4 @@ brcmfmac-sdio-fix-undefined-behavior-due-to-shift-ov.patch
 drm-msm-mdp5-check-the-return-of-kzalloc.patch
 net-macb-restart-tx-only-if-queue-pointer-is-lagging.patch
 stat-fix-inconsistency-between-struct-stat-and-struc.patch
+powerpc-perf-fix-power9-event-alternatives.patch