1*4d161f03STom Zanussi# perf trace event handlers, generated by perf trace -g python
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# This script tests basic functionality such as flag and symbol
6*4d161f03STom Zanussi# strings, common_xxx() calls back into perf, begin, end, unhandled
7*4d161f03STom Zanussi# events, etc.  Basically, if this script runs successfully and
8*4d161f03STom Zanussi# displays expected results, Python scripting support should be ok.
9*4d161f03STom Zanussi
10*4d161f03STom Zanussiimport os
11*4d161f03STom Zanussiimport sys
12*4d161f03STom Zanussi
13*4d161f03STom Zanussisys.path.append(os.environ['PERF_EXEC_PATH'] + \
14*4d161f03STom Zanussi	'/scripts/python/Perf-Trace-Util/lib/Perf/Trace')
15*4d161f03STom Zanussi
16*4d161f03STom Zanussifrom Core import *
17*4d161f03STom Zanussifrom perf_trace_context import *
18*4d161f03STom Zanussi
19*4d161f03STom Zanussiunhandled = autodict()
20*4d161f03STom Zanussi
21*4d161f03STom Zanussidef trace_begin():
22*4d161f03STom Zanussi	print "trace_begin"
23*4d161f03STom Zanussi	pass
24*4d161f03STom Zanussi
25*4d161f03STom Zanussidef trace_end():
26*4d161f03STom Zanussi        print_unhandled()
27*4d161f03STom Zanussi
28*4d161f03STom Zanussidef irq__softirq_entry(event_name, context, common_cpu,
29*4d161f03STom Zanussi	common_secs, common_nsecs, common_pid, common_comm,
30*4d161f03STom Zanussi	vec):
31*4d161f03STom Zanussi		print_header(event_name, common_cpu, common_secs, common_nsecs,
32*4d161f03STom Zanussi			common_pid, common_comm)
33*4d161f03STom Zanussi
34*4d161f03STom Zanussi                print_uncommon(context)
35*4d161f03STom Zanussi
36*4d161f03STom Zanussi		print "vec=%s\n" % \
37*4d161f03STom Zanussi		(symbol_str("irq__softirq_entry", "vec", vec)),
38*4d161f03STom Zanussi
39*4d161f03STom Zanussidef kmem__kmalloc(event_name, context, common_cpu,
40*4d161f03STom Zanussi	common_secs, common_nsecs, common_pid, common_comm,
41*4d161f03STom Zanussi	call_site, ptr, bytes_req, bytes_alloc,
42*4d161f03STom Zanussi	gfp_flags):
43*4d161f03STom Zanussi		print_header(event_name, common_cpu, common_secs, common_nsecs,
44*4d161f03STom Zanussi			common_pid, common_comm)
45*4d161f03STom Zanussi
46*4d161f03STom Zanussi                print_uncommon(context)
47*4d161f03STom Zanussi
48*4d161f03STom Zanussi		print "call_site=%u, ptr=%u, bytes_req=%u, " \
49*4d161f03STom Zanussi		"bytes_alloc=%u, gfp_flags=%s\n" % \
50*4d161f03STom Zanussi		(call_site, ptr, bytes_req, bytes_alloc,
51*4d161f03STom Zanussi
52*4d161f03STom Zanussi		flag_str("kmem__kmalloc", "gfp_flags", gfp_flags)),
53*4d161f03STom Zanussi
54*4d161f03STom Zanussidef trace_unhandled(event_name, context, common_cpu, common_secs, common_nsecs,
55*4d161f03STom Zanussi		common_pid, common_comm):
56*4d161f03STom Zanussi    try:
57*4d161f03STom Zanussi        unhandled[event_name] += 1
58*4d161f03STom Zanussi    except TypeError:
59*4d161f03STom Zanussi        unhandled[event_name] = 1
60*4d161f03STom Zanussi
61*4d161f03STom Zanussidef print_header(event_name, cpu, secs, nsecs, pid, comm):
62*4d161f03STom Zanussi	print "%-20s %5u %05u.%09u %8u %-20s " % \
63*4d161f03STom Zanussi	(event_name, cpu, secs, nsecs, pid, comm),
64*4d161f03STom Zanussi
65*4d161f03STom Zanussi# print trace fields not included in handler args
66*4d161f03STom Zanussidef print_uncommon(context):
67*4d161f03STom Zanussi    print "common_preempt_count=%d, common_flags=%s, common_lock_depth=%d, " \
68*4d161f03STom Zanussi        % (common_pc(context), trace_flag_str(common_flags(context)), \
69*4d161f03STom Zanussi               common_lock_depth(context))
70*4d161f03STom Zanussi
71*4d161f03STom Zanussidef print_unhandled():
72*4d161f03STom Zanussi    keys = unhandled.keys()
73*4d161f03STom Zanussi    if not keys:
74*4d161f03STom Zanussi        return
75*4d161f03STom Zanussi
76*4d161f03STom Zanussi    print "\nunhandled events:\n\n",
77*4d161f03STom Zanussi
78*4d161f03STom Zanussi    print "%-40s  %10s\n" % ("event", "count"),
79*4d161f03STom Zanussi    print "%-40s  %10s\n" % ("----------------------------------------", \
80*4d161f03STom Zanussi                                 "-----------"),
81*4d161f03STom Zanussi
82*4d161f03STom Zanussi    for event_name in keys:
83*4d161f03STom Zanussi	print "%-40s  %10d\n" % (event_name, unhandled[event_name])
84