xref: /OK3568_Linux_fs/kernel/tools/perf/scripts/perl/check-perf-trace.pl (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun# perf script event handlers, generated by perf script -g perl
2*4882a593Smuzhiyun# (c) 2009, Tom Zanussi <tzanussi@gmail.com>
3*4882a593Smuzhiyun# Licensed under the terms of the GNU GPL License version 2
4*4882a593Smuzhiyun
5*4882a593Smuzhiyun# This script tests basic functionality such as flag and symbol
6*4882a593Smuzhiyun# strings, common_xxx() calls back into perf, begin, end, unhandled
7*4882a593Smuzhiyun# events, etc.  Basically, if this script runs successfully and
8*4882a593Smuzhiyun# displays expected results, perl scripting support should be ok.
9*4882a593Smuzhiyun
10*4882a593Smuzhiyunuse lib "$ENV{'PERF_EXEC_PATH'}/scripts/perl/Perf-Trace-Util/lib";
11*4882a593Smuzhiyunuse lib "./Perf-Trace-Util/lib";
12*4882a593Smuzhiyunuse Perf::Trace::Core;
13*4882a593Smuzhiyunuse Perf::Trace::Context;
14*4882a593Smuzhiyunuse Perf::Trace::Util;
15*4882a593Smuzhiyun
16*4882a593Smuzhiyunsub trace_begin
17*4882a593Smuzhiyun{
18*4882a593Smuzhiyun    print "trace_begin\n";
19*4882a593Smuzhiyun}
20*4882a593Smuzhiyun
21*4882a593Smuzhiyunsub trace_end
22*4882a593Smuzhiyun{
23*4882a593Smuzhiyun    print "trace_end\n";
24*4882a593Smuzhiyun
25*4882a593Smuzhiyun    print_unhandled();
26*4882a593Smuzhiyun}
27*4882a593Smuzhiyun
28*4882a593Smuzhiyunsub irq::softirq_entry
29*4882a593Smuzhiyun{
30*4882a593Smuzhiyun	my ($event_name, $context, $common_cpu, $common_secs, $common_nsecs,
31*4882a593Smuzhiyun	    $common_pid, $common_comm, $common_callchain,
32*4882a593Smuzhiyun	    $vec) = @_;
33*4882a593Smuzhiyun
34*4882a593Smuzhiyun	print_header($event_name, $common_cpu, $common_secs, $common_nsecs,
35*4882a593Smuzhiyun		     $common_pid, $common_comm);
36*4882a593Smuzhiyun
37*4882a593Smuzhiyun	print_uncommon($context);
38*4882a593Smuzhiyun
39*4882a593Smuzhiyun	printf("vec=%s\n",
40*4882a593Smuzhiyun	       symbol_str("irq::softirq_entry", "vec", $vec));
41*4882a593Smuzhiyun}
42*4882a593Smuzhiyun
43*4882a593Smuzhiyunsub kmem::kmalloc
44*4882a593Smuzhiyun{
45*4882a593Smuzhiyun	my ($event_name, $context, $common_cpu, $common_secs, $common_nsecs,
46*4882a593Smuzhiyun	    $common_pid, $common_comm, $common_callchain,
47*4882a593Smuzhiyun	    $call_site, $ptr, $bytes_req, $bytes_alloc,
48*4882a593Smuzhiyun	    $gfp_flags) = @_;
49*4882a593Smuzhiyun
50*4882a593Smuzhiyun	print_header($event_name, $common_cpu, $common_secs, $common_nsecs,
51*4882a593Smuzhiyun		     $common_pid, $common_comm);
52*4882a593Smuzhiyun
53*4882a593Smuzhiyun	print_uncommon($context);
54*4882a593Smuzhiyun
55*4882a593Smuzhiyun	printf("call_site=%p, ptr=%p, bytes_req=%u, bytes_alloc=%u, ".
56*4882a593Smuzhiyun	       "gfp_flags=%s\n",
57*4882a593Smuzhiyun	       $call_site, $ptr, $bytes_req, $bytes_alloc,
58*4882a593Smuzhiyun
59*4882a593Smuzhiyun	       flag_str("kmem::kmalloc", "gfp_flags", $gfp_flags));
60*4882a593Smuzhiyun}
61*4882a593Smuzhiyun
62*4882a593Smuzhiyun# print trace fields not included in handler args
63*4882a593Smuzhiyunsub print_uncommon
64*4882a593Smuzhiyun{
65*4882a593Smuzhiyun    my ($context) = @_;
66*4882a593Smuzhiyun
67*4882a593Smuzhiyun    printf("common_preempt_count=%d, common_flags=%s, common_lock_depth=%d, ",
68*4882a593Smuzhiyun	   common_pc($context), trace_flag_str(common_flags($context)),
69*4882a593Smuzhiyun	   common_lock_depth($context));
70*4882a593Smuzhiyun
71*4882a593Smuzhiyun}
72*4882a593Smuzhiyun
73*4882a593Smuzhiyunmy %unhandled;
74*4882a593Smuzhiyun
75*4882a593Smuzhiyunsub print_unhandled
76*4882a593Smuzhiyun{
77*4882a593Smuzhiyun    if ((scalar keys %unhandled) == 0) {
78*4882a593Smuzhiyun	return;
79*4882a593Smuzhiyun    }
80*4882a593Smuzhiyun
81*4882a593Smuzhiyun    print "\nunhandled events:\n\n";
82*4882a593Smuzhiyun
83*4882a593Smuzhiyun    printf("%-40s  %10s\n", "event", "count");
84*4882a593Smuzhiyun    printf("%-40s  %10s\n", "----------------------------------------",
85*4882a593Smuzhiyun	   "-----------");
86*4882a593Smuzhiyun
87*4882a593Smuzhiyun    foreach my $event_name (keys %unhandled) {
88*4882a593Smuzhiyun	printf("%-40s  %10d\n", $event_name, $unhandled{$event_name});
89*4882a593Smuzhiyun    }
90*4882a593Smuzhiyun}
91*4882a593Smuzhiyun
92*4882a593Smuzhiyunsub trace_unhandled
93*4882a593Smuzhiyun{
94*4882a593Smuzhiyun    my ($event_name, $context, $common_cpu, $common_secs, $common_nsecs,
95*4882a593Smuzhiyun	$common_pid, $common_comm, $common_callchain) = @_;
96*4882a593Smuzhiyun
97*4882a593Smuzhiyun    $unhandled{$event_name}++;
98*4882a593Smuzhiyun}
99*4882a593Smuzhiyun
100*4882a593Smuzhiyunsub print_header
101*4882a593Smuzhiyun{
102*4882a593Smuzhiyun	my ($event_name, $cpu, $secs, $nsecs, $pid, $comm) = @_;
103*4882a593Smuzhiyun
104*4882a593Smuzhiyun	printf("%-20s %5u %05u.%09u %8u %-20s ",
105*4882a593Smuzhiyun	       $event_name, $cpu, $secs, $nsecs, $pid, $comm);
106*4882a593Smuzhiyun}
107