Patch "perf tools: Fix trigger class trigger_on()" 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
perf tools: Fix trigger class trigger_on()
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:
perf-tools-fix-trigger-class-trigger_on.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
de19e5c3c51fdb1ff20d0f61d099db902ff7494bMon Sep 17 00:00:00 2001
From: Adrian Hunter <[email protected]>
Date: Wed, 28 Feb 2018 10:39:04 +0200
Subject: perf tools: Fix trigger class trigger_on()
From: Adrian Hunter <[email protected]>
commit de19e5c3c51fdb1ff20d0f61d099db902ff7494b upstream.
trigger_on() means that the trigger is available but not ready, however trigger_on() was making it ready. That can segfault if the signal comes before trigger_ready(). e.g. (USR2 signal delivery not shown)
$ perf record -e intel_pt//u -S sleep 1 perf: Segmentation fault Obtained 16 stack frames. /home/ahunter/bin/perf(sighandler_dump_stack+0x40) [0x4ec550] /lib/x86_64-linux-gnu/libc.so.6(+0x36caf) [0x7fa76411acaf] /home/ahunter/bin/perf(perf_evsel__disable+0x26) [0x4b9dd6] /home/ahunter/bin/perf() [0x43a45b] /lib/x86_64-linux-gnu/libc.so.6(+0x36caf) [0x7fa76411acaf] /lib/x86_64-linux-gnu/libc.so.6(__xstat64+0x15) [0x7fa7641d2cc5] /home/ahunter/bin/perf() [0x4ec6c9] /home/ahunter/bin/perf() [0x4ec73b] /home/ahunter/bin/perf() [0x4ec73b] /home/ahunter/bin/perf() [0x4ec73b] /home/ahunter/bin/perf() [0x4eca15] /home/ahunter/bin/perf(machine__create_kernel_maps+0x257) [0x4f0b77] /home/ahunter/bin/perf(perf_session__new+0xc0) [0x4f86f0] /home/ahunter/bin/perf(cmd_record+0x722) [0x43c132] /home/ahunter/bin/perf() [0x4a11ae] /home/ahunter/bin/perf(main+0x5d4) [0x427fb4]
Note, for testing purposes, this is hard to hit unless you add some sleep() in builtin-record.c before record__open().
--- tools/perf/util/trigger.h | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-)
tools/perf/util/trigger.h +5 -4
@@ -11,7 +11,7 @@* States and transits: * * -* OFF--(on)--> READY --(hit)--> HIT +* OFF--> ON --> READY --(hit)--> HIT * ^ | * | (ready) * | |
@@ -26,8 +26,9 @@ struct trigger {volatile enum {TRIGGER_ERROR =-2 ,TRIGGER_OFF =-1 , -TRIGGER_READY =0 , -TRIGGER_HIT =1 , +TRIGGER_ON =0 , +TRIGGER_READY =1 , +TRIGGER_HIT =2 , } state;const char *name; };
@@ -49,7 +50,7 @@ static inline bool trigger_is_error(strustatic inline void trigger_on (struct trigger *t) {TRIGGER_WARN_ONCE (t,TRIGGER_OFF ); - t->state =TRIGGER_READY ; + t->state =TRIGGER_ON ; }static inline void trigger_ready (struct trigger *t)
Patches currently in stable-queue which might be from [email protected] are
queue-4.9/perf-tools-fix-trigger-class-trigger_on.patch