aboutsummaryrefslogtreecommitdiffstats
path: root/tools/perf/scripts/python
diff options
context:
space:
mode:
authorTakashi Iwai <tiwai@suse.de>2017-08-02 11:11:45 -0400
committerTakashi Iwai <tiwai@suse.de>2017-08-02 11:11:45 -0400
commit5ef26e966d3fd105ad9a7e8e8f6d12c7fbd4c03d (patch)
treedd5c2ce3daab2e398ab8c0fb852587b647131568 /tools/perf/scripts/python
parent3f3c371421e601fa93b6cb7fb52da9ad59ec90b4 (diff)
parent60668a2dcafcf8aad0860f5a5c93eb2d7438052e (diff)
Merge tag 'asoc-fix-v4.13-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound into for-linus
ASoC: Fixes for v4.13 Quite a few fixes here that have been sent since the merge window, the biggest one is the fix from Tony for some confusion with the device property API which was causing issues with the of-graph card. This is fixed with some changes in the graph API itself as it seemed very likely to be error prone.
Diffstat (limited to 'tools/perf/scripts/python')
-rw-r--r--tools/perf/scripts/python/bin/intel-pt-events-record13
-rw-r--r--tools/perf/scripts/python/bin/intel-pt-events-report3
-rw-r--r--tools/perf/scripts/python/intel-pt-events.py128
3 files changed, 144 insertions, 0 deletions
diff --git a/tools/perf/scripts/python/bin/intel-pt-events-record b/tools/perf/scripts/python/bin/intel-pt-events-record
new file mode 100644
index 000000000000..10fe2b6977d4
--- /dev/null
+++ b/tools/perf/scripts/python/bin/intel-pt-events-record
@@ -0,0 +1,13 @@
1#!/bin/bash
2
3#
4# print Intel PT Power Events and PTWRITE. The intel_pt PMU event needs
5# to be specified with appropriate config terms.
6#
7if ! echo "$@" | grep -q intel_pt ; then
8 echo "Options must include the Intel PT event e.g. -e intel_pt/pwr_evt,ptw/"
9 echo "and for power events it probably needs to be system wide i.e. -a option"
10 echo "For example: -a -e intel_pt/pwr_evt,branch=0/ sleep 1"
11 exit 1
12fi
13perf record $@
diff --git a/tools/perf/scripts/python/bin/intel-pt-events-report b/tools/perf/scripts/python/bin/intel-pt-events-report
new file mode 100644
index 000000000000..9a9c92fcd026
--- /dev/null
+++ b/tools/perf/scripts/python/bin/intel-pt-events-report
@@ -0,0 +1,3 @@
1#!/bin/bash
2# description: print Intel PT Power Events and PTWRITE
3perf script $@ -s "$PERF_EXEC_PATH"/scripts/python/intel-pt-events.py \ No newline at end of file
diff --git a/tools/perf/scripts/python/intel-pt-events.py b/tools/perf/scripts/python/intel-pt-events.py
new file mode 100644
index 000000000000..b19172d673af
--- /dev/null
+++ b/tools/perf/scripts/python/intel-pt-events.py
@@ -0,0 +1,128 @@
1# intel-pt-events.py: Print Intel PT Power Events and PTWRITE
2# Copyright (c) 2017, Intel Corporation.
3#
4# This program is free software; you can redistribute it and/or modify it
5# under the terms and conditions of the GNU General Public License,
6# version 2, as published by the Free Software Foundation.
7#
8# This program is distributed in the hope it will be useful, but WITHOUT
9# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
10# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
11# more details.
12
13import os
14import sys
15import struct
16
17sys.path.append(os.environ['PERF_EXEC_PATH'] + \
18 '/scripts/python/Perf-Trace-Util/lib/Perf/Trace')
19
20# These perf imports are not used at present
21#from perf_trace_context import *
22#from Core import *
23
24def trace_begin():
25 print "Intel PT Power Events and PTWRITE"
26
27def trace_end():
28 print "End"
29
30def trace_unhandled(event_name, context, event_fields_dict):
31 print ' '.join(['%s=%s'%(k,str(v))for k,v in sorted(event_fields_dict.items())])
32
33def print_ptwrite(raw_buf):
34 data = struct.unpack_from("<IQ", raw_buf)
35 flags = data[0]
36 payload = data[1]
37 exact_ip = flags & 1
38 print "IP: %u payload: %#x" % (exact_ip, payload),
39
40def print_cbr(raw_buf):
41 data = struct.unpack_from("<BBBBII", raw_buf)
42 cbr = data[0]
43 f = (data[4] + 500) / 1000
44 p = ((cbr * 1000 / data[2]) + 5) / 10
45 print "%3u freq: %4u MHz (%3u%%)" % (cbr, f, p),
46
47def print_mwait(raw_buf):
48 data = struct.unpack_from("<IQ", raw_buf)
49 payload = data[1]
50 hints = payload & 0xff
51 extensions = (payload >> 32) & 0x3
52 print "hints: %#x extensions: %#x" % (hints, extensions),
53
54def print_pwre(raw_buf):
55 data = struct.unpack_from("<IQ", raw_buf)
56 payload = data[1]
57 hw = (payload >> 7) & 1
58 cstate = (payload >> 12) & 0xf
59 subcstate = (payload >> 8) & 0xf
60 print "hw: %u cstate: %u sub-cstate: %u" % (hw, cstate, subcstate),
61
62def print_exstop(raw_buf):
63 data = struct.unpack_from("<I", raw_buf)
64 flags = data[0]
65 exact_ip = flags & 1
66 print "IP: %u" % (exact_ip),
67
68def print_pwrx(raw_buf):
69 data = struct.unpack_from("<IQ", raw_buf)
70 payload = data[1]
71 deepest_cstate = payload & 0xf
72 last_cstate = (payload >> 4) & 0xf
73 wake_reason = (payload >> 8) & 0xf
74 print "deepest cstate: %u last cstate: %u wake reason: %#x" % (deepest_cstate, last_cstate, wake_reason),
75
76def print_common_start(comm, sample, name):
77 ts = sample["time"]
78 cpu = sample["cpu"]
79 pid = sample["pid"]
80 tid = sample["tid"]
81 print "%16s %5u/%-5u [%03u] %9u.%09u %7s:" % (comm, pid, tid, cpu, ts / 1000000000, ts %1000000000, name),
82
83def print_common_ip(sample, symbol, dso):
84 ip = sample["ip"]
85 print "%16x %s (%s)" % (ip, symbol, dso)
86
87def process_event(param_dict):
88 event_attr = param_dict["attr"]
89 sample = param_dict["sample"]
90 raw_buf = param_dict["raw_buf"]
91 comm = param_dict["comm"]
92 name = param_dict["ev_name"]
93
94 # Symbol and dso info are not always resolved
95 if (param_dict.has_key("dso")):
96 dso = param_dict["dso"]
97 else:
98 dso = "[unknown]"
99
100 if (param_dict.has_key("symbol")):
101 symbol = param_dict["symbol"]
102 else:
103 symbol = "[unknown]"
104
105 if name == "ptwrite":
106 print_common_start(comm, sample, name)
107 print_ptwrite(raw_buf)
108 print_common_ip(sample, symbol, dso)
109 elif name == "cbr":
110 print_common_start(comm, sample, name)
111 print_cbr(raw_buf)
112 print_common_ip(sample, symbol, dso)
113 elif name == "mwait":
114 print_common_start(comm, sample, name)
115 print_mwait(raw_buf)
116 print_common_ip(sample, symbol, dso)
117 elif name == "pwre":
118 print_common_start(comm, sample, name)
119 print_pwre(raw_buf)
120 print_common_ip(sample, symbol, dso)
121 elif name == "exstop":
122 print_common_start(comm, sample, name)
123 print_exstop(raw_buf)
124 print_common_ip(sample, symbol, dso)
125 elif name == "pwrx":
126 print_common_start(comm, sample, name)
127 print_pwrx(raw_buf)
128 print_common_ip(sample, symbol, dso)