diff options
| author | Adrian Hunter <adrian.hunter@intel.com> | 2019-06-22 05:32:42 -0400 |
|---|---|---|
| committer | Arnaldo Carvalho de Melo <acme@redhat.com> | 2019-06-25 07:47:10 -0400 |
| commit | abe5a1d3e4bee361bd3b21b8909c8421e46911d1 (patch) | |
| tree | 245b3d129c9cb396d78b11a49372be5528951a26 /tools/perf | |
| parent | 9f94c7f947e919c343b30f080285af53d0fa9902 (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.c | 16 |
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 | } |
