Patch "powerpc/perf: Fix oops when grouping different pmu events" has been added to the 4.9-stable tree
Subsystems (2)
This is a note to let you know that I've just added the patch titled
powerpc/perf: Fix oops when grouping different pmu events
to the 4.9-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
powerpc-perf-fix-oops-when-grouping-different-pmu-events.patch
and it can be found in the queue-4.9 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From foo@baz Fri Feb 23 11:48:40 CET 2018
From: Ravi Bangoria <[email protected]>
Date: Thu, 30 Nov 2017 14:03:22 +0530
Subject: powerpc/perf: Fix oops when grouping different pmu events
From: Ravi Bangoria <[email protected]>
[ Upstream commit 5aa04b3eb6fca63d2e9827be656dcadc26d54e11 ]
When user tries to group imc (In-Memory Collections) event with normal event, (sometime) kernel crashes with following log:
Faulting instruction address: 0x00000000
[link register ] c00000000010ce88 power_check_constraints+0x128/0x980
...
c00000000010e238 power_pmu_event_init+0x268/0x6f0
c0000000002dc60c perf_try_init_event+0xdc/0x1a0
c0000000002dce88 perf_event_alloc+0x7b8/0xac0
c0000000002e92e0 SyS_perf_event_open+0x530/0xda0
c00000000000b004 system_call+0x38/0xe0'event_base' field of 'struct hw_perf_event' is used as flags for normal hw events and used as memory address for imc events. While grouping these two types of events, collect_events() tries to interpret imc 'event_base' as a flag, which causes a corruption resulting in a crash.
Consider only those events which belongs to 'perf_hw_context' in collect_events().
--- arch/powerpc/perf/core-book3s.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
arch/powerpc/perf/core-book3s.c +2 -2
@@ -1381,7 +1381,7 @@ static int collect_events(struct perf_evint n =0 ;struct perf_event *event; -if (!is_software_event (group)) { +if (group->pmu->task_ctx_nr == perf_hw_context) {if (n >= max_count)return -1 ; ctrs[n] = group;
@@ -1389,7 +1389,7 @@ static int collect_events(struct perf_ev events[n++] = group->hw.config; }list_for_each_entry (event, &group->sibling_list, group_entry) { -if (!is_software_event (event) && +if (event->pmu->task_ctx_nr == perf_hw_context && event->state !=PERF_EVENT_STATE_OFF ) {if (n >= max_count)return -1 ;
Patches currently in stable-queue which might be from [email protected] are
queue-4.9/perf-top-fix-window-dimensions-change-handling.patch queue-4.9/powerpc-perf-fix-oops-when-grouping-different-pmu-events.patch