stable.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 5.10 0/8] perf intel_pt: Fixes for v5.10
@ 2021-12-13 15:45 Adrian Hunter
  2021-12-13 15:45 ` [PATCH 5.10 1/8] perf inject: Fix itrace space allowed for new attributes Adrian Hunter
                   ` (8 more replies)
  0 siblings, 9 replies; 10+ messages in thread
From: Adrian Hunter @ 2021-12-13 15:45 UTC (permalink / raw)
  To: stable

Here are some fixes backported to v5.10.

Adrian Hunter (8):
      perf inject: Fix itrace space allowed for new attributes
      perf intel-pt: Fix some PGE (packet generation enable/control flow packets) usage
      perf intel-pt: Fix sync state when a PSB (synchronization) packet is found
      perf intel-pt: Fix intel_pt_fup_event() assumptions about setting state type
      perf intel-pt: Fix state setting when receiving overflow (OVF) packet
      perf intel-pt: Fix next 'err' value, walking trace
      perf intel-pt: Fix missing 'instruction' events with 'q' option
      perf intel-pt: Fix error timestamp setting on the decoder error path

 tools/perf/builtin-inject.c                        |  2 +-
 .../perf/util/intel-pt-decoder/intel-pt-decoder.c  | 83 ++++++++++++++--------
 tools/perf/util/intel-pt.c                         |  1 +
 3 files changed, 56 insertions(+), 30 deletions(-)

^ permalink raw reply	[flat|nested] 10+ messages in thread

* [PATCH 5.10 1/8] perf inject: Fix itrace space allowed for new attributes
  2021-12-13 15:45 [PATCH 5.10 0/8] perf intel_pt: Fixes for v5.10 Adrian Hunter
@ 2021-12-13 15:45 ` Adrian Hunter
  2021-12-13 15:45 ` [PATCH 5.10 2/8] perf intel-pt: Fix some PGE (packet generation enable/control flow packets) usage Adrian Hunter
                   ` (7 subsequent siblings)
  8 siblings, 0 replies; 10+ messages in thread
From: Adrian Hunter @ 2021-12-13 15:45 UTC (permalink / raw)
  To: stable

commit c29d9792607e67ed8a3f6e9db0d96836d885a8c5 upstream.

The space allowed for new attributes can be too small if existing header
information is large. That can happen, for example, if there are very
many CPUs, due to having an event ID per CPU per event being stored in the
header information.

Fix by adding the existing header.data_offset. Also increase the extra
space allowed to 8KiB and align to a 4KiB boundary for neatness.

Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Link: http://lore.kernel.org/lkml/20211125071457.2066863-1-adrian.hunter@intel.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
[Adrian: Backport to v5.10]
Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
---
 tools/perf/builtin-inject.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/tools/perf/builtin-inject.c b/tools/perf/builtin-inject.c
index 5378a14e3836..8f1a99e2fcd7 100644
--- a/tools/perf/builtin-inject.c
+++ b/tools/perf/builtin-inject.c
@@ -752,7 +752,7 @@ static int __cmd_inject(struct perf_inject *inject)
 		inject->tool.ordered_events = true;
 		inject->tool.ordering_requires_timestamps = true;
 		/* Allow space in the header for new attributes */
-		output_data_offset = 4096;
+		output_data_offset = roundup(8192 + session->header.data_offset, 4096);
 		if (inject->strip)
 			strip_init(inject);
 	}
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCH 5.10 2/8] perf intel-pt: Fix some PGE (packet generation enable/control flow packets) usage
  2021-12-13 15:45 [PATCH 5.10 0/8] perf intel_pt: Fixes for v5.10 Adrian Hunter
  2021-12-13 15:45 ` [PATCH 5.10 1/8] perf inject: Fix itrace space allowed for new attributes Adrian Hunter
@ 2021-12-13 15:45 ` Adrian Hunter
  2021-12-13 15:45 ` [PATCH 5.10 3/8] perf intel-pt: Fix sync state when a PSB (synchronization) packet is found Adrian Hunter
                   ` (6 subsequent siblings)
  8 siblings, 0 replies; 10+ messages in thread
From: Adrian Hunter @ 2021-12-13 15:45 UTC (permalink / raw)
  To: stable

commit 057ae59f5a1d924511beb1b09f395bdb316cfd03 upstream.

Packet generation enable (PGE) refers to whether control flow (COFI)
packets are being produced.

PGE may be false even when branch-tracing is enabled, due to being
out-of-context, or outside a filter address range.  Fix some missing PGE
usage.

Fixes: 7c1b16ba0e26e6 ("perf intel-pt: Add support for decoding FUP/TIP only")
Fixes: 839598176b0554 ("perf intel-pt: Allow decoding with branch tracing disabled")
Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: stable@vger.kernel.org # v5.15+
Link: https://lore.kernel.org/r/20211210162303.2288710-2-adrian.hunter@intel.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
[Adrian: Backport to v5.10]
Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
---
 tools/perf/util/intel-pt-decoder/intel-pt-decoder.c | 5 +++--
 1 file changed, 3 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 e6029d4c096f..a49122002768 100644
--- a/tools/perf/util/intel-pt-decoder/intel-pt-decoder.c
+++ b/tools/perf/util/intel-pt-decoder/intel-pt-decoder.c
@@ -1949,6 +1949,7 @@ static int intel_pt_hop_trace(struct intel_pt_decoder *decoder, bool *no_tip, in
 		return HOP_IGNORE;
 
 	case INTEL_PT_TIP_PGD:
+		decoder->pge = false;
 		if (!decoder->packet.count)
 			return HOP_IGNORE;
 		intel_pt_set_ip(decoder);
@@ -1972,7 +1973,7 @@ static int intel_pt_hop_trace(struct intel_pt_decoder *decoder, bool *no_tip, in
 		intel_pt_set_ip(decoder);
 		if (intel_pt_fup_event(decoder))
 			return HOP_RETURN;
-		if (!decoder->branch_enable)
+		if (!decoder->branch_enable || !decoder->pge)
 			*no_tip = true;
 		if (*no_tip) {
 			decoder->state.type = INTEL_PT_INSTRUCTION;
@@ -2124,7 +2125,7 @@ static int intel_pt_walk_trace(struct intel_pt_decoder *decoder)
 				break;
 			}
 			intel_pt_set_last_ip(decoder);
-			if (!decoder->branch_enable) {
+			if (!decoder->branch_enable || !decoder->pge) {
 				decoder->ip = decoder->last_ip;
 				if (intel_pt_fup_event(decoder))
 					return 0;
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCH 5.10 3/8] perf intel-pt: Fix sync state when a PSB (synchronization) packet is found
  2021-12-13 15:45 [PATCH 5.10 0/8] perf intel_pt: Fixes for v5.10 Adrian Hunter
  2021-12-13 15:45 ` [PATCH 5.10 1/8] perf inject: Fix itrace space allowed for new attributes Adrian Hunter
  2021-12-13 15:45 ` [PATCH 5.10 2/8] perf intel-pt: Fix some PGE (packet generation enable/control flow packets) usage Adrian Hunter
@ 2021-12-13 15:45 ` Adrian Hunter
  2021-12-13 15:45 ` [PATCH 5.10 4/8] perf intel-pt: Fix intel_pt_fup_event() assumptions about setting state type Adrian Hunter
                   ` (5 subsequent siblings)
  8 siblings, 0 replies; 10+ messages in thread
From: Adrian Hunter @ 2021-12-13 15:45 UTC (permalink / raw)
  To: stable

commit ad106a26aef3a95ac7ca88d033b431661ba346ce upstream.

When syncing, it may be that branch packet generation is not enabled at
that point, in which case there will not immediately be a control-flow
packet, so some packets before a control flow packet turns up, get
ignored.  However, the decoder is in sync as soon as a PSB is found, so
the state should be set accordingly.

Fixes: f4aa081949e7b6 ("perf tools: Add Intel PT decoder")
Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: stable@vger.kernel.org # v5.15+
Link: https://lore.kernel.org/r/20211210162303.2288710-3-adrian.hunter@intel.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
[Adrian: Backport to v5.10]
Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
---
 tools/perf/util/intel-pt-decoder/intel-pt-decoder.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

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 a49122002768..83e54333f03c 100644
--- a/tools/perf/util/intel-pt-decoder/intel-pt-decoder.c
+++ b/tools/perf/util/intel-pt-decoder/intel-pt-decoder.c
@@ -2733,7 +2733,7 @@ static int intel_pt_sync(struct intel_pt_decoder *decoder)
 		return err;
 
 	decoder->have_last_ip = true;
-	decoder->pkt_state = INTEL_PT_STATE_NO_IP;
+	decoder->pkt_state = INTEL_PT_STATE_IN_SYNC;
 
 	err = intel_pt_walk_psb(decoder);
 	if (err)
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCH 5.10 4/8] perf intel-pt: Fix intel_pt_fup_event() assumptions about setting state type
  2021-12-13 15:45 [PATCH 5.10 0/8] perf intel_pt: Fixes for v5.10 Adrian Hunter
                   ` (2 preceding siblings ...)
  2021-12-13 15:45 ` [PATCH 5.10 3/8] perf intel-pt: Fix sync state when a PSB (synchronization) packet is found Adrian Hunter
@ 2021-12-13 15:45 ` Adrian Hunter
  2021-12-13 15:45 ` [PATCH 5.10 5/8] perf intel-pt: Fix state setting when receiving overflow (OVF) packet Adrian Hunter
                   ` (4 subsequent siblings)
  8 siblings, 0 replies; 10+ messages in thread
From: Adrian Hunter @ 2021-12-13 15:45 UTC (permalink / raw)
  To: stable

commit 4c761d805bb2d2ead1b9baaba75496152b394c80 upstream.

intel_pt_fup_event() assumes it can overwrite the state type if there has
been an FUP event, but this is an unnecessary and unexpected constraint on
callers.

Fix by touching only the state type flags that are affected by an FUP
event.

Fixes: a472e65fc490a ("perf intel-pt: Add decoder support for ptwrite and power event packets")
Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: stable@vger.kernel.org # v5.15+
Link: https://lore.kernel.org/r/20211210162303.2288710-4-adrian.hunter@intel.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
[Adrian: Backport to v5.10]
Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
---
 .../util/intel-pt-decoder/intel-pt-decoder.c  | 32 ++++++++-----------
 1 file changed, 13 insertions(+), 19 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 83e54333f03c..dac06c5f5c30 100644
--- a/tools/perf/util/intel-pt-decoder/intel-pt-decoder.c
+++ b/tools/perf/util/intel-pt-decoder/intel-pt-decoder.c
@@ -1114,61 +1114,55 @@ static int intel_pt_walk_insn(struct intel_pt_decoder *decoder,
 
 static bool intel_pt_fup_event(struct intel_pt_decoder *decoder)
 {
+	enum intel_pt_sample_type type = decoder->state.type;
 	bool ret = false;
 
+	decoder->state.type &= ~INTEL_PT_BRANCH;
+
 	if (decoder->set_fup_tx_flags) {
 		decoder->set_fup_tx_flags = false;
 		decoder->tx_flags = decoder->fup_tx_flags;
-		decoder->state.type = INTEL_PT_TRANSACTION;
+		decoder->state.type |= INTEL_PT_TRANSACTION;
 		if (decoder->fup_tx_flags & INTEL_PT_ABORT_TX)
 			decoder->state.type |= INTEL_PT_BRANCH;
-		decoder->state.from_ip = decoder->ip;
-		decoder->state.to_ip = 0;
 		decoder->state.flags = decoder->fup_tx_flags;
-		return true;
+		ret = true;
 	}
 	if (decoder->set_fup_ptw) {
 		decoder->set_fup_ptw = false;
-		decoder->state.type = INTEL_PT_PTW;
+		decoder->state.type |= INTEL_PT_PTW;
 		decoder->state.flags |= INTEL_PT_FUP_IP;
-		decoder->state.from_ip = decoder->ip;
-		decoder->state.to_ip = 0;
 		decoder->state.ptw_payload = decoder->fup_ptw_payload;
-		return true;
+		ret = true;
 	}
 	if (decoder->set_fup_mwait) {
 		decoder->set_fup_mwait = false;
-		decoder->state.type = INTEL_PT_MWAIT_OP;
-		decoder->state.from_ip = decoder->ip;
-		decoder->state.to_ip = 0;
+		decoder->state.type |= INTEL_PT_MWAIT_OP;
 		decoder->state.mwait_payload = decoder->fup_mwait_payload;
 		ret = true;
 	}
 	if (decoder->set_fup_pwre) {
 		decoder->set_fup_pwre = false;
 		decoder->state.type |= INTEL_PT_PWR_ENTRY;
-		decoder->state.type &= ~INTEL_PT_BRANCH;
-		decoder->state.from_ip = decoder->ip;
-		decoder->state.to_ip = 0;
 		decoder->state.pwre_payload = decoder->fup_pwre_payload;
 		ret = true;
 	}
 	if (decoder->set_fup_exstop) {
 		decoder->set_fup_exstop = false;
 		decoder->state.type |= INTEL_PT_EX_STOP;
-		decoder->state.type &= ~INTEL_PT_BRANCH;
 		decoder->state.flags |= INTEL_PT_FUP_IP;
-		decoder->state.from_ip = decoder->ip;
-		decoder->state.to_ip = 0;
 		ret = true;
 	}
 	if (decoder->set_fup_bep) {
 		decoder->set_fup_bep = false;
 		decoder->state.type |= INTEL_PT_BLK_ITEMS;
-		decoder->state.type &= ~INTEL_PT_BRANCH;
+		ret = true;
+	}
+	if (ret) {
 		decoder->state.from_ip = decoder->ip;
 		decoder->state.to_ip = 0;
-		ret = true;
+	} else {
+		decoder->state.type = type;
 	}
 	return ret;
 }
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCH 5.10 5/8] perf intel-pt: Fix state setting when receiving overflow (OVF) packet
  2021-12-13 15:45 [PATCH 5.10 0/8] perf intel_pt: Fixes for v5.10 Adrian Hunter
                   ` (3 preceding siblings ...)
  2021-12-13 15:45 ` [PATCH 5.10 4/8] perf intel-pt: Fix intel_pt_fup_event() assumptions about setting state type Adrian Hunter
@ 2021-12-13 15:45 ` Adrian Hunter
  2021-12-13 15:45 ` [PATCH 5.10 6/8] perf intel-pt: Fix next 'err' value, walking trace Adrian Hunter
                   ` (3 subsequent siblings)
  8 siblings, 0 replies; 10+ messages in thread
From: Adrian Hunter @ 2021-12-13 15:45 UTC (permalink / raw)
  To: stable

commit c79ee2b2160909889df67c8801352d3e69d43a1a upstream.

An overflow (OVF packet) is treated as an error because it represents a
loss of trace data, but there is no loss of synchronization, so the packet
state should be INTEL_PT_STATE_IN_SYNC not INTEL_PT_STATE_ERR_RESYNC.

To support that, some additional variables must be reset, and the FUP
packet that may follow OVF is treated as an FUP event.

Fixes: f4aa081949e7b6 ("perf tools: Add Intel PT decoder")
Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: stable@vger.kernel.org # v5.15+
Link: https://lore.kernel.org/r/20211210162303.2288710-5-adrian.hunter@intel.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
[Adrian: Backport to v5.10]
Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
---
 .../util/intel-pt-decoder/intel-pt-decoder.c  | 32 ++++++++++++++++---
 1 file changed, 28 insertions(+), 4 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 dac06c5f5c30..27a3c3eb48da 100644
--- a/tools/perf/util/intel-pt-decoder/intel-pt-decoder.c
+++ b/tools/perf/util/intel-pt-decoder/intel-pt-decoder.c
@@ -1158,6 +1158,20 @@ static bool intel_pt_fup_event(struct intel_pt_decoder *decoder)
 		decoder->state.type |= INTEL_PT_BLK_ITEMS;
 		ret = true;
 	}
+	if (decoder->overflow) {
+		decoder->overflow = false;
+		if (!ret && !decoder->pge) {
+			if (decoder->hop) {
+				decoder->state.type = 0;
+				decoder->pkt_state = INTEL_PT_STATE_RESAMPLE;
+			}
+			decoder->pge = true;
+			decoder->state.type |= INTEL_PT_BRANCH | INTEL_PT_TRACE_BEGIN;
+			decoder->state.from_ip = 0;
+			decoder->state.to_ip = decoder->ip;
+			return true;
+		}
+	}
 	if (ret) {
 		decoder->state.from_ip = decoder->ip;
 		decoder->state.to_ip = 0;
@@ -1480,7 +1494,16 @@ static int intel_pt_overflow(struct intel_pt_decoder *decoder)
 	intel_pt_log("ERROR: Buffer overflow\n");
 	intel_pt_clear_tx_flags(decoder);
 	decoder->timestamp_insn_cnt = 0;
-	decoder->pkt_state = INTEL_PT_STATE_ERR_RESYNC;
+	decoder->pkt_state = INTEL_PT_STATE_IN_SYNC;
+	decoder->state.from_ip = decoder->ip;
+	decoder->ip = 0;
+	decoder->pge = false;
+	decoder->set_fup_tx_flags = false;
+	decoder->set_fup_ptw = false;
+	decoder->set_fup_mwait = false;
+	decoder->set_fup_pwre = false;
+	decoder->set_fup_exstop = false;
+	decoder->set_fup_bep = false;
 	decoder->overflow = true;
 	return -EOVERFLOW;
 }
@@ -2083,6 +2106,7 @@ static int intel_pt_walk_trace(struct intel_pt_decoder *decoder)
 
 		case INTEL_PT_TIP_PGE: {
 			decoder->pge = true;
+			decoder->overflow = false;
 			intel_pt_mtc_cyc_cnt_pge(decoder);
 			if (decoder->packet.count == 0) {
 				intel_pt_log_at("Skipping zero TIP.PGE",
@@ -2596,10 +2620,10 @@ static int intel_pt_sync_ip(struct intel_pt_decoder *decoder)
 	decoder->set_fup_pwre = false;
 	decoder->set_fup_exstop = false;
 	decoder->set_fup_bep = false;
+	decoder->overflow = false;
 
 	if (!decoder->branch_enable) {
 		decoder->pkt_state = INTEL_PT_STATE_IN_SYNC;
-		decoder->overflow = false;
 		decoder->state.type = 0; /* Do not have a sample */
 		return 0;
 	}
@@ -2614,7 +2638,6 @@ static int intel_pt_sync_ip(struct intel_pt_decoder *decoder)
 		decoder->pkt_state = INTEL_PT_STATE_RESAMPLE;
 	else
 		decoder->pkt_state = INTEL_PT_STATE_IN_SYNC;
-	decoder->overflow = false;
 
 	decoder->state.from_ip = 0;
 	decoder->state.to_ip = decoder->ip;
@@ -2823,7 +2846,8 @@ const struct intel_pt_state *intel_pt_decode(struct intel_pt_decoder *decoder)
 
 	if (err) {
 		decoder->state.err = intel_pt_ext_err(err);
-		decoder->state.from_ip = decoder->ip;
+		if (err != -EOVERFLOW)
+			decoder->state.from_ip = decoder->ip;
 		intel_pt_update_sample_time(decoder);
 		decoder->sample_tot_cyc_cnt = decoder->tot_cyc_cnt;
 	} else {
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCH 5.10 6/8] perf intel-pt: Fix next 'err' value, walking trace
  2021-12-13 15:45 [PATCH 5.10 0/8] perf intel_pt: Fixes for v5.10 Adrian Hunter
                   ` (4 preceding siblings ...)
  2021-12-13 15:45 ` [PATCH 5.10 5/8] perf intel-pt: Fix state setting when receiving overflow (OVF) packet Adrian Hunter
@ 2021-12-13 15:45 ` Adrian Hunter
  2021-12-13 15:45 ` [PATCH 5.10 7/8] perf intel-pt: Fix missing 'instruction' events with 'q' option Adrian Hunter
                   ` (2 subsequent siblings)
  8 siblings, 0 replies; 10+ messages in thread
From: Adrian Hunter @ 2021-12-13 15:45 UTC (permalink / raw)
  To: stable

commit a32e6c5da599dbf49e60622a4dfb5b9b40ece029 upstream.

Code after label 'next:' in intel_pt_walk_trace() assumes 'err' is zero,
but it may not be, if arrived at via a 'goto'. Ensure it is zero.

Fixes: 7c1b16ba0e26e6 ("perf intel-pt: Add support for decoding FUP/TIP only")
Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: stable@vger.kernel.org # v5.15+
Link: https://lore.kernel.org/r/20211210162303.2288710-6-adrian.hunter@intel.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
[Adrian: Backport to v5.10]
Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
---
 tools/perf/util/intel-pt-decoder/intel-pt-decoder.c | 1 +
 1 file changed, 1 insertion(+)

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 27a3c3eb48da..aaae2ef36f5d 100644
--- a/tools/perf/util/intel-pt-decoder/intel-pt-decoder.c
+++ b/tools/perf/util/intel-pt-decoder/intel-pt-decoder.c
@@ -2068,6 +2068,7 @@ static int intel_pt_walk_trace(struct intel_pt_decoder *decoder)
 		if (err)
 			return err;
 next:
+		err = 0;
 		if (decoder->cyc_threshold) {
 			if (decoder->sample_cyc && last_packet_type != INTEL_PT_CYC)
 				decoder->sample_cyc = false;
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCH 5.10 7/8] perf intel-pt: Fix missing 'instruction' events with 'q' option
  2021-12-13 15:45 [PATCH 5.10 0/8] perf intel_pt: Fixes for v5.10 Adrian Hunter
                   ` (5 preceding siblings ...)
  2021-12-13 15:45 ` [PATCH 5.10 6/8] perf intel-pt: Fix next 'err' value, walking trace Adrian Hunter
@ 2021-12-13 15:45 ` Adrian Hunter
  2021-12-13 15:45 ` [PATCH 5.10 8/8] perf intel-pt: Fix error timestamp setting on the decoder error path Adrian Hunter
  2021-12-15 14:00 ` [PATCH 5.10 0/8] perf intel_pt: Fixes for v5.10 Greg KH
  8 siblings, 0 replies; 10+ messages in thread
From: Adrian Hunter @ 2021-12-13 15:45 UTC (permalink / raw)
  To: stable

commit a882cc94971093e146ffa1163b140ad956236754 upstream.

FUP packets contain IP information, which makes them also an 'instruction'
event in 'hop' mode i.e. the itrace 'q' option.  That wasn't happening, so
restructure the logic so that FUP events are added along with appropriate
'instruction' and 'branch' events.

Fixes: 7c1b16ba0e26e6 ("perf intel-pt: Add support for decoding FUP/TIP only")
Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: stable@vger.kernel.org # v5.15+
Link: https://lore.kernel.org/r/20211210162303.2288710-7-adrian.hunter@intel.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
[Adrian: Backport to v5.10]
Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
---
 tools/perf/util/intel-pt-decoder/intel-pt-decoder.c | 11 ++++++++---
 1 file changed, 8 insertions(+), 3 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 aaae2ef36f5d..e4c485f92c02 100644
--- a/tools/perf/util/intel-pt-decoder/intel-pt-decoder.c
+++ b/tools/perf/util/intel-pt-decoder/intel-pt-decoder.c
@@ -1954,6 +1954,8 @@ static int intel_pt_scan_for_psb(struct intel_pt_decoder *decoder);
 /* Hop mode: Ignore TNT, do not walk code, but get ip from FUPs and TIPs */
 static int intel_pt_hop_trace(struct intel_pt_decoder *decoder, bool *no_tip, int *err)
 {
+	*err = 0;
+
 	/* Leap from PSB to PSB, getting ip from FUP within PSB+ */
 	if (decoder->leap && !decoder->in_psb && decoder->packet.type != INTEL_PT_PSB) {
 		*err = intel_pt_scan_for_psb(decoder);
@@ -1988,18 +1990,21 @@ static int intel_pt_hop_trace(struct intel_pt_decoder *decoder, bool *no_tip, in
 		if (!decoder->packet.count)
 			return HOP_IGNORE;
 		intel_pt_set_ip(decoder);
-		if (intel_pt_fup_event(decoder))
-			return HOP_RETURN;
+		if (decoder->set_fup_mwait || decoder->set_fup_pwre)
+			*no_tip = true;
 		if (!decoder->branch_enable || !decoder->pge)
 			*no_tip = true;
 		if (*no_tip) {
 			decoder->state.type = INTEL_PT_INSTRUCTION;
 			decoder->state.from_ip = decoder->ip;
 			decoder->state.to_ip = 0;
+			intel_pt_fup_event(decoder);
 			return HOP_RETURN;
 		}
+		intel_pt_fup_event(decoder);
+		decoder->state.type |= INTEL_PT_INSTRUCTION | INTEL_PT_BRANCH;
 		*err = intel_pt_walk_fup_tip(decoder);
-		if (!*err)
+		if (!*err && decoder->state.to_ip)
 			decoder->pkt_state = INTEL_PT_STATE_RESAMPLE;
 		return HOP_RETURN;
 
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCH 5.10 8/8] perf intel-pt: Fix error timestamp setting on the decoder error path
  2021-12-13 15:45 [PATCH 5.10 0/8] perf intel_pt: Fixes for v5.10 Adrian Hunter
                   ` (6 preceding siblings ...)
  2021-12-13 15:45 ` [PATCH 5.10 7/8] perf intel-pt: Fix missing 'instruction' events with 'q' option Adrian Hunter
@ 2021-12-13 15:45 ` Adrian Hunter
  2021-12-15 14:00 ` [PATCH 5.10 0/8] perf intel_pt: Fixes for v5.10 Greg KH
  8 siblings, 0 replies; 10+ messages in thread
From: Adrian Hunter @ 2021-12-13 15:45 UTC (permalink / raw)
  To: stable

commit 6665b8e4836caa8023cbc7e53733acd234969c8c upstream.

An error timestamp shows the last known timestamp for the queue, but this
is not updated on the error path. Fix by setting it.

Fixes: f4aa081949e7b6 ("perf tools: Add Intel PT decoder")
Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: stable@vger.kernel.org # v5.15+
Link: https://lore.kernel.org/r/20211210162303.2288710-8-adrian.hunter@intel.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
[Adrian: Backport to v5.10]
Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
---
 tools/perf/util/intel-pt.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/tools/perf/util/intel-pt.c b/tools/perf/util/intel-pt.c
index e5aaf1337be9..5163d2ffea70 100644
--- a/tools/perf/util/intel-pt.c
+++ b/tools/perf/util/intel-pt.c
@@ -2271,6 +2271,7 @@ static int intel_pt_run_decoder(struct intel_pt_queue *ptq, u64 *timestamp)
 				ptq->sync_switch = false;
 				intel_pt_next_tid(pt, ptq);
 			}
+			ptq->timestamp = state->est_timestamp;
 			if (pt->synth_opts.errors) {
 				err = intel_ptq_synth_error(ptq, state);
 				if (err)
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 10+ messages in thread

* Re: [PATCH 5.10 0/8] perf intel_pt: Fixes for v5.10
  2021-12-13 15:45 [PATCH 5.10 0/8] perf intel_pt: Fixes for v5.10 Adrian Hunter
                   ` (7 preceding siblings ...)
  2021-12-13 15:45 ` [PATCH 5.10 8/8] perf intel-pt: Fix error timestamp setting on the decoder error path Adrian Hunter
@ 2021-12-15 14:00 ` Greg KH
  8 siblings, 0 replies; 10+ messages in thread
From: Greg KH @ 2021-12-15 14:00 UTC (permalink / raw)
  To: Adrian Hunter; +Cc: stable

On Mon, Dec 13, 2021 at 05:45:40PM +0200, Adrian Hunter wrote:
> Here are some fixes backported to v5.10.
> 
> Adrian Hunter (8):
>       perf inject: Fix itrace space allowed for new attributes
>       perf intel-pt: Fix some PGE (packet generation enable/control flow packets) usage
>       perf intel-pt: Fix sync state when a PSB (synchronization) packet is found
>       perf intel-pt: Fix intel_pt_fup_event() assumptions about setting state type
>       perf intel-pt: Fix state setting when receiving overflow (OVF) packet
>       perf intel-pt: Fix next 'err' value, walking trace
>       perf intel-pt: Fix missing 'instruction' events with 'q' option
>       perf intel-pt: Fix error timestamp setting on the decoder error path
> 
>  tools/perf/builtin-inject.c                        |  2 +-
>  .../perf/util/intel-pt-decoder/intel-pt-decoder.c  | 83 ++++++++++++++--------
>  tools/perf/util/intel-pt.c                         |  1 +
>  3 files changed, 56 insertions(+), 30 deletions(-)

All now queued up, thanks.

greg k-h

^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2021-12-15 14:00 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-12-13 15:45 [PATCH 5.10 0/8] perf intel_pt: Fixes for v5.10 Adrian Hunter
2021-12-13 15:45 ` [PATCH 5.10 1/8] perf inject: Fix itrace space allowed for new attributes Adrian Hunter
2021-12-13 15:45 ` [PATCH 5.10 2/8] perf intel-pt: Fix some PGE (packet generation enable/control flow packets) usage Adrian Hunter
2021-12-13 15:45 ` [PATCH 5.10 3/8] perf intel-pt: Fix sync state when a PSB (synchronization) packet is found Adrian Hunter
2021-12-13 15:45 ` [PATCH 5.10 4/8] perf intel-pt: Fix intel_pt_fup_event() assumptions about setting state type Adrian Hunter
2021-12-13 15:45 ` [PATCH 5.10 5/8] perf intel-pt: Fix state setting when receiving overflow (OVF) packet Adrian Hunter
2021-12-13 15:45 ` [PATCH 5.10 6/8] perf intel-pt: Fix next 'err' value, walking trace Adrian Hunter
2021-12-13 15:45 ` [PATCH 5.10 7/8] perf intel-pt: Fix missing 'instruction' events with 'q' option Adrian Hunter
2021-12-13 15:45 ` [PATCH 5.10 8/8] perf intel-pt: Fix error timestamp setting on the decoder error path Adrian Hunter
2021-12-15 14:00 ` [PATCH 5.10 0/8] perf intel_pt: Fixes for v5.10 Greg KH

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).