projects
/
openwrt
/
staging
/
blogic.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
| inline |
side by side
(parent:
0c5268b
)
perf perl scripts: Fix SIGALRM and pipe read race for rwtop
author
Jiri Olsa
<
[email protected]
>
Tue, 5 Feb 2013 16:05:50 +0000
(17:05 +0100)
committer
Arnaldo Carvalho de Melo
<
[email protected]
>
Wed, 6 Feb 2013 21:09:27 +0000
(18:09 -0300)
Fixing rwtop script race. The issue is caused by rwtop script triggering
SIGALRM and underneath pipe reading layer reporting error when
interrupted.
Fixing this by setting SA_RESTART for rwtop SIGALRM handler, which
avoids interruption of the pipe reading layer.
The discussion for this issue & fix is here:
https://lkml.org/lkml/2012/9/18/123
Signed-off-by: Jiri Olsa <
[email protected]
>
Original-patch-by: Andrew Jones <
[email protected]
>
Cc: Andrew Jones <
[email protected]
>
Cc: Corey Ashford <
[email protected]
>
Cc: David Ahern <
[email protected]
>
Cc: Frederic Weisbecker <
[email protected]
>
Cc: Ingo Molnar <
[email protected]
>
Cc: Namhyung Kim <
[email protected]
>
Cc: Paul Mackerras <
[email protected]
>
Cc: Peter Zijlstra <
[email protected]
>
Link:
http://lkml.kernel.org/r/
[email protected]
Signed-off-by: Arnaldo Carvalho de Melo <
[email protected]
>
tools/perf/scripts/perl/rwtop.pl
patch
|
blob
|
history
diff --git
a/tools/perf/scripts/perl/rwtop.pl
b/tools/perf/scripts/perl/rwtop.pl
index 4bb3ecd33472498b186afe3b809d9431737e4c03..8b20787021c1d211fc709b21ac6b77deaf3a288b 100644
(file)
--- a/
tools/perf/scripts/perl/rwtop.pl
+++ b/
tools/perf/scripts/perl/rwtop.pl
@@
-17,6
+17,7
@@
use lib "$ENV{'PERF_EXEC_PATH'}/scripts/perl/Perf-Trace-Util/lib";
use lib "./Perf-Trace-Util/lib";
use Perf::Trace::Core;
use Perf::Trace::Util;
+use POSIX qw/SIGALRM SA_RESTART/;
my $default_interval = 3;
my $nlines = 20;
@@
-90,7
+91,10
@@
sub syscalls::sys_enter_write
sub trace_begin
{
- $SIG{ALRM} = \&set_print_pending;
+ my $sa = POSIX::SigAction->new(\&set_print_pending);
+ $sa->flags(SA_RESTART);
+ $sa->safe(1);
+ POSIX::sigaction(SIGALRM, $sa) or die "Can't set SIGALRM handler: $!\n";
alarm 1;
}