aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--tools/perf/util/intel-pt-decoder/intel-pt-decoder.c23
1 files changed, 17 insertions, 6 deletions
diff --git a/tools/perf/util/intel-pt-decoder/intel-pt-decoder.c b/tools/perf/util/intel-pt-decoder/intel-pt-decoder.c
index a2384a314990..99773445872d 100644
--- a/tools/perf/util/intel-pt-decoder/intel-pt-decoder.c
+++ b/tools/perf/util/intel-pt-decoder/intel-pt-decoder.c
@@ -2128,18 +2128,29 @@ static int intel_pt_walk_to_ip(struct intel_pt_decoder *decoder)
2128 switch (decoder->packet.type) { 2128 switch (decoder->packet.type) {
2129 case INTEL_PT_TIP_PGD: 2129 case INTEL_PT_TIP_PGD:
2130 decoder->continuous_period = false; 2130 decoder->continuous_period = false;
2131 __fallthrough; 2131 decoder->pge = false;
2132 if (intel_pt_have_ip(decoder))
2133 intel_pt_set_ip(decoder);
2134 if (!decoder->ip)
2135 break;
2136 decoder->state.type |= INTEL_PT_TRACE_END;
2137 return 0;
2138
2132 case INTEL_PT_TIP_PGE: 2139 case INTEL_PT_TIP_PGE:
2140 decoder->pge = true;
2141 if (intel_pt_have_ip(decoder))
2142 intel_pt_set_ip(decoder);
2143 if (!decoder->ip)
2144 break;
2145 decoder->state.type |= INTEL_PT_TRACE_BEGIN;
2146 return 0;
2147
2133 case INTEL_PT_TIP: 2148 case INTEL_PT_TIP:
2134 decoder->pge = decoder->packet.type != INTEL_PT_TIP_PGD; 2149 decoder->pge = true;
2135 if (intel_pt_have_ip(decoder)) 2150 if (intel_pt_have_ip(decoder))
2136 intel_pt_set_ip(decoder); 2151 intel_pt_set_ip(decoder);
2137 if (!decoder->ip) 2152 if (!decoder->ip)
2138 break; 2153 break;
2139 if (decoder->packet.type == INTEL_PT_TIP_PGE)
2140 decoder->state.type |= INTEL_PT_TRACE_BEGIN;
2141 if (decoder->packet.type == INTEL_PT_TIP_PGD)
2142 decoder->state.type |= INTEL_PT_TRACE_END;
2143 return 0; 2154 return 0;
2144 2155
2145 case INTEL_PT_FUP: 2156 case INTEL_PT_FUP: