aboutsummaryrefslogtreecommitdiffstats
path: root/tools/perf
diff options
context:
space:
mode:
authorAdrian Hunter <adrian.hunter@intel.com>2019-06-22 05:32:42 -0400
committerArnaldo Carvalho de Melo <acme@redhat.com>2019-06-25 07:47:10 -0400
commitabe5a1d3e4bee361bd3b21b8909c8421e46911d1 (patch)
tree245b3d129c9cb396d78b11a49372be5528951a26 /tools/perf
parent9f94c7f947e919c343b30f080285af53d0fa9902 (diff)
perf intel-pt: Decoder to output CBR changes immediately
The core-to-bus ratio (CBR) provides the CPU frequency. With branches enabled, the decoder was outputting CBR changes only when there was a branch. That loses the correct time of the change if the trace is not in context (e.g. not tracing kernel space). Change to output the CBR change immediately. Signed-off-by: Adrian Hunter <adrian.hunter@intel.com> Cc: Jiri Olsa <jolsa@redhat.com> Link: http://lkml.kernel.org/r/20190622093248.581-2-adrian.hunter@intel.com Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Diffstat (limited to 'tools/perf')
-rw-r--r--tools/perf/util/intel-pt-decoder/intel-pt-decoder.c16
1 files changed, 6 insertions, 10 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 f8b71bf2bb4c..3d2255f284f4 100644
--- a/tools/perf/util/intel-pt-decoder/intel-pt-decoder.c
+++ b/tools/perf/util/intel-pt-decoder/intel-pt-decoder.c
@@ -2015,16 +2015,8 @@ next:
2015 2015
2016 case INTEL_PT_CBR: 2016 case INTEL_PT_CBR:
2017 intel_pt_calc_cbr(decoder); 2017 intel_pt_calc_cbr(decoder);
2018 if (!decoder->branch_enable && 2018 if (decoder->cbr != decoder->cbr_seen)
2019 decoder->cbr != decoder->cbr_seen) {
2020 decoder->cbr_seen = decoder->cbr;
2021 decoder->state.type = INTEL_PT_CBR_CHG;
2022 decoder->state.from_ip = decoder->ip;
2023 decoder->state.to_ip = 0;
2024 decoder->state.cbr_payload =
2025 decoder->packet.payload;
2026 return 0; 2019 return 0;
2027 }
2028 break; 2020 break;
2029 2021
2030 case INTEL_PT_MODE_EXEC: 2022 case INTEL_PT_MODE_EXEC:
@@ -2626,8 +2618,12 @@ const struct intel_pt_state *intel_pt_decode(struct intel_pt_decoder *decoder)
2626 decoder->sample_tot_cyc_cnt = decoder->tot_cyc_cnt; 2618 decoder->sample_tot_cyc_cnt = decoder->tot_cyc_cnt;
2627 } else { 2619 } else {
2628 decoder->state.err = 0; 2620 decoder->state.err = 0;
2629 if (decoder->cbr != decoder->cbr_seen && decoder->state.type) { 2621 if (decoder->cbr != decoder->cbr_seen) {
2630 decoder->cbr_seen = decoder->cbr; 2622 decoder->cbr_seen = decoder->cbr;
2623 if (!decoder->state.type) {
2624 decoder->state.from_ip = decoder->ip;
2625 decoder->state.to_ip = 0;
2626 }
2631 decoder->state.type |= INTEL_PT_CBR_CHG; 2627 decoder->state.type |= INTEL_PT_CBR_CHG;
2632 decoder->state.cbr_payload = decoder->cbr_payload; 2628 decoder->state.cbr_payload = decoder->cbr_payload;
2633 } 2629 }