162306a36Sopenharmony_ci# perf script event handlers, generated by perf script -g perl 262306a36Sopenharmony_ci# (c) 2009, Tom Zanussi <tzanussi@gmail.com> 362306a36Sopenharmony_ci# Licensed under the terms of the GNU GPL License version 2 462306a36Sopenharmony_ci 562306a36Sopenharmony_ci# This script tests basic functionality such as flag and symbol 662306a36Sopenharmony_ci# strings, common_xxx() calls back into perf, begin, end, unhandled 762306a36Sopenharmony_ci# events, etc. Basically, if this script runs successfully and 862306a36Sopenharmony_ci# displays expected results, perl scripting support should be ok. 962306a36Sopenharmony_ci 1062306a36Sopenharmony_ciuse lib "$ENV{'PERF_EXEC_PATH'}/scripts/perl/Perf-Trace-Util/lib"; 1162306a36Sopenharmony_ciuse lib "./Perf-Trace-Util/lib"; 1262306a36Sopenharmony_ciuse Perf::Trace::Core; 1362306a36Sopenharmony_ciuse Perf::Trace::Context; 1462306a36Sopenharmony_ciuse Perf::Trace::Util; 1562306a36Sopenharmony_ci 1662306a36Sopenharmony_cisub trace_begin 1762306a36Sopenharmony_ci{ 1862306a36Sopenharmony_ci print "trace_begin\n"; 1962306a36Sopenharmony_ci} 2062306a36Sopenharmony_ci 2162306a36Sopenharmony_cisub trace_end 2262306a36Sopenharmony_ci{ 2362306a36Sopenharmony_ci print "trace_end\n"; 2462306a36Sopenharmony_ci 2562306a36Sopenharmony_ci print_unhandled(); 2662306a36Sopenharmony_ci} 2762306a36Sopenharmony_ci 2862306a36Sopenharmony_cisub irq::softirq_entry 2962306a36Sopenharmony_ci{ 3062306a36Sopenharmony_ci my ($event_name, $context, $common_cpu, $common_secs, $common_nsecs, 3162306a36Sopenharmony_ci $common_pid, $common_comm, $common_callchain, 3262306a36Sopenharmony_ci $vec) = @_; 3362306a36Sopenharmony_ci 3462306a36Sopenharmony_ci print_header($event_name, $common_cpu, $common_secs, $common_nsecs, 3562306a36Sopenharmony_ci $common_pid, $common_comm); 3662306a36Sopenharmony_ci 3762306a36Sopenharmony_ci print_uncommon($context); 3862306a36Sopenharmony_ci 3962306a36Sopenharmony_ci printf("vec=%s\n", 4062306a36Sopenharmony_ci symbol_str("irq::softirq_entry", "vec", $vec)); 4162306a36Sopenharmony_ci} 4262306a36Sopenharmony_ci 4362306a36Sopenharmony_cisub kmem::kmalloc 4462306a36Sopenharmony_ci{ 4562306a36Sopenharmony_ci my ($event_name, $context, $common_cpu, $common_secs, $common_nsecs, 4662306a36Sopenharmony_ci $common_pid, $common_comm, $common_callchain, 4762306a36Sopenharmony_ci $call_site, $ptr, $bytes_req, $bytes_alloc, 4862306a36Sopenharmony_ci $gfp_flags) = @_; 4962306a36Sopenharmony_ci 5062306a36Sopenharmony_ci print_header($event_name, $common_cpu, $common_secs, $common_nsecs, 5162306a36Sopenharmony_ci $common_pid, $common_comm); 5262306a36Sopenharmony_ci 5362306a36Sopenharmony_ci print_uncommon($context); 5462306a36Sopenharmony_ci 5562306a36Sopenharmony_ci printf("call_site=%p, ptr=%p, bytes_req=%u, bytes_alloc=%u, ". 5662306a36Sopenharmony_ci "gfp_flags=%s\n", 5762306a36Sopenharmony_ci $call_site, $ptr, $bytes_req, $bytes_alloc, 5862306a36Sopenharmony_ci 5962306a36Sopenharmony_ci flag_str("kmem::kmalloc", "gfp_flags", $gfp_flags)); 6062306a36Sopenharmony_ci} 6162306a36Sopenharmony_ci 6262306a36Sopenharmony_ci# print trace fields not included in handler args 6362306a36Sopenharmony_cisub print_uncommon 6462306a36Sopenharmony_ci{ 6562306a36Sopenharmony_ci my ($context) = @_; 6662306a36Sopenharmony_ci 6762306a36Sopenharmony_ci printf("common_preempt_count=%d, common_flags=%s, common_lock_depth=%d, ", 6862306a36Sopenharmony_ci common_pc($context), trace_flag_str(common_flags($context)), 6962306a36Sopenharmony_ci common_lock_depth($context)); 7062306a36Sopenharmony_ci 7162306a36Sopenharmony_ci} 7262306a36Sopenharmony_ci 7362306a36Sopenharmony_cimy %unhandled; 7462306a36Sopenharmony_ci 7562306a36Sopenharmony_cisub print_unhandled 7662306a36Sopenharmony_ci{ 7762306a36Sopenharmony_ci if ((scalar keys %unhandled) == 0) { 7862306a36Sopenharmony_ci return; 7962306a36Sopenharmony_ci } 8062306a36Sopenharmony_ci 8162306a36Sopenharmony_ci print "\nunhandled events:\n\n"; 8262306a36Sopenharmony_ci 8362306a36Sopenharmony_ci printf("%-40s %10s\n", "event", "count"); 8462306a36Sopenharmony_ci printf("%-40s %10s\n", "----------------------------------------", 8562306a36Sopenharmony_ci "-----------"); 8662306a36Sopenharmony_ci 8762306a36Sopenharmony_ci foreach my $event_name (keys %unhandled) { 8862306a36Sopenharmony_ci printf("%-40s %10d\n", $event_name, $unhandled{$event_name}); 8962306a36Sopenharmony_ci } 9062306a36Sopenharmony_ci} 9162306a36Sopenharmony_ci 9262306a36Sopenharmony_cisub trace_unhandled 9362306a36Sopenharmony_ci{ 9462306a36Sopenharmony_ci my ($event_name, $context, $common_cpu, $common_secs, $common_nsecs, 9562306a36Sopenharmony_ci $common_pid, $common_comm, $common_callchain) = @_; 9662306a36Sopenharmony_ci 9762306a36Sopenharmony_ci $unhandled{$event_name}++; 9862306a36Sopenharmony_ci} 9962306a36Sopenharmony_ci 10062306a36Sopenharmony_cisub print_header 10162306a36Sopenharmony_ci{ 10262306a36Sopenharmony_ci my ($event_name, $cpu, $secs, $nsecs, $pid, $comm) = @_; 10362306a36Sopenharmony_ci 10462306a36Sopenharmony_ci printf("%-20s %5u %05u.%09u %8u %-20s ", 10562306a36Sopenharmony_ci $event_name, $cpu, $secs, $nsecs, $pid, $comm); 10662306a36Sopenharmony_ci} 107