Skip to content

Commit eb0760d

Browse files
ahunter6gregkh
authored andcommitted
perf intel-pt: Ensure never to set 'last_ip' when packet 'count' is zero
commit f952eac upstream. Intel PT uses IP compression based on the last IP. For decoding purposes, 'last IP' is not updated when a branch target has been suppressed, which is indicated by IPBytes == 0. IPBytes is stored in the packet 'count', so ensure never to set 'last_ip' when packet 'count' is zero. Signed-off-by: Adrian Hunter <[email protected]> Cc: Andi Kleen <[email protected]> Link: http://lkml.kernel.org/r/[email protected] Signed-off-by: Arnaldo Carvalho de Melo <[email protected]> Signed-off-by: Greg Kroah-Hartman <[email protected]>
1 parent 0ce32f8 commit eb0760d

File tree

1 file changed

+5
-3
lines changed

1 file changed

+5
-3
lines changed

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

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1438,7 +1438,8 @@ static int intel_pt_walk_psbend(struct intel_pt_decoder *decoder)
14381438

14391439
case INTEL_PT_FUP:
14401440
decoder->pge = true;
1441-
intel_pt_set_last_ip(decoder);
1441+
if (decoder->packet.count)
1442+
intel_pt_set_last_ip(decoder);
14421443
break;
14431444

14441445
case INTEL_PT_MODE_TSX:
@@ -1724,8 +1725,9 @@ static int intel_pt_walk_trace(struct intel_pt_decoder *decoder)
17241725

17251726
static inline bool intel_pt_have_ip(struct intel_pt_decoder *decoder)
17261727
{
1727-
return decoder->have_last_ip || decoder->packet.count == 0 ||
1728-
decoder->packet.count == 3 || decoder->packet.count == 6;
1728+
return decoder->packet.count &&
1729+
(decoder->have_last_ip || decoder->packet.count == 3 ||
1730+
decoder->packet.count == 6);
17291731
}
17301732

17311733
/* Walk PSB+ packets to get in sync. */

0 commit comments

Comments
 (0)