Skip to content

Commit 3d49807

Browse files
ahunter6acmel
authored andcommitted
perf tools: Add new Intel PT packet definitions
New features have been added to Intel PT which include a number of new packet definitions. This patch adds packet definitions for new packets: TMA, MTC, CYC, VMCS, TRACESTOP and MNT. Also another bit in PIP is defined. This patch only adds support for the definitions. Later patches add support for decoding TMA, MTC, CYC and TRACESTOP which is where those packets are explained. VMCS and the newly defined bit in PIP are used with virtualization which is not supported yet. MNT is a maintenance packet which the decoder should ignore. For details, refer to the June 2015 or later Intel 64 and IA-32 Architectures SDM Chapter 36 Intel Processor Trace. Signed-off-by: Adrian Hunter <adrian.hunter@intel.com> Cc: Jiri Olsa <jolsa@redhat.com> Link: http://lkml.kernel.org/r/1437150840-31811-19-git-send-email-adrian.hunter@intel.com Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
1 parent bc9b6bf commit 3d49807

File tree

3 files changed

+201
-17
lines changed

3 files changed

+201
-17
lines changed

tools/perf/util/intel-pt-decoder/intel-pt-decoder.c

Lines changed: 65 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -923,6 +923,7 @@ static int intel_pt_walk_psbend(struct intel_pt_decoder *decoder)
923923
case INTEL_PT_TIP_PGE:
924924
case INTEL_PT_TIP:
925925
case INTEL_PT_TNT:
926+
case INTEL_PT_TRACESTOP:
926927
case INTEL_PT_BAD:
927928
case INTEL_PT_PSB:
928929
intel_pt_log("ERROR: Unexpected packet\n");
@@ -935,6 +936,9 @@ static int intel_pt_walk_psbend(struct intel_pt_decoder *decoder)
935936
intel_pt_calc_tsc_timestamp(decoder);
936937
break;
937938

939+
case INTEL_PT_TMA:
940+
break;
941+
938942
case INTEL_PT_CBR:
939943
decoder->cbr = decoder->packet.payload;
940944
break;
@@ -944,7 +948,7 @@ static int intel_pt_walk_psbend(struct intel_pt_decoder *decoder)
944948
break;
945949

946950
case INTEL_PT_PIP:
947-
decoder->cr3 = decoder->packet.payload;
951+
decoder->cr3 = decoder->packet.payload & (BIT63 - 1);
948952
break;
949953

950954
case INTEL_PT_FUP:
@@ -956,6 +960,12 @@ static int intel_pt_walk_psbend(struct intel_pt_decoder *decoder)
956960
intel_pt_update_in_tx(decoder);
957961
break;
958962

963+
case INTEL_PT_MTC:
964+
break;
965+
966+
case INTEL_PT_CYC:
967+
case INTEL_PT_VMCS:
968+
case INTEL_PT_MNT:
959969
case INTEL_PT_PAD:
960970
default:
961971
break;
@@ -983,8 +993,10 @@ static int intel_pt_walk_fup_tip(struct intel_pt_decoder *decoder)
983993
switch (decoder->packet.type) {
984994
case INTEL_PT_TNT:
985995
case INTEL_PT_FUP:
996+
case INTEL_PT_TRACESTOP:
986997
case INTEL_PT_PSB:
987998
case INTEL_PT_TSC:
999+
case INTEL_PT_TMA:
9881000
case INTEL_PT_CBR:
9891001
case INTEL_PT_MODE_TSX:
9901002
case INTEL_PT_BAD:
@@ -1032,13 +1044,21 @@ static int intel_pt_walk_fup_tip(struct intel_pt_decoder *decoder)
10321044
return 0;
10331045

10341046
case INTEL_PT_PIP:
1035-
decoder->cr3 = decoder->packet.payload;
1047+
decoder->cr3 = decoder->packet.payload & (BIT63 - 1);
1048+
break;
1049+
1050+
case INTEL_PT_MTC:
1051+
break;
1052+
1053+
case INTEL_PT_CYC:
10361054
break;
10371055

10381056
case INTEL_PT_MODE_EXEC:
10391057
decoder->exec_mode = decoder->packet.payload;
10401058
break;
10411059

1060+
case INTEL_PT_VMCS:
1061+
case INTEL_PT_MNT:
10421062
case INTEL_PT_PAD:
10431063
break;
10441064

@@ -1122,6 +1142,9 @@ static int intel_pt_walk_trace(struct intel_pt_decoder *decoder)
11221142
}
11231143
return intel_pt_walk_fup_tip(decoder);
11241144

1145+
case INTEL_PT_TRACESTOP:
1146+
break;
1147+
11251148
case INTEL_PT_PSB:
11261149
intel_pt_clear_stack(&decoder->stack);
11271150
err = intel_pt_walk_psbend(decoder);
@@ -1132,13 +1155,22 @@ static int intel_pt_walk_trace(struct intel_pt_decoder *decoder)
11321155
break;
11331156

11341157
case INTEL_PT_PIP:
1135-
decoder->cr3 = decoder->packet.payload;
1158+
decoder->cr3 = decoder->packet.payload & (BIT63 - 1);
1159+
break;
1160+
1161+
case INTEL_PT_MTC:
11361162
break;
11371163

11381164
case INTEL_PT_TSC:
11391165
intel_pt_calc_tsc_timestamp(decoder);
11401166
break;
11411167

1168+
case INTEL_PT_TMA:
1169+
break;
1170+
1171+
case INTEL_PT_CYC:
1172+
break;
1173+
11421174
case INTEL_PT_CBR:
11431175
decoder->cbr = decoder->packet.payload;
11441176
break;
@@ -1162,6 +1194,8 @@ static int intel_pt_walk_trace(struct intel_pt_decoder *decoder)
11621194
return intel_pt_bug(decoder);
11631195

11641196
case INTEL_PT_PSBEND:
1197+
case INTEL_PT_VMCS:
1198+
case INTEL_PT_MNT:
11651199
case INTEL_PT_PAD:
11661200
break;
11671201

@@ -1202,16 +1236,25 @@ static int intel_pt_walk_psb(struct intel_pt_decoder *decoder)
12021236
}
12031237
break;
12041238

1239+
case INTEL_PT_MTC:
1240+
break;
1241+
12051242
case INTEL_PT_TSC:
12061243
intel_pt_calc_tsc_timestamp(decoder);
12071244
break;
12081245

1246+
case INTEL_PT_TMA:
1247+
break;
1248+
1249+
case INTEL_PT_CYC:
1250+
break;
1251+
12091252
case INTEL_PT_CBR:
12101253
decoder->cbr = decoder->packet.payload;
12111254
break;
12121255

12131256
case INTEL_PT_PIP:
1214-
decoder->cr3 = decoder->packet.payload;
1257+
decoder->cr3 = decoder->packet.payload & (BIT63 - 1);
12151258
break;
12161259

12171260
case INTEL_PT_MODE_EXEC:
@@ -1222,6 +1265,7 @@ static int intel_pt_walk_psb(struct intel_pt_decoder *decoder)
12221265
intel_pt_update_in_tx(decoder);
12231266
break;
12241267

1268+
case INTEL_PT_TRACESTOP:
12251269
case INTEL_PT_TNT:
12261270
intel_pt_log("ERROR: Unexpected packet\n");
12271271
if (decoder->ip)
@@ -1240,6 +1284,8 @@ static int intel_pt_walk_psb(struct intel_pt_decoder *decoder)
12401284
return 0;
12411285

12421286
case INTEL_PT_PSB:
1287+
case INTEL_PT_VMCS:
1288+
case INTEL_PT_MNT:
12431289
case INTEL_PT_PAD:
12441290
default:
12451291
break;
@@ -1282,16 +1328,25 @@ static int intel_pt_walk_to_ip(struct intel_pt_decoder *decoder)
12821328
intel_pt_set_last_ip(decoder);
12831329
break;
12841330

1331+
case INTEL_PT_MTC:
1332+
break;
1333+
12851334
case INTEL_PT_TSC:
12861335
intel_pt_calc_tsc_timestamp(decoder);
12871336
break;
12881337

1338+
case INTEL_PT_TMA:
1339+
break;
1340+
1341+
case INTEL_PT_CYC:
1342+
break;
1343+
12891344
case INTEL_PT_CBR:
12901345
decoder->cbr = decoder->packet.payload;
12911346
break;
12921347

12931348
case INTEL_PT_PIP:
1294-
decoder->cr3 = decoder->packet.payload;
1349+
decoder->cr3 = decoder->packet.payload & (BIT63 - 1);
12951350
break;
12961351

12971352
case INTEL_PT_MODE_EXEC:
@@ -1308,6 +1363,9 @@ static int intel_pt_walk_to_ip(struct intel_pt_decoder *decoder)
13081363
case INTEL_PT_BAD: /* Does not happen */
13091364
return intel_pt_bug(decoder);
13101365

1366+
case INTEL_PT_TRACESTOP:
1367+
break;
1368+
13111369
case INTEL_PT_PSB:
13121370
err = intel_pt_walk_psb(decoder);
13131371
if (err)
@@ -1321,6 +1379,8 @@ static int intel_pt_walk_to_ip(struct intel_pt_decoder *decoder)
13211379

13221380
case INTEL_PT_TNT:
13231381
case INTEL_PT_PSBEND:
1382+
case INTEL_PT_VMCS:
1383+
case INTEL_PT_MNT:
13241384
case INTEL_PT_PAD:
13251385
default:
13261386
break;

0 commit comments

Comments
 (0)