Merge tag 'for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mst/vhost
[linux-2.6-microblaze.git] / Documentation / trace / postprocess / decode_msr.py
1 #!/usr/bin/env python
2 # add symbolic names to read_msr / write_msr in trace
3 # decode_msr msr-index.h < trace
4 import sys
5 import re
6
7 msrs = dict()
8
9 with open(sys.argv[1] if len(sys.argv) > 1 else "msr-index.h", "r") as f:
10         for j in f:
11                 m = re.match(r'#define (MSR_\w+)\s+(0x[0-9a-fA-F]+)', j)
12                 if m:
13                         msrs[int(m.group(2), 16)] = m.group(1)
14
15 extra_ranges = (
16         ( "MSR_LASTBRANCH_%d_FROM_IP", 0x680, 0x69F ),
17         ( "MSR_LASTBRANCH_%d_TO_IP", 0x6C0, 0x6DF ),
18         ( "LBR_INFO_%d", 0xdc0, 0xddf ),
19 )
20
21 for j in sys.stdin:
22         m = re.search(r'(read|write)_msr:\s+([0-9a-f]+)', j)
23         if m:
24                 r = None
25                 num = int(m.group(2), 16)
26                 if num in msrs:
27                         r = msrs[num]
28                 else:
29                         for er in extra_ranges:
30                                 if er[1] <= num <= er[2]:
31                                         r = er[0] % (num - er[1],)
32                                         break
33                 if r:
34                         j = j.replace(" " + m.group(2), " " + r + "(" + m.group(2) + ")")
35         print j,
36
37