1*4d161f03STom Zanussi# failed system call counts
2*4d161f03STom Zanussi# (c) 2010, Tom Zanussi <[email protected]>
3*4d161f03STom Zanussi# Licensed under the terms of the GNU GPL License version 2
4*4d161f03STom Zanussi#
5*4d161f03STom Zanussi# Displays system-wide failed system call totals
6*4d161f03STom Zanussi# If a [comm] arg is specified, only syscalls called by [comm] are displayed.
7*4d161f03STom Zanussi
8*4d161f03STom Zanussiuse lib "$ENV{'PERF_EXEC_PATH'}/scripts/perl/Perf-Trace-Util/lib";
9*4d161f03STom Zanussiuse lib "./Perf-Trace-Util/lib";
10*4d161f03STom Zanussiuse Perf::Trace::Core;
11*4d161f03STom Zanussiuse Perf::Trace::Context;
12*4d161f03STom Zanussiuse Perf::Trace::Util;
13*4d161f03STom Zanussi
14*4d161f03STom Zanussimy %failed_syscalls;
15*4d161f03STom Zanussi
16*4d161f03STom Zanussisub raw_syscalls::sys_exit
17*4d161f03STom Zanussi{
18*4d161f03STom Zanussi	my ($event_name, $context, $common_cpu, $common_secs, $common_nsecs,
19*4d161f03STom Zanussi	    $common_pid, $common_comm,
20*4d161f03STom Zanussi	    $id, $ret) = @_;
21*4d161f03STom Zanussi
22*4d161f03STom Zanussi	if ($ret < 0) {
23*4d161f03STom Zanussi	    $failed_syscalls{$common_comm}++;
24*4d161f03STom Zanussi	}
25*4d161f03STom Zanussi}
26*4d161f03STom Zanussi
27*4d161f03STom Zanussisub trace_end
28*4d161f03STom Zanussi{
29*4d161f03STom Zanussi    printf("\nfailed syscalls by comm:\n\n");
30*4d161f03STom Zanussi
31*4d161f03STom Zanussi    printf("%-20s  %10s\n", "comm", "# errors");
32*4d161f03STom Zanussi    printf("%-20s  %6s  %10s\n", "--------------------", "----------");
33*4d161f03STom Zanussi
34*4d161f03STom Zanussi    foreach my $comm (sort {$failed_syscalls{$b} <=> $failed_syscalls{$a}}
35*4d161f03STom Zanussi		      keys %failed_syscalls) {
36*4d161f03STom Zanussi	    printf("%-20s  %10s\n", $comm, $failed_syscalls{$comm});
37*4d161f03STom Zanussi    }
38*4d161f03STom Zanussi}
39