From: Adrian Hunter <adrian.hunter@intel.com>
To: Arnaldo Carvalho de Melo <acme@kernel.org>,
Andi Kleen <ak@linux.intel.com>
Cc: linux-kernel@vger.kernel.org
Subject: [PATCH 06/37] perf intel-pt: Fix last_ip usage
Date: Fri, 19 May 2017 11:54:05 +0300 [thread overview]
Message-ID: <1495184076-23805-7-git-send-email-adrian.hunter@intel.com> (raw)
In-Reply-To: <1495184076-23805-1-git-send-email-adrian.hunter@intel.com>
Intel PT uses IP compression based on the last IP. For decoding purposes,
'last IP' is considered to be reset to zero whenever there is a
synchronization packet (PSB). The decoder wasn't doing that, and was
treating the zero value to mean that there was no last IP, whereas
compression can be done against the zero value. Fix by setting last_ip to
zero when a PSB is received and keep track of have_last_ip.
Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
---
tools/perf/util/intel-pt-decoder/intel-pt-decoder.c | 13 +++++++++++--
1 file changed, 11 insertions(+), 2 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 0f7def56149a..f8fada859f12 100644
--- a/tools/perf/util/intel-pt-decoder/intel-pt-decoder.c
+++ b/tools/perf/util/intel-pt-decoder/intel-pt-decoder.c
@@ -93,6 +93,7 @@ struct intel_pt_decoder {
bool have_tma;
bool have_cyc;
bool fixup_last_mtc;
+ bool have_last_ip;
uint64_t pos;
uint64_t last_ip;
uint64_t ip;
@@ -400,6 +401,7 @@ static uint64_t intel_pt_calc_ip(const struct intel_pt_pkt *packet,
static inline void intel_pt_set_last_ip(struct intel_pt_decoder *decoder)
{
decoder->last_ip = intel_pt_calc_ip(&decoder->packet, decoder->last_ip);
+ decoder->have_last_ip = true;
}
static inline void intel_pt_set_ip(struct intel_pt_decoder *decoder)
@@ -1656,6 +1658,8 @@ static int intel_pt_walk_trace(struct intel_pt_decoder *decoder)
break;
case INTEL_PT_PSB:
+ decoder->last_ip = 0;
+ decoder->have_last_ip = true;
intel_pt_clear_stack(&decoder->stack);
err = intel_pt_walk_psbend(decoder);
if (err == -EAGAIN)
@@ -1736,7 +1740,7 @@ static int intel_pt_walk_trace(struct intel_pt_decoder *decoder)
static inline bool intel_pt_have_ip(struct intel_pt_decoder *decoder)
{
- return decoder->last_ip || decoder->packet.count == 0 ||
+ return decoder->have_last_ip || decoder->packet.count == 0 ||
decoder->packet.count == 3 || decoder->packet.count == 6;
}
@@ -1866,7 +1870,7 @@ static int intel_pt_walk_to_ip(struct intel_pt_decoder *decoder)
if (decoder->ip)
return 0;
}
- if (decoder->packet.count)
+ if (decoder->packet.count && decoder->have_last_ip)
intel_pt_set_last_ip(decoder);
break;
@@ -1916,6 +1920,8 @@ static int intel_pt_walk_to_ip(struct intel_pt_decoder *decoder)
break;
case INTEL_PT_PSB:
+ decoder->last_ip = 0;
+ decoder->have_last_ip = true;
intel_pt_clear_stack(&decoder->stack);
err = intel_pt_walk_psb(decoder);
if (err)
@@ -2057,6 +2063,7 @@ static int intel_pt_sync(struct intel_pt_decoder *decoder)
decoder->pge = false;
decoder->continuous_period = false;
+ decoder->have_last_ip = false;
decoder->last_ip = 0;
decoder->ip = 0;
intel_pt_clear_stack(&decoder->stack);
@@ -2065,6 +2072,7 @@ static int intel_pt_sync(struct intel_pt_decoder *decoder)
if (err)
return err;
+ decoder->have_last_ip = true;
decoder->pkt_state = INTEL_PT_STATE_NO_IP;
err = intel_pt_walk_psb(decoder);
@@ -2107,6 +2115,7 @@ const struct intel_pt_state *intel_pt_decode(struct intel_pt_decoder *decoder)
err = intel_pt_sync(decoder);
break;
case INTEL_PT_STATE_NO_IP:
+ decoder->have_last_ip = false;
decoder->last_ip = 0;
decoder->ip = 0;
/* Fall through */
--
1.9.1
next prev parent reply other threads:[~2017-05-19 9:09 UTC|newest]
Thread overview: 40+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-05-19 8:53 [PATCH 00/37] perf intel-pt: Power events and PTWRITE Adrian Hunter
2017-05-19 8:54 ` [PATCH 01/37] perf intel-pt: Allow decoding with branch tracing disabled Adrian Hunter
2017-05-19 8:54 ` [PATCH 02/37] perf intel-pt: Add default config for pass-through branch enable Adrian Hunter
2017-05-19 8:54 ` [PATCH 03/37] perf intel-pt: Add documentation for new config terms Adrian Hunter
2017-05-19 8:54 ` [PATCH 04/37] perf intel-pt: Fix missing stack clear Adrian Hunter
2017-05-19 8:54 ` [PATCH 05/37] perf intel-pt: Ensure IP is zero when state is INTEL_PT_STATE_NO_IP Adrian Hunter
2017-05-19 8:54 ` Adrian Hunter [this message]
2017-05-19 8:54 ` [PATCH 07/37] perf intel-pt: Ensure never to set 'last_ip' when packet 'count' is zero Adrian Hunter
2017-05-19 8:54 ` [PATCH 08/37] perf intel-pt: Use FUP always when scanning for an IP Adrian Hunter
2017-05-19 8:54 ` [PATCH 09/37] perf intel-pt: Add missing __fallthrough Adrian Hunter
2017-05-19 8:54 ` [PATCH 10/37] perf intel-pt: Clear FUP flag on error Adrian Hunter
2017-05-19 8:54 ` [PATCH 11/37] perf intel-pt: Add decoder support for ptwrite and power event packets Adrian Hunter
2017-05-19 8:54 ` [PATCH 12/37] perf intel-pt: Add reserved byte to CBR packet payload Adrian Hunter
2017-05-19 8:54 ` [PATCH 13/37] perf intel-pt: Move decoder error setting into one condition Adrian Hunter
2017-05-19 8:54 ` [PATCH 14/37] perf intel-pt: Add decoder support for CBR events Adrian Hunter
2017-05-19 8:54 ` [PATCH 15/37] perf intel-pt: Remove redundant initial_skip checks Adrian Hunter
2017-05-19 8:54 ` [PATCH 16/37] perf intel-pt: Fix transactions_sample_type Adrian Hunter
2017-05-19 8:54 ` [PATCH 17/37] perf tools: Fix message because cpu list option is -C not -c Adrian Hunter
2017-05-19 8:54 ` [PATCH 18/37] perf script: Fix message because field list option is -F not -f Adrian Hunter
2017-05-19 8:54 ` [PATCH 19/37] perf script: Add 'synth' event type for synthesized events Adrian Hunter
2017-05-19 8:54 ` [PATCH 20/37] perf script: Add 'synth' field for synthesized event payloads Adrian Hunter
2017-05-19 8:54 ` [PATCH 21/37] tools include: Add byte-swapping macros to kernel.h Adrian Hunter
2017-05-19 8:54 ` [PATCH 22/37] perf auxtrace: Add itrace option to output ptwrite events Adrian Hunter
2017-05-19 8:54 ` [PATCH 23/37] perf auxtrace: Add itrace option to output power events Adrian Hunter
2017-05-19 8:54 ` [PATCH 24/37] perf script: Add synthesized Intel PT power and ptwrite events Adrian Hunter
2017-05-19 8:54 ` [PATCH 25/37] perf intel-pt: Factor out common code synthesizing event samples Adrian Hunter
2017-05-19 8:54 ` [PATCH 26/37] perf intel-pt: Remove unused instructions_sample_period Adrian Hunter
2017-05-19 8:54 ` [PATCH 27/37] perf intel-pt: Join needlessly wrapped lines Adrian Hunter
2017-05-19 8:54 ` [PATCH 28/37] perf intel-pt: Tidy Intel PT evsel lookup into separate function Adrian Hunter
2017-05-19 8:54 ` [PATCH 29/37] perf intel-pt: Tidy messages into called function intel_pt_synth_event() Adrian Hunter
2017-05-19 8:54 ` [PATCH 30/37] perf intel-pt: Factor out intel_pt_set_event_name() Adrian Hunter
2017-05-19 8:54 ` [PATCH 31/37] perf intel-pt: Move code in intel_pt_synth_events() to simplify attr setting Adrian Hunter
2017-05-19 8:54 ` [PATCH 32/37] perf intel-pt: Synthesize new power and ptwrite events Adrian Hunter
2017-05-19 8:54 ` [PATCH 33/37] perf intel-pt: Add example script for power events and PTWRITE Adrian Hunter
2017-05-19 8:54 ` [PATCH 34/37] perf intel-pt: Update documentation to include new ptwrite and power events Adrian Hunter
2017-05-19 8:54 ` [PATCH 35/37] perf intel-pt: Do not use TSC packets for calculating CPU cycles to TSC Adrian Hunter
2017-05-19 8:54 ` [PATCH 36/37] perf auxtrace: Add CPU filter support Adrian Hunter
2017-05-19 8:54 ` [PATCH 37/37] perf intel-pt: Improve sample timestamp Adrian Hunter
2017-05-19 14:34 ` Andi Kleen
2017-05-26 8:26 ` Adrian Hunter
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1495184076-23805-7-git-send-email-adrian.hunter@intel.com \
--to=adrian.hunter@intel.com \
--cc=acme@kernel.org \
--cc=ak@linux.intel.com \
--cc=linux-kernel@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox