2010-12-23 13:10:22 -02:00
# perf script event handlers, generated by perf script -g python
2010-01-27 02:27:58 -06:00
# (c) 2010, Tom Zanussi <tzanussi@gmail.com>
# Licensed under the terms of the GNU GPL License version 2
#
# This script tests basic functionality such as flag and symbol
# strings, common_xxx() calls back into perf, begin, end, unhandled
# events, etc. Basically, if this script runs successfully and
# displays expected results, Python scripting support should be ok.
2019-03-01 17:18:59 -08:00
from __future__ import print_function
2010-01-27 02:27:58 -06:00
import os
import sys
sys . path . append ( os . environ [ ' PERF_EXEC_PATH ' ] + \
' /scripts/python/Perf-Trace-Util/lib/Perf/Trace ' )
from Core import *
from perf_trace_context import *
unhandled = autodict ( )
def trace_begin ( ) :
2019-03-01 17:18:59 -08:00
print ( " trace_begin " )
2010-01-27 02:27:58 -06:00
pass
def trace_end ( ) :
2019-03-01 17:18:57 -08:00
print_unhandled ( )
2010-01-27 02:27:58 -06:00
def irq__softirq_entry ( event_name , context , common_cpu ,
2019-03-01 17:18:57 -08:00
common_secs , common_nsecs , common_pid , common_comm ,
common_callchain , vec ) :
print_header ( event_name , common_cpu , common_secs , common_nsecs ,
common_pid , common_comm )
2010-01-27 02:27:58 -06:00
2019-03-01 17:18:57 -08:00
print_uncommon ( context )
2010-01-27 02:27:58 -06:00
2019-03-01 17:18:59 -08:00
print ( " vec= %s " % ( symbol_str ( " irq__softirq_entry " , " vec " , vec ) ) )
2010-01-27 02:27:58 -06:00
def kmem__kmalloc ( event_name , context , common_cpu ,
2019-03-01 17:18:57 -08:00
common_secs , common_nsecs , common_pid , common_comm ,
common_callchain , call_site , ptr , bytes_req , bytes_alloc ,
gfp_flags ) :
print_header ( event_name , common_cpu , common_secs , common_nsecs ,
common_pid , common_comm )
2010-01-27 02:27:58 -06:00
2019-03-01 17:18:57 -08:00
print_uncommon ( context )
2010-01-27 02:27:58 -06:00
2019-03-01 17:18:59 -08:00
print ( " call_site= %u , ptr= %u , bytes_req= %u , "
" bytes_alloc= %u , gfp_flags= %s " %
2010-01-27 02:27:58 -06:00
( call_site , ptr , bytes_req , bytes_alloc ,
2019-03-01 17:18:59 -08:00
flag_str ( " kmem__kmalloc " , " gfp_flags " , gfp_flags ) ) )
2010-01-27 02:27:58 -06:00
2010-05-31 23:12:09 +02:00
def trace_unhandled ( event_name , context , event_fields_dict ) :
2019-03-01 17:18:57 -08:00
try :
unhandled [ event_name ] + = 1
except TypeError :
unhandled [ event_name ] = 1
2010-01-27 02:27:58 -06:00
def print_header ( event_name , cpu , secs , nsecs , pid , comm ) :
2019-03-01 17:18:59 -08:00
print ( " %-20s %5u %05u . %09u %8u %-20s " %
2019-03-01 17:18:57 -08:00
( event_name , cpu , secs , nsecs , pid , comm ) ,
2019-03-01 17:18:59 -08:00
end = ' ' )
2010-01-27 02:27:58 -06:00
# print trace fields not included in handler args
def print_uncommon ( context ) :
2019-03-01 17:18:59 -08:00
print ( " common_preempt_count= %d , common_flags= %s , "
" common_lock_depth= %d , " %
2019-03-01 17:18:57 -08:00
( common_pc ( context ) , trace_flag_str ( common_flags ( context ) ) ,
2019-03-01 17:18:59 -08:00
common_lock_depth ( context ) ) )
2010-01-27 02:27:58 -06:00
def print_unhandled ( ) :
2019-03-01 17:18:57 -08:00
keys = unhandled . keys ( )
if not keys :
return
2010-01-27 02:27:58 -06:00
2019-03-01 17:18:59 -08:00
print ( " \n unhandled events: \n " )
2010-01-27 02:27:58 -06:00
2019-03-01 17:18:59 -08:00
print ( " %-40s %10s " % ( " event " , " count " ) )
print ( " %-40s %10s " % ( " ---------------------------------------- " ,
" ----------- " ) )
2010-01-27 02:27:58 -06:00
2019-03-01 17:18:57 -08:00
for event_name in keys :
2019-03-01 17:18:59 -08:00
print ( " %-40s %10d \n " % ( event_name , unhandled [ event_name ] ) )