From nobody Tue Jun 30 06:32:16 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id BDD2EC433FE for ; Mon, 24 Jan 2022 08:42:12 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S242216AbiAXImK (ORCPT ); Mon, 24 Jan 2022 03:42:10 -0500 Received: from mga09.intel.com ([134.134.136.24]:62581 "EHLO mga09.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S242227AbiAXImH (ORCPT ); Mon, 24 Jan 2022 03:42:07 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1643013727; x=1674549727; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=U1vhEzhRFkAEErR6RhgKwR5F23Ejyyp9x2qH5mDyASY=; b=FXyOfzvz3MvzFhewAUYrhgkSJ3QebbfMq/QbBK1vpzmdKaQR4EAlsoDE mBVJA8LP2WPhk7zl4d8fXuVk9zVEVfIu5ZQw/dkuOzMTk3X/q+7fmzEeN 7oFxcNE6oWvr4qrnzh0MwbY+gbSJ2ULmvOM0S36FplkwFZfmZtin2oA2M +Booh6+KGCPNngDQtFK04atBQPhH7nAKrehZNXYM9CfJu+6OGLS4Q4gkh Xl9m0OTd9tDrK302hSTfM75Brwr37ovJ+nYERCcUohj/WdoE34dKM67Yk a9PR6wUOgCLLr+gVa8D2BKPjTsCZoampyp9RBBipdIXsBmC58I9Ii+8er Q==; X-IronPort-AV: E=McAfee;i="6200,9189,10236"; a="245778320" X-IronPort-AV: E=Sophos;i="5.88,311,1635231600"; d="scan'208";a="245778320" Received: from orsmga004.jf.intel.com ([10.7.209.38]) by orsmga102.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 24 Jan 2022 00:42:06 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.88,311,1635231600"; d="scan'208";a="627416940" Received: from ahunter-desktop.fi.intel.com ([10.237.72.92]) by orsmga004.jf.intel.com with ESMTP; 24 Jan 2022 00:42:04 -0800 From: Adrian Hunter To: Arnaldo Carvalho de Melo Cc: Jiri Olsa , Alexander Shishkin , Andi Kleen , linux-kernel@vger.kernel.org Subject: [PATCH 01/25] perf intel-pt: pkt-decoder-test: Fix scope of test_data Date: Mon, 24 Jan 2022 10:41:37 +0200 Message-Id: <20220124084201.2699795-2-adrian.hunter@intel.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220124084201.2699795-1-adrian.hunter@intel.com> References: <20220124084201.2699795-1-adrian.hunter@intel.com> MIME-Version: 1.0 Organization: Intel Finland Oy, Registered Address: PL 281, 00181 Helsinki, Business Identity Code: 0357606 - 4, Domiciled in Helsinki Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Make test_data 'static' otherwise it will conflict with any global variable of the same name. Signed-off-by: Adrian Hunter --- tools/perf/arch/x86/tests/intel-pt-pkt-decoder-test.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/perf/arch/x86/tests/intel-pt-pkt-decoder-test.c b/tools/= perf/arch/x86/tests/intel-pt-pkt-decoder-test.c index 2fc882ab24c1..395de4471840 100644 --- a/tools/perf/arch/x86/tests/intel-pt-pkt-decoder-test.c +++ b/tools/perf/arch/x86/tests/intel-pt-pkt-decoder-test.c @@ -17,7 +17,7 @@ * @new_ctx: expected new packet context * @ctx_unchanged: the packet context must not change */ -struct test_data { +static struct test_data { int len; u8 bytes[INTEL_PT_PKT_MAX_SZ]; enum intel_pt_pkt_ctx ctx; --=20 2.25.1 From nobody Tue Jun 30 06:32:16 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id A4214C433EF for ; Mon, 24 Jan 2022 08:42:19 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S242237AbiAXImN (ORCPT ); Mon, 24 Jan 2022 03:42:13 -0500 Received: from mga09.intel.com ([134.134.136.24]:62581 "EHLO mga09.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S242231AbiAXImJ (ORCPT ); Mon, 24 Jan 2022 03:42:09 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1643013729; x=1674549729; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=Pl2pkrdOQVTwaNmjqrWzlum3YSqpF2TAphbkwz+JXjY=; b=Bt0N+8dSuxjxikn09TKXmC4yMFjWsFspzeJqsaFEqECz2XiMqhvlbHyE C+iXn5i6qQ8Z5uhc0Kw/EOGUIbSgtjviQ3rn0J/v9a8SRTBUg/vywXido BKhLpTog1+LQUFZvhf8Uiu3/oHfbCWc0EqxOy4No1nRfW/Mi20mz6oi9H U2S+Db8HZcrkmMpv3Pua5owIg/GnELZTjw/OvPn7n4S5Lmy39AuTo21BS TryiU27G/v+CDSW3Cd5BaBFNLKl6ROnmrLkC6GF12bJB9htChLsGbjFZR U7YMFJ5HodQhu1iybUrZoHefjFbj3q0KNSMelwxcDWRyZAzJJG0vHWxtj g==; X-IronPort-AV: E=McAfee;i="6200,9189,10236"; a="245778325" X-IronPort-AV: E=Sophos;i="5.88,311,1635231600"; d="scan'208";a="245778325" Received: from orsmga004.jf.intel.com ([10.7.209.38]) by orsmga102.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 24 Jan 2022 00:42:09 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.88,311,1635231600"; d="scan'208";a="627416947" Received: from ahunter-desktop.fi.intel.com ([10.237.72.92]) by orsmga004.jf.intel.com with ESMTP; 24 Jan 2022 00:42:07 -0800 From: Adrian Hunter To: Arnaldo Carvalho de Melo Cc: Jiri Olsa , Alexander Shishkin , Andi Kleen , linux-kernel@vger.kernel.org Subject: [PATCH 02/25] perf intel-pt: pkt-decoder: Remove misplaced linebreak Date: Mon, 24 Jan 2022 10:41:38 +0200 Message-Id: <20220124084201.2699795-3-adrian.hunter@intel.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220124084201.2699795-1-adrian.hunter@intel.com> References: <20220124084201.2699795-1-adrian.hunter@intel.com> MIME-Version: 1.0 Organization: Intel Finland Oy, Registered Address: PL 281, 00181 Helsinki, Business Identity Code: 0357606 - 4, Domiciled in Helsinki Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Minor whitespace fix up. Signed-off-by: Adrian Hunter --- tools/perf/util/intel-pt-decoder/intel-pt-pkt-decoder.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/tools/perf/util/intel-pt-decoder/intel-pt-pkt-decoder.c b/tool= s/perf/util/intel-pt-decoder/intel-pt-pkt-decoder.c index 4bd154848cad..fada96746705 100644 --- a/tools/perf/util/intel-pt-decoder/intel-pt-pkt-decoder.c +++ b/tools/perf/util/intel-pt-decoder/intel-pt-pkt-decoder.c @@ -197,8 +197,7 @@ static int intel_pt_get_mnt(const unsigned char *buf, s= ize_t len, return INTEL_PT_NEED_MORE_BYTES; packet->type =3D INTEL_PT_MNT; memcpy_le64(&packet->payload, buf + 3, 8); - return 11 -; + return 11; } =20 static int intel_pt_get_3byte(const unsigned char *buf, size_t len, --=20 2.25.1 From nobody Tue Jun 30 06:32:16 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 03AD1C433F5 for ; Mon, 24 Jan 2022 08:42:25 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S242249AbiAXImW (ORCPT ); Mon, 24 Jan 2022 03:42:22 -0500 Received: from mga09.intel.com ([134.134.136.24]:62581 "EHLO mga09.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S242235AbiAXImL (ORCPT ); Mon, 24 Jan 2022 03:42:11 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1643013731; x=1674549731; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=4HqDhHpdzhZMi5Mnlsq1Wqbo/bNQn4IaJJZW/kCwnuY=; b=g2UKcuxg3WWh8BfE6MOmjIy9qCiTSH/1r/i5xNS9p89sxe5rq23qbebe aSD7LPGN+xO9CHLJrQ6l/DJx5Nj4M3U+4xgq2WUhl3uzfikkMNbab54bT C97QQg+GYjK8ErKkUcMdJJ+hjhvurTD19jd6vohmIqENjgtEpKbeewCYO X+FsP3N4dhu3I5GtqnNoxQSYewNHG7YixqxnEHa3qVHHD/bNu0Q1Spp/h S+qE51Z2/GH99CV6ZdsVsQIzDWiiCPR0KAcwJdH24KaY6chYw45B/hFyp bJkNl0Tqh9StnrQRrjvu36u2Lrnlu5JStl9FC/KvE2u45XzC+KLiMcmt/ A==; X-IronPort-AV: E=McAfee;i="6200,9189,10236"; a="245778334" X-IronPort-AV: E=Sophos;i="5.88,311,1635231600"; d="scan'208";a="245778334" Received: from orsmga004.jf.intel.com ([10.7.209.38]) by orsmga102.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 24 Jan 2022 00:42:11 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.88,311,1635231600"; d="scan'208";a="627416964" Received: from ahunter-desktop.fi.intel.com ([10.237.72.92]) by orsmga004.jf.intel.com with ESMTP; 24 Jan 2022 00:42:09 -0800 From: Adrian Hunter To: Arnaldo Carvalho de Melo Cc: Jiri Olsa , Alexander Shishkin , Andi Kleen , linux-kernel@vger.kernel.org Subject: [PATCH 03/25] perf intel-pt: pkt-decoder: Add CFE and EVD packets Date: Mon, 24 Jan 2022 10:41:39 +0200 Message-Id: <20220124084201.2699795-4-adrian.hunter@intel.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220124084201.2699795-1-adrian.hunter@intel.com> References: <20220124084201.2699795-1-adrian.hunter@intel.com> MIME-Version: 1.0 Organization: Intel Finland Oy, Registered Address: PL 281, 00181 Helsinki, Business Identity Code: 0357606 - 4, Domiciled in Helsinki Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" As of Intel SDM (https://www.intel.com/sdm) version 076, there is a new Intel PT feature called Event Trace which requires 2 new packets CFE and EVD. Add them to the packet decoder and packet decoder test. Signed-off-by: Adrian Hunter --- .../x86/tests/intel-pt-pkt-decoder-test.c | 8 ++++ .../util/intel-pt-decoder/intel-pt-decoder.c | 32 +++++++++++++++ .../intel-pt-decoder/intel-pt-pkt-decoder.c | 40 +++++++++++++++++++ .../intel-pt-decoder/intel-pt-pkt-decoder.h | 3 ++ 4 files changed, 83 insertions(+) diff --git a/tools/perf/arch/x86/tests/intel-pt-pkt-decoder-test.c b/tools/= perf/arch/x86/tests/intel-pt-pkt-decoder-test.c index 395de4471840..0155215c1d41 100644 --- a/tools/perf/arch/x86/tests/intel-pt-pkt-decoder-test.c +++ b/tools/perf/arch/x86/tests/intel-pt-pkt-decoder-test.c @@ -166,6 +166,14 @@ static struct test_data { {2, {0x02, 0xb3}, INTEL_PT_BLK_4_CTX, {INTEL_PT_BEP_IP, 0, 0}, 0, 0 }, {2, {0x02, 0x33}, INTEL_PT_BLK_8_CTX, {INTEL_PT_BEP, 0, 0}, 0, 0 }, {2, {0x02, 0xb3}, INTEL_PT_BLK_8_CTX, {INTEL_PT_BEP_IP, 0, 0}, 0, 0 }, + /* Control Flow Event Packet */ + {4, {0x02, 0x13, 0x01, 0x03}, 0, {INTEL_PT_CFE, 1, 3}, 0, 0 }, + {4, {0x02, 0x13, 0x81, 0x03}, 0, {INTEL_PT_CFE_IP, 1, 3}, 0, 0 }, + {4, {0x02, 0x13, 0x1f, 0x00}, 0, {INTEL_PT_CFE, 0x1f, 0}, 0, 0 }, + {4, {0x02, 0x13, 0x9f, 0xff}, 0, {INTEL_PT_CFE_IP, 0x1f, 0xff}, 0, 0 }, + /* */ + {11, {0x02, 0x53, 0x09, 1, 2, 3, 4, 5, 6, 7}, 0, {INTEL_PT_EVD, 0x09, 0x7= 060504030201}, 0, 0 }, + {11, {0x02, 0x53, 0x3f, 2, 3, 4, 5, 6, 7, 8}, 0, {INTEL_PT_EVD, 0x3f, 0x8= 070605040302}, 0, 0 }, /* Terminator */ {0, {0}, 0, {0, 0, 0}, 0, 0 }, }; diff --git a/tools/perf/util/intel-pt-decoder/intel-pt-decoder.c b/tools/pe= rf/util/intel-pt-decoder/intel-pt-decoder.c index 0e013c2d9eb4..3980ee2080ae 100644 --- a/tools/perf/util/intel-pt-decoder/intel-pt-decoder.c +++ b/tools/perf/util/intel-pt-decoder/intel-pt-decoder.c @@ -820,6 +820,9 @@ static int intel_pt_calc_cyc_cb(struct intel_pt_pkt_inf= o *pkt_info) case INTEL_PT_BIP: case INTEL_PT_BEP: case INTEL_PT_BEP_IP: + case INTEL_PT_CFE: + case INTEL_PT_CFE_IP: + case INTEL_PT_EVD: return 0; =20 case INTEL_PT_MTC: @@ -1873,6 +1876,9 @@ static int intel_pt_walk_psbend(struct intel_pt_decod= er *decoder) case INTEL_PT_BIP: case INTEL_PT_BEP: case INTEL_PT_BEP_IP: + case INTEL_PT_CFE: + case INTEL_PT_CFE_IP: + case INTEL_PT_EVD: decoder->have_tma =3D false; intel_pt_log("ERROR: Unexpected packet\n"); err =3D -EAGAIN; @@ -1975,6 +1981,9 @@ static int intel_pt_walk_fup_tip(struct intel_pt_deco= der *decoder) case INTEL_PT_BIP: case INTEL_PT_BEP: case INTEL_PT_BEP_IP: + case INTEL_PT_CFE: + case INTEL_PT_CFE_IP: + case INTEL_PT_EVD: intel_pt_log("ERROR: Missing TIP after FUP\n"); decoder->pkt_state =3D INTEL_PT_STATE_ERR3; decoder->pkt_step =3D 0; @@ -2134,6 +2143,9 @@ static int intel_pt_vm_psb_lookahead_cb(struct intel_= pt_pkt_info *pkt_info) case INTEL_PT_TIP: case INTEL_PT_PSB: case INTEL_PT_TRACESTOP: + case INTEL_PT_CFE: + case INTEL_PT_CFE_IP: + case INTEL_PT_EVD: default: return 1; } @@ -2653,6 +2665,9 @@ static int intel_pt_vm_time_correlation(struct intel_= pt_decoder *decoder) decoder->blk_type =3D 0; break; =20 + case INTEL_PT_CFE: + case INTEL_PT_CFE_IP: + case INTEL_PT_EVD: case INTEL_PT_MODE_EXEC: case INTEL_PT_MODE_TSX: case INTEL_PT_MNT: @@ -2789,6 +2804,9 @@ static int intel_pt_hop_trace(struct intel_pt_decoder= *decoder, bool *no_tip, in case INTEL_PT_BIP: case INTEL_PT_BEP: case INTEL_PT_BEP_IP: + case INTEL_PT_CFE: + case INTEL_PT_CFE_IP: + case INTEL_PT_EVD: default: return HOP_PROCESS; } @@ -2857,6 +2875,9 @@ static int intel_pt_psb_lookahead_cb(struct intel_pt_= pkt_info *pkt_info) case INTEL_PT_BIP: case INTEL_PT_BEP: case INTEL_PT_BEP_IP: + case INTEL_PT_CFE: + case INTEL_PT_CFE_IP: + case INTEL_PT_EVD: if (data->after_psbend) { data->after_psbend -=3D 1; if (!data->after_psbend) @@ -3223,6 +3244,11 @@ static int intel_pt_walk_trace(struct intel_pt_decod= er *decoder) } goto next; =20 + case INTEL_PT_CFE: + case INTEL_PT_CFE_IP: + case INTEL_PT_EVD: + break; + default: return intel_pt_bug(decoder); } @@ -3265,6 +3291,9 @@ static int intel_pt_walk_psb(struct intel_pt_decoder = *decoder) case INTEL_PT_BIP: case INTEL_PT_BEP: case INTEL_PT_BEP_IP: + case INTEL_PT_CFE: + case INTEL_PT_CFE_IP: + case INTEL_PT_EVD: intel_pt_log("ERROR: Unexpected packet\n"); err =3D -ENOENT; goto out; @@ -3476,6 +3505,9 @@ static int intel_pt_walk_to_ip(struct intel_pt_decode= r *decoder) case INTEL_PT_BIP: case INTEL_PT_BEP: case INTEL_PT_BEP_IP: + case INTEL_PT_CFE: + case INTEL_PT_CFE_IP: + case INTEL_PT_EVD: default: break; } diff --git a/tools/perf/util/intel-pt-decoder/intel-pt-pkt-decoder.c b/tool= s/perf/util/intel-pt-decoder/intel-pt-pkt-decoder.c index fada96746705..885174964c27 100644 --- a/tools/perf/util/intel-pt-decoder/intel-pt-pkt-decoder.c +++ b/tools/perf/util/intel-pt-decoder/intel-pt-pkt-decoder.c @@ -64,6 +64,9 @@ static const char * const packet_name[] =3D { [INTEL_PT_BIP] =3D "BIP", [INTEL_PT_BEP] =3D "BEP", [INTEL_PT_BEP_IP] =3D "BEP", + [INTEL_PT_CFE] =3D "CFE", + [INTEL_PT_CFE_IP] =3D "CFE", + [INTEL_PT_EVD] =3D "EVD", }; =20 const char *intel_pt_pkt_name(enum intel_pt_pkt_type type) @@ -328,6 +331,29 @@ static int intel_pt_get_bep_ip(size_t len, struct inte= l_pt_pkt *packet) return 2; } =20 +static int intel_pt_get_cfe(const unsigned char *buf, size_t len, + struct intel_pt_pkt *packet) +{ + if (len < 4) + return INTEL_PT_NEED_MORE_BYTES; + packet->type =3D buf[2] & 0x80 ? INTEL_PT_CFE_IP : INTEL_PT_CFE; + packet->count =3D buf[2] & 0x1f; + packet->payload =3D buf[3]; + return 4; +} + +static int intel_pt_get_evd(const unsigned char *buf, size_t len, + struct intel_pt_pkt *packet) +{ + if (len < 11) + return INTEL_PT_NEED_MORE_BYTES; + packet->type =3D INTEL_PT_EVD; + packet->count =3D buf[2] & 0x3f; + packet->payload =3D buf[3]; + memcpy_le64(&packet->payload, buf + 3, 8); + return 11; +} + static int intel_pt_get_ext(const unsigned char *buf, size_t len, struct intel_pt_pkt *packet) { @@ -374,6 +400,10 @@ static int intel_pt_get_ext(const unsigned char *buf, = size_t len, return intel_pt_get_bep(len, packet); case 0xb3: /* BEP with IP */ return intel_pt_get_bep_ip(len, packet); + case 0x13: /* CFE */ + return intel_pt_get_cfe(buf, len, packet); + case 0x53: /* EVD */ + return intel_pt_get_evd(buf, len, packet); default: return INTEL_PT_BAD_PACKET; } @@ -623,6 +653,9 @@ void intel_pt_upd_pkt_ctx(const struct intel_pt_pkt *pa= cket, case INTEL_PT_MWAIT: case INTEL_PT_BEP: case INTEL_PT_BEP_IP: + case INTEL_PT_CFE: + case INTEL_PT_CFE_IP: + case INTEL_PT_EVD: *ctx =3D INTEL_PT_NO_CTX; break; case INTEL_PT_BBP: @@ -750,6 +783,13 @@ int intel_pt_pkt_desc(const struct intel_pt_pkt *packe= t, char *buf, case INTEL_PT_BIP: return snprintf(buf, buf_len, "%s ID 0x%02x Value 0x%llx", name, packet->count, payload); + case INTEL_PT_CFE: + case INTEL_PT_CFE_IP: + return snprintf(buf, buf_len, "%s IP:%d Type 0x%02x Vector 0x%llx", + name, packet->type =3D=3D INTEL_PT_CFE_IP, packet->count, payload); + case INTEL_PT_EVD: + return snprintf(buf, buf_len, "%s Type 0x%02x Payload 0x%llx", + name, packet->count, payload); default: break; } diff --git a/tools/perf/util/intel-pt-decoder/intel-pt-pkt-decoder.h b/tool= s/perf/util/intel-pt-decoder/intel-pt-pkt-decoder.h index 996090cb84f6..496ba4be875c 100644 --- a/tools/perf/util/intel-pt-decoder/intel-pt-pkt-decoder.h +++ b/tools/perf/util/intel-pt-decoder/intel-pt-pkt-decoder.h @@ -56,6 +56,9 @@ enum intel_pt_pkt_type { INTEL_PT_BIP, INTEL_PT_BEP, INTEL_PT_BEP_IP, + INTEL_PT_CFE, + INTEL_PT_CFE_IP, + INTEL_PT_EVD, }; =20 struct intel_pt_pkt { --=20 2.25.1 From nobody Tue Jun 30 06:32:16 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 9BB89C433EF for ; Mon, 24 Jan 2022 08:42:25 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S242267AbiAXImX (ORCPT ); Mon, 24 Jan 2022 03:42:23 -0500 Received: from mga09.intel.com ([134.134.136.24]:62581 "EHLO mga09.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S242239AbiAXImN (ORCPT ); Mon, 24 Jan 2022 03:42:13 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1643013733; x=1674549733; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=ruYPOgJrcYMBa3FmjqCOu4n6zLK6I1fiqk+W/rHxgTc=; b=gldvlAX0inIrOreqHj1TB2nf7uYy1mabAyzghXoK2effShzMImzpQwRO A/jcAn9PrHmTN2lNuXH0SIh4u2P657T40W2lOeJk6sLMGCoDqE44Ns9wh rvMqz9R0Chk2bsFZa1KMmicLhfAEXyzusNjgP90htE0Xy3ZE34EircMUI 0iOI1/eYTqIU0Fu4MmY0IcYektik9QGPCLHWJ3F+VvND8KiMX41ne7kd5 I985dmm0WCFF9TpwVdswiNG4eTo3uV6NWh/1cf2SerPKMAPCxPfLZOdCm BnYUPNMzsGkUqOtLNK8UXXmWUYdZxEgGzUMO8pv6PLqOMwiDmXJhyk4LV Q==; X-IronPort-AV: E=McAfee;i="6200,9189,10236"; a="245778338" X-IronPort-AV: E=Sophos;i="5.88,311,1635231600"; d="scan'208";a="245778338" Received: from orsmga004.jf.intel.com ([10.7.209.38]) by orsmga102.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 24 Jan 2022 00:42:13 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.88,311,1635231600"; d="scan'208";a="627416985" Received: from ahunter-desktop.fi.intel.com ([10.237.72.92]) by orsmga004.jf.intel.com with ESMTP; 24 Jan 2022 00:42:11 -0800 From: Adrian Hunter To: Arnaldo Carvalho de Melo Cc: Jiri Olsa , Alexander Shishkin , Andi Kleen , linux-kernel@vger.kernel.org Subject: [PATCH 04/25] perf intel-pt: pkt-decoder: Add MODE.Exec IFLAG bit Date: Mon, 24 Jan 2022 10:41:40 +0200 Message-Id: <20220124084201.2699795-5-adrian.hunter@intel.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220124084201.2699795-1-adrian.hunter@intel.com> References: <20220124084201.2699795-1-adrian.hunter@intel.com> MIME-Version: 1.0 Organization: Intel Finland Oy, Registered Address: PL 281, 00181 Helsinki, Business Identity Code: 0357606 - 4, Domiciled in Helsinki Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" As of Intel SDM (https://www.intel.com/sdm) version 076, there is a new Intel PT feature called Event Trace which adds a bit to the existing MODE.Exec packet to record the interrupt flag. Amend the packet decoder and packet decoder test accordingly. Signed-off-by: Adrian Hunter --- tools/perf/arch/x86/tests/intel-pt-pkt-decoder-test.c | 7 +++++-- tools/perf/util/intel-pt-decoder/intel-pt-pkt-decoder.c | 4 +++- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/tools/perf/arch/x86/tests/intel-pt-pkt-decoder-test.c b/tools/= perf/arch/x86/tests/intel-pt-pkt-decoder-test.c index 0155215c1d41..42237656f453 100644 --- a/tools/perf/arch/x86/tests/intel-pt-pkt-decoder-test.c +++ b/tools/perf/arch/x86/tests/intel-pt-pkt-decoder-test.c @@ -70,8 +70,11 @@ static struct test_data { {8, {0x02, 0x43, 3, 4, 6, 8, 10, 12}, 0, {INTEL_PT_PIP, 0, 0xC0A08060403}= , 0, 0 }, /* Mode Exec Packet */ {2, {0x99, 0x00}, 0, {INTEL_PT_MODE_EXEC, 0, 16}, 0, 0 }, - {2, {0x99, 0x01}, 0, {INTEL_PT_MODE_EXEC, 0, 64}, 0, 0 }, - {2, {0x99, 0x02}, 0, {INTEL_PT_MODE_EXEC, 0, 32}, 0, 0 }, + {2, {0x99, 0x01}, 0, {INTEL_PT_MODE_EXEC, 1, 64}, 0, 0 }, + {2, {0x99, 0x02}, 0, {INTEL_PT_MODE_EXEC, 2, 32}, 0, 0 }, + {2, {0x99, 0x04}, 0, {INTEL_PT_MODE_EXEC, 4, 16}, 0, 0 }, + {2, {0x99, 0x05}, 0, {INTEL_PT_MODE_EXEC, 5, 64}, 0, 0 }, + {2, {0x99, 0x06}, 0, {INTEL_PT_MODE_EXEC, 6, 32}, 0, 0 }, /* Mode TSX Packet */ {2, {0x99, 0x20}, 0, {INTEL_PT_MODE_TSX, 0, 0}, 0, 0 }, {2, {0x99, 0x21}, 0, {INTEL_PT_MODE_TSX, 0, 1}, 0, 0 }, diff --git a/tools/perf/util/intel-pt-decoder/intel-pt-pkt-decoder.c b/tool= s/perf/util/intel-pt-decoder/intel-pt-pkt-decoder.c index 885174964c27..18f97f43e01a 100644 --- a/tools/perf/util/intel-pt-decoder/intel-pt-pkt-decoder.c +++ b/tools/perf/util/intel-pt-decoder/intel-pt-pkt-decoder.c @@ -504,6 +504,7 @@ static int intel_pt_get_mode(const unsigned char *buf, = size_t len, switch (buf[1] >> 5) { case 0: packet->type =3D INTEL_PT_MODE_EXEC; + packet->count =3D buf[1]; switch (buf[1] & 3) { case 0: packet->payload =3D 16; @@ -741,7 +742,8 @@ int intel_pt_pkt_desc(const struct intel_pt_pkt *packet= , char *buf, return snprintf(buf, buf_len, "%s CTC 0x%x FC 0x%x", name, (unsigned)payload, packet->count); case INTEL_PT_MODE_EXEC: - return snprintf(buf, buf_len, "%s %lld", name, payload); + return snprintf(buf, buf_len, "%s IF:%d %lld", + name, !!(packet->count & 4), payload); case INTEL_PT_MODE_TSX: return snprintf(buf, buf_len, "%s TXAbort:%u InTX:%u", name, (unsigned)(payload >> 1) & 1, --=20 2.25.1 From nobody Tue Jun 30 06:32:16 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 18E1FC433EF for ; Mon, 24 Jan 2022 08:42:32 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S242300AbiAXIma (ORCPT ); Mon, 24 Jan 2022 03:42:30 -0500 Received: from mga09.intel.com ([134.134.136.24]:62595 "EHLO mga09.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S242273AbiAXImQ (ORCPT ); Mon, 24 Jan 2022 03:42:16 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1643013736; x=1674549736; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=kKu64js75pIInjB+0/NtD/yf7Z3KzousYXaExP2l5Ig=; b=mefd9F2KFwsusZgFOzb1BQIMrCyx+GgPEK5jtw5jD2scYE5kBFW2nCtu p7MZzK/7h86OKSNxURRyIYmY5hDzhcaqeRMEkSWnifORTEFltQSOCe5je OLrMaEJC6+R+mYwnGGUTMdv1/B9CIUuqvVCPhT6AFiQtwz4mzLkmHgWLj KX6nmobVlju/WACdaoTXRU/V33AWlgBVFRiBCuu1Iwc9IJ095ug1eLAM/ ofJ09pBRlGNd5jHCzzcRJqiX5ImijzCQZAf2MLJ1MxOW19RaGvQMUDEyh ybKHloOjtuOBxpEgm9rrQdglt2Hpuaft/zOG1j52xz8QYbnZeCKhP9TQx Q==; X-IronPort-AV: E=McAfee;i="6200,9189,10236"; a="245778355" X-IronPort-AV: E=Sophos;i="5.88,311,1635231600"; d="scan'208";a="245778355" Received: from orsmga004.jf.intel.com ([10.7.209.38]) by orsmga102.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 24 Jan 2022 00:42:15 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.88,311,1635231600"; d="scan'208";a="627417006" Received: from ahunter-desktop.fi.intel.com ([10.237.72.92]) by orsmga004.jf.intel.com with ESMTP; 24 Jan 2022 00:42:13 -0800 From: Adrian Hunter To: Arnaldo Carvalho de Melo Cc: Jiri Olsa , Alexander Shishkin , Andi Kleen , linux-kernel@vger.kernel.org Subject: [PATCH 05/25] perf intel-pt: decoder: Add config bit definitions Date: Mon, 24 Jan 2022 10:41:41 +0200 Message-Id: <20220124084201.2699795-6-adrian.hunter@intel.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220124084201.2699795-1-adrian.hunter@intel.com> References: <20220124084201.2699795-1-adrian.hunter@intel.com> MIME-Version: 1.0 Organization: Intel Finland Oy, Registered Address: PL 281, 00181 Helsinki, Business Identity Code: 0357606 - 4, Domiciled in Helsinki Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Tidy up config bit constants to use #define. Signed-off-by: Adrian Hunter --- tools/perf/util/intel-pt.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/tools/perf/util/intel-pt.c b/tools/perf/util/intel-pt.c index e8613cbda331..f3e5c2dfee25 100644 --- a/tools/perf/util/intel-pt.c +++ b/tools/perf/util/intel-pt.c @@ -46,6 +46,10 @@ =20 #define MAX_TIMESTAMP (~0ULL) =20 +#define INTEL_PT_CFG_PASS_THRU BIT_ULL(0) +#define INTEL_PT_CFG_PWR_EVT_EN BIT_ULL(4) +#define INTEL_PT_CFG_BRANCH_EN BIT_ULL(13) + struct range { u64 start; u64 end; @@ -953,7 +957,8 @@ static bool intel_pt_branch_enable(struct intel_pt *pt) =20 evlist__for_each_entry(pt->session->evlist, evsel) { if (intel_pt_get_config(pt, &evsel->core.attr, &config) && - (config & 1) && !(config & 0x2000)) + (config & INTEL_PT_CFG_PASS_THRU) && + !(config & INTEL_PT_CFG_BRANCH_EN)) return false; } return true; @@ -3429,7 +3434,7 @@ static int intel_pt_synth_events(struct intel_pt *pt, id +=3D 1; } =20 - if (pt->synth_opts.pwr_events && (evsel->core.attr.config & 0x10)) { + if (pt->synth_opts.pwr_events && (evsel->core.attr.config & INTEL_PT_CFG_= PWR_EVT_EN)) { attr.config =3D PERF_SYNTH_INTEL_MWAIT; err =3D intel_pt_synth_event(session, "mwait", &attr, id); if (err) --=20 2.25.1 From nobody Tue Jun 30 06:32:16 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id E2615C433EF for ; Mon, 24 Jan 2022 08:42:29 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S242285AbiAXIm2 (ORCPT ); Mon, 24 Jan 2022 03:42:28 -0500 Received: from mga09.intel.com ([134.134.136.24]:62581 "EHLO mga09.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S242242AbiAXImW (ORCPT ); Mon, 24 Jan 2022 03:42:22 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1643013742; x=1674549742; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=wMz/88t6sXC6bchK+SUeYsfhZWrCD/X2I+77HMnVuUg=; b=BWElwywS6mRLXNMFiQ3f5bgYjG5kDaqNq2qzK6fk60CMk0TLm100j8pK gNHocTfA2KGprg9sl7QKmzrce6rYX9+fc5uEKvUDNAqqniAIxRBeJNuGR mgn2QyscJ/yo7nc9VJEr6F/1nFbZQ6ebMtm5RVKXNgTcbofm38Zbv3jym hr/qNBudYluTkRNK4pVrrrhly5L4h3uE3wpt6+KGF3vTbQrE67nb2yr8s s29Sd5S5bcHSbV8SEaLU2/feiqf1vysMCMoy8vQnoKTOmMoqKeHRiXexw YVxq27fsxTNoCadkoceEgjIfwy2mSJchg4K2Z/e8J3SRm2DgOAgsCX5Y7 w==; X-IronPort-AV: E=McAfee;i="6200,9189,10236"; a="245778358" X-IronPort-AV: E=Sophos;i="5.88,311,1635231600"; d="scan'208";a="245778358" Received: from orsmga004.jf.intel.com ([10.7.209.38]) by orsmga102.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 24 Jan 2022 00:42:18 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.88,311,1635231600"; d="scan'208";a="627417026" Received: from ahunter-desktop.fi.intel.com ([10.237.72.92]) by orsmga004.jf.intel.com with ESMTP; 24 Jan 2022 00:42:16 -0800 From: Adrian Hunter To: Arnaldo Carvalho de Melo Cc: Jiri Olsa , Alexander Shishkin , Andi Kleen , linux-kernel@vger.kernel.org Subject: [PATCH 06/25] perf intel-pt: decoder: Factor out clearing of FUP event variables Date: Mon, 24 Jan 2022 10:41:42 +0200 Message-Id: <20220124084201.2699795-7-adrian.hunter@intel.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220124084201.2699795-1-adrian.hunter@intel.com> References: <20220124084201.2699795-1-adrian.hunter@intel.com> MIME-Version: 1.0 Organization: Intel Finland Oy, Registered Address: PL 281, 00181 Helsinki, Business Identity Code: 0357606 - 4, Domiciled in Helsinki Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Factor out clearing of FUP event variables, to avoid code duplication. Signed-off-by: Adrian Hunter --- .../util/intel-pt-decoder/intel-pt-decoder.c | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/tools/perf/util/intel-pt-decoder/intel-pt-decoder.c b/tools/pe= rf/util/intel-pt-decoder/intel-pt-decoder.c index 3980ee2080ae..5792d536b458 100644 --- a/tools/perf/util/intel-pt-decoder/intel-pt-decoder.c +++ b/tools/perf/util/intel-pt-decoder/intel-pt-decoder.c @@ -1206,6 +1206,16 @@ static int intel_pt_walk_insn(struct intel_pt_decode= r *decoder, return err; } =20 +static void intel_pt_clear_fup_event(struct intel_pt_decoder *decoder) +{ + decoder->set_fup_tx_flags =3D false; + decoder->set_fup_ptw =3D false; + decoder->set_fup_mwait =3D false; + decoder->set_fup_pwre =3D false; + decoder->set_fup_exstop =3D false; + decoder->set_fup_bep =3D false; +} + static bool intel_pt_fup_event(struct intel_pt_decoder *decoder) { enum intel_pt_sample_type type =3D decoder->state.type; @@ -1623,12 +1633,7 @@ static int intel_pt_overflow(struct intel_pt_decoder= *decoder) decoder->state.from_ip =3D decoder->ip; decoder->ip =3D 0; decoder->pge =3D false; - decoder->set_fup_tx_flags =3D false; - decoder->set_fup_ptw =3D false; - decoder->set_fup_mwait =3D false; - decoder->set_fup_pwre =3D false; - decoder->set_fup_exstop =3D false; - decoder->set_fup_bep =3D false; + intel_pt_clear_fup_event(decoder); decoder->overflow =3D true; return -EOVERFLOW; } @@ -3518,12 +3523,7 @@ static int intel_pt_sync_ip(struct intel_pt_decoder = *decoder) { int err; =20 - decoder->set_fup_tx_flags =3D false; - decoder->set_fup_ptw =3D false; - decoder->set_fup_mwait =3D false; - decoder->set_fup_pwre =3D false; - decoder->set_fup_exstop =3D false; - decoder->set_fup_bep =3D false; + intel_pt_clear_fup_event(decoder); decoder->overflow =3D false; =20 if (!decoder->branch_enable) { --=20 2.25.1 From nobody Tue Jun 30 06:32:16 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 2A814C433F5 for ; Mon, 24 Jan 2022 08:42:40 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S242290AbiAXImj (ORCPT ); Mon, 24 Jan 2022 03:42:39 -0500 Received: from mga09.intel.com ([134.134.136.24]:62597 "EHLO mga09.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S242247AbiAXImW (ORCPT ); Mon, 24 Jan 2022 03:42:22 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1643013742; x=1674549742; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=PyojuQg3ggflEwcudqiK5B58tv0p5xeRIcr4Ys+Gnqw=; b=eeO+oFTEfVlKQ5sPrXg3+iXp9HFlALvBTY2ruSW7vbxAXKgyoJw00TtT 9vpUgLNN33QL6DDEFzsc6crDdGqEJ3G0pi0CfYWisC25Fd1+P5ZZ/OEge bger+Jkfb4Nm8jvSEebhcVpKq6vn7gBdAQEKJxhflWfaWugqBnsBB2beo 2H0Br0i5k/ldcvIPNwYsS+65dxvWG75zPq/GnCqWCsea2vMLElFmMKAI/ keYgwj4Qw0hDJ7oEJmiX+uAV09LPz3o2n2io0dgSJ+EIv7zLEM9KSTf1i eKJwBTWjoPyA8rFwIsWsqM79vWkQVabH0t1McwdThbmFwv/MBr98cCWbx g==; X-IronPort-AV: E=McAfee;i="6200,9189,10236"; a="245778364" X-IronPort-AV: E=Sophos;i="5.88,311,1635231600"; d="scan'208";a="245778364" Received: from orsmga004.jf.intel.com ([10.7.209.38]) by orsmga102.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 24 Jan 2022 00:42:20 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.88,311,1635231600"; d="scan'208";a="627417042" Received: from ahunter-desktop.fi.intel.com ([10.237.72.92]) by orsmga004.jf.intel.com with ESMTP; 24 Jan 2022 00:42:18 -0800 From: Adrian Hunter To: Arnaldo Carvalho de Melo Cc: Jiri Olsa , Alexander Shishkin , Andi Kleen , linux-kernel@vger.kernel.org Subject: [PATCH 07/25] perf intel-pt: decoder: Add CFE and EVD processing Date: Mon, 24 Jan 2022 10:41:43 +0200 Message-Id: <20220124084201.2699795-8-adrian.hunter@intel.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220124084201.2699795-1-adrian.hunter@intel.com> References: <20220124084201.2699795-1-adrian.hunter@intel.com> MIME-Version: 1.0 Organization: Intel Finland Oy, Registered Address: PL 281, 00181 Helsinki, Business Identity Code: 0357606 - 4, Domiciled in Helsinki Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" As of Intel SDM (https://www.intel.com/sdm) version 076, there is a new Intel PT feature called Event Trace which requires 2 new packets CFE and EVD. Each Event Trace event is represented by a CFE packet that is preceded by zero or more EVD packets. It may be bound to a following FUP packet that provides the IP. Event Trace exposes details about asynchronous events. The CFE packet contains a type field to identify one of the following: 1 INTR interrupt, fault, exception, NMI 2 IRET interrupt return 3 SMI system management interrupt 4 RSM resume from system management mode 5 SIPI startup interprocessor interrupt 6 INIT INIT signal 7 VMENTRY VM-Entry 8 VMEXIT VM-Entry 9 VMEXIT_INTR VM-Exit due to interrupt 10 SHUTDOWN Shutdown For more details, refer to the Intel SDM, Intel Processor Trace chapter. Add processing to the decoder for the new packets. Signed-off-by: Adrian Hunter --- .../util/intel-pt-decoder/intel-pt-decoder.c | 62 +++++++++++++++++++ .../util/intel-pt-decoder/intel-pt-decoder.h | 17 +++++ 2 files changed, 79 insertions(+) diff --git a/tools/perf/util/intel-pt-decoder/intel-pt-decoder.c b/tools/pe= rf/util/intel-pt-decoder/intel-pt-decoder.c index 5792d536b458..1a39119706d6 100644 --- a/tools/perf/util/intel-pt-decoder/intel-pt-decoder.c +++ b/tools/perf/util/intel-pt-decoder/intel-pt-decoder.c @@ -213,6 +213,8 @@ struct intel_pt_decoder { bool set_fup_pwre; bool set_fup_exstop; bool set_fup_bep; + bool set_fup_cfe_ip; + bool set_fup_cfe; bool sample_cyc; unsigned int fup_tx_flags; unsigned int tx_flags; @@ -223,6 +225,7 @@ struct intel_pt_decoder { uint64_t timestamp_insn_cnt; uint64_t sample_insn_cnt; uint64_t stuck_ip; + struct intel_pt_pkt fup_cfe_pkt; int max_loops; int no_progress; int stuck_ip_prd; @@ -231,6 +234,8 @@ struct intel_pt_decoder { const unsigned char *next_buf; size_t next_len; unsigned char temp_buf[INTEL_PT_PKT_MAX_SZ]; + int evd_cnt; + struct intel_pt_evd evd[INTEL_PT_MAX_EVDS]; }; =20 static uint64_t intel_pt_lower_power_of_2(uint64_t x) @@ -1214,6 +1219,9 @@ static void intel_pt_clear_fup_event(struct intel_pt_= decoder *decoder) decoder->set_fup_pwre =3D false; decoder->set_fup_exstop =3D false; decoder->set_fup_bep =3D false; + decoder->set_fup_cfe_ip =3D false; + decoder->set_fup_cfe =3D false; + decoder->evd_cnt =3D 0; } =20 static bool intel_pt_fup_event(struct intel_pt_decoder *decoder) @@ -1223,6 +1231,23 @@ static bool intel_pt_fup_event(struct intel_pt_decod= er *decoder) =20 decoder->state.type &=3D ~INTEL_PT_BRANCH; =20 + if (decoder->set_fup_cfe_ip || decoder->set_fup_cfe) { + bool ip =3D decoder->set_fup_cfe_ip; + + decoder->set_fup_cfe_ip =3D false; + decoder->set_fup_cfe =3D false; + decoder->state.type |=3D INTEL_PT_EVT; + if (!ip && decoder->pge) + decoder->state.type |=3D INTEL_PT_BRANCH; + decoder->state.cfe_type =3D decoder->fup_cfe_pkt.count; + decoder->state.cfe_vector =3D decoder->fup_cfe_pkt.payload; + decoder->state.evd_cnt =3D decoder->evd_cnt; + decoder->state.evd =3D decoder->evd; + decoder->evd_cnt =3D 0; + if (ip || decoder->pge) + decoder->state.flags |=3D INTEL_PT_FUP_IP; + ret =3D true; + } if (decoder->set_fup_tx_flags) { decoder->set_fup_tx_flags =3D false; decoder->tx_flags =3D decoder->fup_tx_flags; @@ -1540,6 +1565,19 @@ static int intel_pt_mode_tsx(struct intel_pt_decoder= *decoder, bool *no_tip) return 0; } =20 +static int intel_pt_evd(struct intel_pt_decoder *decoder) +{ + if (decoder->evd_cnt >=3D INTEL_PT_MAX_EVDS) { + intel_pt_log_at("ERROR: Too many EVD packets", decoder->pos); + return -ENOSYS; + } + decoder->evd[decoder->evd_cnt++] =3D (struct intel_pt_evd){ + .type =3D decoder->packet.count, + .payload =3D decoder->packet.payload, + }; + return 0; +} + static uint64_t intel_pt_8b_tsc(uint64_t timestamp, uint64_t ref_timestamp) { timestamp |=3D (ref_timestamp & (0xffULL << 56)); @@ -3250,8 +3288,32 @@ static int intel_pt_walk_trace(struct intel_pt_decod= er *decoder) goto next; =20 case INTEL_PT_CFE: + decoder->fup_cfe_pkt =3D decoder->packet; + decoder->set_fup_cfe =3D true; + if (!decoder->pge) { + intel_pt_fup_event(decoder); + return 0; + } + break; + case INTEL_PT_CFE_IP: + decoder->fup_cfe_pkt =3D decoder->packet; + err =3D intel_pt_get_next_packet(decoder); + if (err) + return err; + if (decoder->packet.type =3D=3D INTEL_PT_FUP) { + decoder->set_fup_cfe_ip =3D true; + no_tip =3D true; + } else { + intel_pt_log_at("ERROR: Missing FUP after CFE", + decoder->pos); + } + goto next; + case INTEL_PT_EVD: + err =3D intel_pt_evd(decoder); + if (err) + return err; break; =20 default: diff --git a/tools/perf/util/intel-pt-decoder/intel-pt-decoder.h b/tools/pe= rf/util/intel-pt-decoder/intel-pt-decoder.h index 8fd68f7a0963..59ef4b41ec67 100644 --- a/tools/perf/util/intel-pt-decoder/intel-pt-decoder.h +++ b/tools/perf/util/intel-pt-decoder/intel-pt-decoder.h @@ -35,6 +35,7 @@ enum intel_pt_sample_type { INTEL_PT_TRACE_END =3D 1 << 10, INTEL_PT_BLK_ITEMS =3D 1 << 11, INTEL_PT_PSB_EVT =3D 1 << 12, + INTEL_PT_EVT =3D 1 << 13, }; =20 enum intel_pt_period_type { @@ -209,6 +210,18 @@ struct intel_pt_vmcs_info { bool error_printed; }; =20 +/* + * Maximum number of event trace data in one go, assuming at most 1 per ty= pe + * and 6-bits of type in the EVD packet. + */ +#define INTEL_PT_MAX_EVDS 64 + +/* Event trace data from EVD packet */ +struct intel_pt_evd { + int type; + uint64_t payload; +}; + struct intel_pt_state { enum intel_pt_sample_type type; bool from_nr; @@ -234,6 +247,10 @@ struct intel_pt_state { int insn_len; char insn[INTEL_PT_INSN_BUF_SZ]; struct intel_pt_blk_items items; + int cfe_type; + int cfe_vector; + int evd_cnt; + struct intel_pt_evd *evd; }; =20 struct intel_pt_insn; --=20 2.25.1 From nobody Tue Jun 30 06:32:16 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id DEA92C433EF for ; Mon, 24 Jan 2022 08:44:32 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S242184AbiAXIm0 (ORCPT ); Mon, 24 Jan 2022 03:42:26 -0500 Received: from mga09.intel.com ([134.134.136.24]:62581 "EHLO mga09.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S242269AbiAXImY (ORCPT ); Mon, 24 Jan 2022 03:42:24 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1643013744; x=1674549744; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=VnPfKu67JpoqD34YR6ej2Xei5mq8EIJy+6OGhLkBtXE=; b=hWtRZJkLFxaUb4ZlUQD4G9RmI50lHD9tHCEe1APNmh7jFE1mEqbPzhjC nx1ZtMt3cE5aFChCZe5eQelAyAfKUGn0Euw8YLyp6pwvageFnR4si01bp ZU9ziftgae+7TuqF9yXeAMfmF5a7T3Y3FJNXjamr0SXa+tU1t6ogamF8E nrf/HrZHUazoP5bmgMlB9Vcs884eKMAj4svWK7uXBnPBVFXzza7BBYokD I6E8U5uwLXR0jtFlaKngQOOTCPWfMGNQEg55BUkTmjiOiRG35Zs819kiv RSfDwNeZRaN+slBIqWe5jaBaz3ERlVeA59evonzWP6eIRse9e1nScPVNP A==; X-IronPort-AV: E=McAfee;i="6200,9189,10236"; a="245778388" X-IronPort-AV: E=Sophos;i="5.88,311,1635231600"; d="scan'208";a="245778388" Received: from orsmga004.jf.intel.com ([10.7.209.38]) by orsmga102.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 24 Jan 2022 00:42:23 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.88,311,1635231600"; d="scan'208";a="627417059" Received: from ahunter-desktop.fi.intel.com ([10.237.72.92]) by orsmga004.jf.intel.com with ESMTP; 24 Jan 2022 00:42:20 -0800 From: Adrian Hunter To: Arnaldo Carvalho de Melo Cc: Jiri Olsa , Alexander Shishkin , Andi Kleen , linux-kernel@vger.kernel.org Subject: [PATCH 08/25] perf intel-pt: decoder: Add MODE.Exec IFLAG processing Date: Mon, 24 Jan 2022 10:41:44 +0200 Message-Id: <20220124084201.2699795-9-adrian.hunter@intel.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220124084201.2699795-1-adrian.hunter@intel.com> References: <20220124084201.2699795-1-adrian.hunter@intel.com> MIME-Version: 1.0 Organization: Intel Finland Oy, Registered Address: PL 281, 00181 Helsinki, Business Identity Code: 0357606 - 4, Domiciled in Helsinki Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" As of Intel SDM (https://www.intel.com/sdm) version 076, there is a new Intel PT feature called Event Trace which adds a bit to the existing MODE.Exec packet to record the interrupt flag. Previously, the MODE.Exec packet did not generate any events, so the new processing required is practically the same as a new packet. Signed-off-by: Adrian Hunter --- .../util/intel-pt-decoder/intel-pt-decoder.c | 129 ++++++++++++++++-- .../util/intel-pt-decoder/intel-pt-decoder.h | 4 + 2 files changed, 121 insertions(+), 12 deletions(-) diff --git a/tools/perf/util/intel-pt-decoder/intel-pt-decoder.c b/tools/pe= rf/util/intel-pt-decoder/intel-pt-decoder.c index 1a39119706d6..e1d8f7504cbe 100644 --- a/tools/perf/util/intel-pt-decoder/intel-pt-decoder.c +++ b/tools/perf/util/intel-pt-decoder/intel-pt-decoder.c @@ -144,6 +144,8 @@ struct intel_pt_decoder { bool vm_tm_corr_continuous; bool nr; bool next_nr; + bool iflag; + bool next_iflag; enum intel_pt_param_flags flags; uint64_t pos; uint64_t last_ip; @@ -215,6 +217,7 @@ struct intel_pt_decoder { bool set_fup_bep; bool set_fup_cfe_ip; bool set_fup_cfe; + bool set_fup_mode_exec; bool sample_cyc; unsigned int fup_tx_flags; unsigned int tx_flags; @@ -1102,6 +1105,52 @@ static void intel_pt_sample_insn(struct intel_pt_dec= oder *decoder) decoder->state.type |=3D INTEL_PT_INSTRUCTION; } =20 +/* + * Sample FUP instruction at the same time as reporting the FUP event, so = the + * instruction sample gets the same flags as the FUP event. + */ +static void intel_pt_sample_fup_insn(struct intel_pt_decoder *decoder) +{ + struct intel_pt_insn intel_pt_insn; + uint64_t max_insn_cnt, insn_cnt =3D 0; + int err; + + decoder->state.insn_op =3D INTEL_PT_OP_OTHER; + decoder->state.insn_len =3D 0; + + if (!decoder->branch_enable || !decoder->pge || decoder->hop || + decoder->ip !=3D decoder->last_ip) + return; + + if (!decoder->mtc_insn) + decoder->mtc_insn =3D true; + + max_insn_cnt =3D intel_pt_next_sample(decoder); + if (max_insn_cnt !=3D 1) + return; + + err =3D decoder->walk_insn(&intel_pt_insn, &insn_cnt, &decoder->ip, + 0, max_insn_cnt, decoder->data); + /* Ignore error, it will be reported next walk anyway */ + if (err) + return; + + if (intel_pt_insn.branch !=3D INTEL_PT_BR_NO_BRANCH) { + intel_pt_log_at("ERROR: Unexpected branch at FUP instruction", decoder->= ip); + return; + } + + decoder->tot_insn_cnt +=3D insn_cnt; + decoder->timestamp_insn_cnt +=3D insn_cnt; + decoder->sample_insn_cnt +=3D insn_cnt; + decoder->period_insn_cnt +=3D insn_cnt; + + intel_pt_sample_insn(decoder); + + decoder->state.type |=3D INTEL_PT_INSTRUCTION; + decoder->ip +=3D intel_pt_insn.length; +} + static int intel_pt_walk_insn(struct intel_pt_decoder *decoder, struct intel_pt_insn *intel_pt_insn, uint64_t ip) { @@ -1211,6 +1260,39 @@ static int intel_pt_walk_insn(struct intel_pt_decode= r *decoder, return err; } =20 +static void intel_pt_mode_exec_status(struct intel_pt_decoder *decoder) +{ + bool iflag =3D decoder->packet.count & INTEL_PT_IFLAG; + + decoder->exec_mode =3D decoder->packet.payload; + decoder->iflag =3D iflag; + decoder->next_iflag =3D iflag; + decoder->state.from_iflag =3D iflag; + decoder->state.to_iflag =3D iflag; +} + +static void intel_pt_mode_exec(struct intel_pt_decoder *decoder) +{ + bool iflag =3D decoder->packet.count & INTEL_PT_IFLAG; + + decoder->exec_mode =3D decoder->packet.payload; + decoder->next_iflag =3D iflag; +} + +static void intel_pt_sample_iflag(struct intel_pt_decoder *decoder) +{ + decoder->state.type |=3D INTEL_PT_IFLAG_CHG; + decoder->state.from_iflag =3D decoder->iflag; + decoder->state.to_iflag =3D decoder->next_iflag; + decoder->iflag =3D decoder->next_iflag; +} + +static void intel_pt_sample_iflag_chg(struct intel_pt_decoder *decoder) +{ + if (decoder->iflag !=3D decoder->next_iflag) + intel_pt_sample_iflag(decoder); +} + static void intel_pt_clear_fup_event(struct intel_pt_decoder *decoder) { decoder->set_fup_tx_flags =3D false; @@ -1222,11 +1304,14 @@ static void intel_pt_clear_fup_event(struct intel_p= t_decoder *decoder) decoder->set_fup_cfe_ip =3D false; decoder->set_fup_cfe =3D false; decoder->evd_cnt =3D 0; + decoder->set_fup_mode_exec =3D false; + decoder->iflag =3D decoder->next_iflag; } =20 -static bool intel_pt_fup_event(struct intel_pt_decoder *decoder) +static bool intel_pt_fup_event(struct intel_pt_decoder *decoder, bool no_t= ip) { enum intel_pt_sample_type type =3D decoder->state.type; + bool sample_fup_insn =3D false; bool ret =3D false; =20 decoder->state.type &=3D ~INTEL_PT_BRANCH; @@ -1248,6 +1333,12 @@ static bool intel_pt_fup_event(struct intel_pt_decod= er *decoder) decoder->state.flags |=3D INTEL_PT_FUP_IP; ret =3D true; } + if (decoder->set_fup_mode_exec) { + decoder->set_fup_mode_exec =3D false; + intel_pt_sample_iflag(decoder); + sample_fup_insn =3D no_tip; + ret =3D true; + } if (decoder->set_fup_tx_flags) { decoder->set_fup_tx_flags =3D false; decoder->tx_flags =3D decoder->fup_tx_flags; @@ -1304,6 +1395,8 @@ static bool intel_pt_fup_event(struct intel_pt_decode= r *decoder) if (ret) { decoder->state.from_ip =3D decoder->ip; decoder->state.to_ip =3D 0; + if (sample_fup_insn) + intel_pt_sample_fup_insn(decoder); } else { decoder->state.type =3D type; } @@ -1336,7 +1429,7 @@ static int intel_pt_walk_fup(struct intel_pt_decoder = *decoder) bool no_tip =3D decoder->pkt_state !=3D INTEL_PT_STATE_FUP; =20 decoder->pkt_state =3D INTEL_PT_STATE_IN_SYNC; - if (intel_pt_fup_event(decoder) && no_tip) + if (intel_pt_fup_event(decoder, no_tip) && no_tip) return 0; return -EAGAIN; } @@ -1388,6 +1481,7 @@ static int intel_pt_walk_tip(struct intel_pt_decoder = *decoder) return err; =20 intel_pt_update_nr(decoder); + intel_pt_sample_iflag_chg(decoder); =20 if (intel_pt_insn.branch =3D=3D INTEL_PT_BR_INDIRECT) { if (decoder->pkt_state =3D=3D INTEL_PT_STATE_TIP_PGD) { @@ -1502,6 +1596,7 @@ static int intel_pt_walk_tnt(struct intel_pt_decoder = *decoder) decoder->state.to_ip =3D decoder->last_ip; decoder->ip =3D decoder->last_ip; intel_pt_update_nr(decoder); + intel_pt_sample_iflag_chg(decoder); return 0; } =20 @@ -1944,7 +2039,7 @@ static int intel_pt_walk_psbend(struct intel_pt_decod= er *decoder) break; =20 case INTEL_PT_MODE_EXEC: - decoder->exec_mode =3D decoder->packet.payload; + intel_pt_mode_exec_status(decoder); break; =20 case INTEL_PT_PIP: @@ -2078,6 +2173,7 @@ static int intel_pt_walk_fup_tip(struct intel_pt_deco= der *decoder) decoder->state.to_ip =3D decoder->ip; } intel_pt_update_nr(decoder); + intel_pt_sample_iflag_chg(decoder); return 0; =20 case INTEL_PT_PIP: @@ -2095,7 +2191,7 @@ static int intel_pt_walk_fup_tip(struct intel_pt_deco= der *decoder) break; =20 case INTEL_PT_MODE_EXEC: - decoder->exec_mode =3D decoder->packet.payload; + intel_pt_mode_exec(decoder); break; =20 case INTEL_PT_VMCS: @@ -2777,6 +2873,7 @@ static int intel_pt_hop_trace(struct intel_pt_decoder= *decoder, bool *no_tip, in decoder->state.from_ip =3D decoder->ip; decoder->state.to_ip =3D 0; intel_pt_update_nr(decoder); + intel_pt_sample_iflag_chg(decoder); return HOP_RETURN; =20 case INTEL_PT_FUP: @@ -2791,10 +2888,10 @@ static int intel_pt_hop_trace(struct intel_pt_decod= er *decoder, bool *no_tip, in decoder->state.type =3D INTEL_PT_INSTRUCTION; decoder->state.from_ip =3D decoder->ip; decoder->state.to_ip =3D 0; - intel_pt_fup_event(decoder); + intel_pt_fup_event(decoder, *no_tip); return HOP_RETURN; } - intel_pt_fup_event(decoder); + intel_pt_fup_event(decoder, *no_tip); decoder->state.type |=3D INTEL_PT_INSTRUCTION | INTEL_PT_BRANCH; *err =3D intel_pt_walk_fup_tip(decoder); if (!*err && decoder->state.to_ip) @@ -3058,6 +3155,7 @@ static int intel_pt_walk_trace(struct intel_pt_decode= r *decoder) decoder->pos); break; } + intel_pt_sample_iflag_chg(decoder); intel_pt_set_ip(decoder); decoder->state.from_ip =3D 0; decoder->state.to_ip =3D decoder->ip; @@ -3090,7 +3188,7 @@ static int intel_pt_walk_trace(struct intel_pt_decode= r *decoder) intel_pt_set_last_ip(decoder); if (!decoder->branch_enable || !decoder->pge) { decoder->ip =3D decoder->last_ip; - if (intel_pt_fup_event(decoder)) + if (intel_pt_fup_event(decoder, no_tip)) return 0; no_tip =3D false; break; @@ -3172,8 +3270,15 @@ static int intel_pt_walk_trace(struct intel_pt_decod= er *decoder) break; =20 case INTEL_PT_MODE_EXEC: - decoder->exec_mode =3D decoder->packet.payload; - break; + intel_pt_mode_exec(decoder); + err =3D intel_pt_get_next_packet(decoder); + if (err) + return err; + if (decoder->packet.type =3D=3D INTEL_PT_FUP) { + decoder->set_fup_mode_exec =3D true; + no_tip =3D true; + } + goto next; =20 case INTEL_PT_MODE_TSX: /* MODE_TSX need not be followed by FUP */ @@ -3291,7 +3396,7 @@ static int intel_pt_walk_trace(struct intel_pt_decode= r *decoder) decoder->fup_cfe_pkt =3D decoder->packet; decoder->set_fup_cfe =3D true; if (!decoder->pge) { - intel_pt_fup_event(decoder); + intel_pt_fup_event(decoder, true); return 0; } break; @@ -3403,7 +3508,7 @@ static int intel_pt_walk_psb(struct intel_pt_decoder = *decoder) break; =20 case INTEL_PT_MODE_EXEC: - decoder->exec_mode =3D decoder->packet.payload; + intel_pt_mode_exec_status(decoder); break; =20 case INTEL_PT_MODE_TSX: @@ -3522,7 +3627,7 @@ static int intel_pt_walk_to_ip(struct intel_pt_decode= r *decoder) break; =20 case INTEL_PT_MODE_EXEC: - decoder->exec_mode =3D decoder->packet.payload; + intel_pt_mode_exec_status(decoder); break; =20 case INTEL_PT_MODE_TSX: diff --git a/tools/perf/util/intel-pt-decoder/intel-pt-decoder.h b/tools/pe= rf/util/intel-pt-decoder/intel-pt-decoder.h index 59ef4b41ec67..efb2cb3ae0ca 100644 --- a/tools/perf/util/intel-pt-decoder/intel-pt-decoder.h +++ b/tools/perf/util/intel-pt-decoder/intel-pt-decoder.h @@ -17,6 +17,7 @@ =20 #define INTEL_PT_IN_TX (1 << 0) #define INTEL_PT_ABORT_TX (1 << 1) +#define INTEL_PT_IFLAG (1 << 2) #define INTEL_PT_ASYNC (1 << 2) #define INTEL_PT_FUP_IP (1 << 3) #define INTEL_PT_SAMPLE_IPC (1 << 4) @@ -36,6 +37,7 @@ enum intel_pt_sample_type { INTEL_PT_BLK_ITEMS =3D 1 << 11, INTEL_PT_PSB_EVT =3D 1 << 12, INTEL_PT_EVT =3D 1 << 13, + INTEL_PT_IFLAG_CHG =3D 1 << 14, }; =20 enum intel_pt_period_type { @@ -226,6 +228,8 @@ struct intel_pt_state { enum intel_pt_sample_type type; bool from_nr; bool to_nr; + bool from_iflag; + bool to_iflag; int err; uint64_t from_ip; uint64_t to_ip; --=20 2.25.1 From nobody Tue Jun 30 06:32:16 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id AC6BCC433F5 for ; Mon, 24 Jan 2022 08:42:36 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S242240AbiAXImd (ORCPT ); Mon, 24 Jan 2022 03:42:33 -0500 Received: from mga09.intel.com ([134.134.136.24]:62581 "EHLO mga09.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S242283AbiAXImZ (ORCPT ); Mon, 24 Jan 2022 03:42:25 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1643013745; x=1674549745; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=0BBOhXq0bK7bpMu2jJU8HZlBHfIroQqBAKbNWe3rJsA=; b=E+02FlsR5S32S488EMvgZ5M/IPfb9L4TEyLOy3CAnSM1nA8iowSr8np/ kkXTFJeOsQ5joXhprOJchmry6cxNdlW7xQjltc3ItcMe0bUFPNW0Iqvdc Bh2c6cwx7vrfISNgWedY22rvmXfj5s6D6jwnCqHS3QWr7/m0hqe+2Vvc0 QCOREKP4N7VkSI1/m4miU9KAJtmZnbrDRkakVwTDJQTjj8pOu42zQ55lI AW3zD0mX6PSCDWUBopfnv6jVlwG8Zl4PX3jNYCjJtNWhcX8Wb+t4uAoGV s5eJ2aespDOUdLRcZfHLGfP/TEHK2cWdciGWDVF6t8Cjr6/KNWkoSjkIR w==; X-IronPort-AV: E=McAfee;i="6200,9189,10236"; a="245778397" X-IronPort-AV: E=Sophos;i="5.88,311,1635231600"; d="scan'208";a="245778397" Received: from orsmga004.jf.intel.com ([10.7.209.38]) by orsmga102.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 24 Jan 2022 00:42:24 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.88,311,1635231600"; d="scan'208";a="627417081" Received: from ahunter-desktop.fi.intel.com ([10.237.72.92]) by orsmga004.jf.intel.com with ESMTP; 24 Jan 2022 00:42:22 -0800 From: Adrian Hunter To: Arnaldo Carvalho de Melo Cc: Jiri Olsa , Alexander Shishkin , Andi Kleen , linux-kernel@vger.kernel.org Subject: [PATCH 09/25] perf tools: Define Intel PT CFE / EVD event Date: Mon, 24 Jan 2022 10:41:45 +0200 Message-Id: <20220124084201.2699795-10-adrian.hunter@intel.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220124084201.2699795-1-adrian.hunter@intel.com> References: <20220124084201.2699795-1-adrian.hunter@intel.com> MIME-Version: 1.0 Organization: Intel Finland Oy, Registered Address: PL 281, 00181 Helsinki, Business Identity Code: 0357606 - 4, Domiciled in Helsinki Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Similar to other Intel PT synth events, define structures to hold CFE and EVD data. Signed-off-by: Adrian Hunter --- tools/perf/util/event.h | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/tools/perf/util/event.h b/tools/perf/util/event.h index c59331eea1d9..27ea7bd93df5 100644 --- a/tools/perf/util/event.h +++ b/tools/perf/util/event.h @@ -182,6 +182,7 @@ enum perf_synth_id { PERF_SYNTH_INTEL_PWRX, PERF_SYNTH_INTEL_CBR, PERF_SYNTH_INTEL_PSB, + PERF_SYNTH_INTEL_EVT, }; =20 /* @@ -280,6 +281,33 @@ struct perf_synth_intel_psb { u64 offset; }; =20 +struct perf_synth_intel_evd { + union { + struct { + u8 evd_type; + u8 reserved[7]; + }; + u64 et; + }; + u64 payload; +}; + +/* Intel PT Event Trace */ +struct perf_synth_intel_evt { + u32 padding; + union { + struct { + u32 type : 5, + reserved : 2, + ip : 1, + vector : 8, + evd_cnt : 16; + }; + u32 cfe; + }; + struct perf_synth_intel_evd evd[]; +}; + /* * raw_data is always 4 bytes from an 8-byte boundary, so subtract 4 to get * 8-byte alignment. --=20 2.25.1 From nobody Tue Jun 30 06:32:16 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 5FBE6C433F5 for ; Mon, 24 Jan 2022 08:44:34 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232906AbiAXIod (ORCPT ); Mon, 24 Jan 2022 03:44:33 -0500 Received: from mga09.intel.com ([134.134.136.24]:62581 "EHLO mga09.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S242266AbiAXIm1 (ORCPT ); Mon, 24 Jan 2022 03:42:27 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1643013747; x=1674549747; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=Y+XqUkFbrC3xNp4+likfQxgrMPkd8q8VKsUjVkQGOV8=; b=TqRf4hBS/7yN+SPj0AhyuZblvIRiS1EibLQPZuTnFX05oqL2FqD1WuEb ZyDmjQ3D78GPu0kFjgcB2fIZYYVmV/JiV05jOl870ZOUNnWJExV8CLvRy k01aLilvDAir1EBsme46A7lXdhpQCxL2ZflEd8Hy41H68vUaPc0RFK7nN iyWsRRvJDo1GIqUegT5y8jvVEIX+VWcTXMDqjtnSUOI9Aj2BwtcGlQRth FvAq7VVDOJaYYEHWhib1HAuE/SjsGLEonAWOv6cfjDxaS7boGdY/6Qu1d /wH1rIY8R/YoiAGc1F7Ein37fnNnxzGrW9p/qRtvu4cDXs+8N/ietktr+ w==; X-IronPort-AV: E=McAfee;i="6200,9189,10236"; a="245778409" X-IronPort-AV: E=Sophos;i="5.88,311,1635231600"; d="scan'208";a="245778409" Received: from orsmga004.jf.intel.com ([10.7.209.38]) by orsmga102.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 24 Jan 2022 00:42:27 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.88,311,1635231600"; d="scan'208";a="627417093" Received: from ahunter-desktop.fi.intel.com ([10.237.72.92]) by orsmga004.jf.intel.com with ESMTP; 24 Jan 2022 00:42:25 -0800 From: Adrian Hunter To: Arnaldo Carvalho de Melo Cc: Jiri Olsa , Alexander Shishkin , Andi Kleen , linux-kernel@vger.kernel.org Subject: [PATCH 10/25] perf tools: Define Intel PT iflag synthesized event Date: Mon, 24 Jan 2022 10:41:46 +0200 Message-Id: <20220124084201.2699795-11-adrian.hunter@intel.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220124084201.2699795-1-adrian.hunter@intel.com> References: <20220124084201.2699795-1-adrian.hunter@intel.com> MIME-Version: 1.0 Organization: Intel Finland Oy, Registered Address: PL 281, 00181 Helsinki, Business Identity Code: 0357606 - 4, Domiciled in Helsinki Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Similar to other Intel PT synth events, define a structure to hold information about a change to the interrupt flag. Signed-off-by: Adrian Hunter --- tools/perf/util/event.h | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/tools/perf/util/event.h b/tools/perf/util/event.h index 27ea7bd93df5..9354619953e9 100644 --- a/tools/perf/util/event.h +++ b/tools/perf/util/event.h @@ -183,6 +183,7 @@ enum perf_synth_id { PERF_SYNTH_INTEL_CBR, PERF_SYNTH_INTEL_PSB, PERF_SYNTH_INTEL_EVT, + PERF_SYNTH_INTEL_IFLAG_CHG, }; =20 /* @@ -308,6 +309,18 @@ struct perf_synth_intel_evt { struct perf_synth_intel_evd evd[]; }; =20 +struct perf_synth_intel_iflag_chg { + u32 padding; + union { + struct { + u32 iflag : 1, + via_branch : 1; + }; + u32 flags; + }; + u64 branch_ip; /* If via_branch */ +}; + /* * raw_data is always 4 bytes from an 8-byte boundary, so subtract 4 to get * 8-byte alignment. --=20 2.25.1 From nobody Tue Jun 30 06:32:16 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id E4429C433F5 for ; Mon, 24 Jan 2022 08:42:48 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S242321AbiAXIms (ORCPT ); Mon, 24 Jan 2022 03:42:48 -0500 Received: from mga09.intel.com ([134.134.136.24]:62581 "EHLO mga09.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S242251AbiAXIm3 (ORCPT ); Mon, 24 Jan 2022 03:42:29 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1643013749; x=1674549749; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=VqUTbbq8r4FFEUUEoQTcvjGJrwDHYMSfs+gNUrUb5jo=; b=MPo6ZxObyyaXh5Dz9cTYS75lknFjEY87Os5U36q/Yd3575JzwAxrjAfl S7EDa1ufmc1X4DHqBHdrlqk3ZJKV5xWRWZ0tXIvQClgjXeMYx1vZf0fRi EApfCNjF++iz6gFDkcmmP7aErqUGWkdjf9mcRhXYOfXYbqj+Ykj94BIpc I5/oL+Zc7p/i+IJhcXeI1qRE+9ZtjgzZVVIUmESGjiYj2cdSh8Bz7L+8f ocXuOL7TLndP6nThy678ASTHEtXlaIMmqfI/O0Cuf8dAaNPf9z+yn3/na nFD6P5TVnFzvZ+ynb1oxygnVxTG/6Oc0cq15XEA1SmHETFeBTl9qJsBfT A==; X-IronPort-AV: E=McAfee;i="6200,9189,10236"; a="245778423" X-IronPort-AV: E=Sophos;i="5.88,311,1635231600"; d="scan'208";a="245778423" Received: from orsmga004.jf.intel.com ([10.7.209.38]) by orsmga102.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 24 Jan 2022 00:42:29 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.88,311,1635231600"; d="scan'208";a="627417110" Received: from ahunter-desktop.fi.intel.com ([10.237.72.92]) by orsmga004.jf.intel.com with ESMTP; 24 Jan 2022 00:42:27 -0800 From: Adrian Hunter To: Arnaldo Carvalho de Melo Cc: Jiri Olsa , Alexander Shishkin , Andi Kleen , linux-kernel@vger.kernel.org Subject: [PATCH 11/25] perf tools: Define new D and t flags Date: Mon, 24 Jan 2022 10:41:47 +0200 Message-Id: <20220124084201.2699795-12-adrian.hunter@intel.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220124084201.2699795-1-adrian.hunter@intel.com> References: <20220124084201.2699795-1-adrian.hunter@intel.com> MIME-Version: 1.0 Organization: Intel Finland Oy, Registered Address: PL 281, 00181 Helsinki, Business Identity Code: 0357606 - 4, Domiciled in Helsinki Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Define 2 new flags to represent: - when interrupts are disabled (D) - when interrupt disabling toggles (t) This gives 4 combinations: no flag, interrupts enabled t interrupts were enabled but become disabled D interrupts are disabled Dt interrupts were disabled but become enabled Signed-off-by: Adrian Hunter --- tools/perf/util/event.h | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/tools/perf/util/event.h b/tools/perf/util/event.h index 9354619953e9..320cbcd5b902 100644 --- a/tools/perf/util/event.h +++ b/tools/perf/util/event.h @@ -101,9 +101,11 @@ enum { PERF_IP_FLAG_IN_TX =3D 1ULL << 10, PERF_IP_FLAG_VMENTRY =3D 1ULL << 11, PERF_IP_FLAG_VMEXIT =3D 1ULL << 12, + PERF_IP_FLAG_INTR_DISABLE =3D 1ULL << 13, + PERF_IP_FLAG_INTR_TOGGLE =3D 1ULL << 14, }; =20 -#define PERF_IP_FLAG_CHARS "bcrosyiABExgh" +#define PERF_IP_FLAG_CHARS "bcrosyiABExghDt" =20 #define PERF_BRANCH_MASK (\ PERF_IP_FLAG_BRANCH |\ --=20 2.25.1 From nobody Tue Jun 30 06:32:16 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 87543C433EF for ; Mon, 24 Jan 2022 08:42:44 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S242314AbiAXIml (ORCPT ); Mon, 24 Jan 2022 03:42:41 -0500 Received: from mga09.intel.com ([134.134.136.24]:62581 "EHLO mga09.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S242305AbiAXImb (ORCPT ); Mon, 24 Jan 2022 03:42:31 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1643013751; x=1674549751; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=4LyUL4N9bPfNWdHsrAxUZNbbJy6F+CZLUfTNd2mpc9g=; b=RgmkSuhNZyv21uyXOPvR2IpLHR0LpC+v67ag4CWUWECxCl6owbFhdkWQ oJn45VWwuUBOZ9zoh9VaBOJmlhWFjflXU5rrZaz3iO8h3FO+JHr+Exe18 KX7vZ3oITwulPOSk4Cg5C8aunv9sWXDVoOBccVAH2tnclSYK0pTIWLCLe DC5M/CrRM0SruS0VhEQLl9CQaXK8LkhR2YgX9MpfTowlebwde59mSlPlD xq++YSb7RZUUGfOFt3i8AVrHk6BXkNHRqzRG4DUZ3EnZ/p4IQzUfVPOGz mnfzUiMJ27hsWYks+AqC2ScgiHFMK9UFxrTsl80snpnFpXBPy1YZabmbu w==; X-IronPort-AV: E=McAfee;i="6200,9189,10236"; a="245778428" X-IronPort-AV: E=Sophos;i="5.88,311,1635231600"; d="scan'208";a="245778428" Received: from orsmga004.jf.intel.com ([10.7.209.38]) by orsmga102.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 24 Jan 2022 00:42:31 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.88,311,1635231600"; d="scan'208";a="627417123" Received: from ahunter-desktop.fi.intel.com ([10.237.72.92]) by orsmga004.jf.intel.com with ESMTP; 24 Jan 2022 00:42:29 -0800 From: Adrian Hunter To: Arnaldo Carvalho de Melo Cc: Jiri Olsa , Alexander Shishkin , Andi Kleen , linux-kernel@vger.kernel.org Subject: [PATCH 12/25] perf auxtrace: Add itrace option "I" Date: Mon, 24 Jan 2022 10:41:48 +0200 Message-Id: <20220124084201.2699795-13-adrian.hunter@intel.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220124084201.2699795-1-adrian.hunter@intel.com> References: <20220124084201.2699795-1-adrian.hunter@intel.com> MIME-Version: 1.0 Organization: Intel Finland Oy, Registered Address: PL 281, 00181 Helsinki, Business Identity Code: 0357606 - 4, Domiciled in Helsinki Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Add itrace option "I" to synthesize interrupt or similar (asynchronous) events. This will be used for Intel PT Event Trace events. Signed-off-by: Adrian Hunter --- tools/perf/Documentation/itrace.txt | 2 ++ tools/perf/util/auxtrace.c | 4 ++++ tools/perf/util/auxtrace.h | 4 ++++ 3 files changed, 10 insertions(+) diff --git a/tools/perf/Documentation/itrace.txt b/tools/perf/Documentation= /itrace.txt index c52755481e2f..6b189669c450 100644 --- a/tools/perf/Documentation/itrace.txt +++ b/tools/perf/Documentation/itrace.txt @@ -7,6 +7,8 @@ p synthesize power events (incl. PSB events for Intel PT) o synthesize other events recorded due to the use of aux-output (refer to perf record) + I synthesize interrupt or similar (asynchronous) events + (e.g. Intel PT Event Trace) e synthesize error events d create a debug log f synthesize first level cache events diff --git a/tools/perf/util/auxtrace.c b/tools/perf/util/auxtrace.c index 825336304a37..9e48652662d4 100644 --- a/tools/perf/util/auxtrace.c +++ b/tools/perf/util/auxtrace.c @@ -1333,6 +1333,7 @@ void itrace_synth_opts__set_default(struct itrace_syn= th_opts *synth_opts, synth_opts->ptwrites =3D true; synth_opts->pwr_events =3D true; synth_opts->other_events =3D true; + synth_opts->intr_events =3D true; synth_opts->errors =3D true; synth_opts->flc =3D true; synth_opts->llc =3D true; @@ -1479,6 +1480,9 @@ int itrace_do_parse_synth_opts(struct itrace_synth_op= ts *synth_opts, case 'o': synth_opts->other_events =3D true; break; + case 'I': + synth_opts->intr_events =3D true; + break; case 'e': synth_opts->errors =3D true; if (get_flags(&p, &synth_opts->error_plus_flags, diff --git a/tools/perf/util/auxtrace.h b/tools/perf/util/auxtrace.h index 19910b9011f3..dc38b6f57232 100644 --- a/tools/perf/util/auxtrace.h +++ b/tools/perf/util/auxtrace.h @@ -76,6 +76,7 @@ enum itrace_period_type { * @pwr_events: whether to synthesize power events * @other_events: whether to synthesize other events recorded due to the u= se of * aux_output + * @intr_events: whether to synthesize interrupt events * @errors: whether to synthesize decoder error events * @dont_decode: whether to skip decoding entirely * @log: write a decoding log @@ -120,6 +121,7 @@ struct itrace_synth_opts { bool ptwrites; bool pwr_events; bool other_events; + bool intr_events; bool errors; bool dont_decode; bool log; @@ -636,6 +638,8 @@ bool auxtrace__evsel_is_auxtrace(struct perf_session *s= ession, " p: synthesize power events\n" \ " o: synthesize other events recorded due to the use\n" \ " of aux-output (refer to perf record)\n" \ +" I: synthesize interrupt or similar (asynchronous) events\n" \ +" (e.g. Intel PT Event Trace)\n" \ " e[flags]: synthesize error events\n" \ " each flag must be preceded by + or -\n" \ " error flags are: o (overflow)\n" \ --=20 2.25.1 From nobody Tue Jun 30 06:32:16 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id A70B9C433F5 for ; Mon, 24 Jan 2022 08:42:52 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S242338AbiAXImv (ORCPT ); Mon, 24 Jan 2022 03:42:51 -0500 Received: from mga09.intel.com ([134.134.136.24]:62581 "EHLO mga09.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S242280AbiAXImd (ORCPT ); Mon, 24 Jan 2022 03:42:33 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1643013753; x=1674549753; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=80FwOptK+NyvzMxAvsXk1UZZR379CjXnJm/8N8Ci5Po=; b=kBb80V6AiLWg/pXbGV27aN4n+tNEMrrqx2hcnlZq9N2Iq/NlpYu3JyFC TDahv6xDUgAOpAMvJX/AmPaThOLBZNwhLM5Q2zWMxgU40qfWmN1/0hluQ 93W3z2KmgV5MGrzwEeAmpSAXuVvjkuH4imTevY7ey/7rHWbQO3Fkjmxgf f5Ucd58YchZS0HIOTA0d4ptB4FfPeSSP5rxXKX2kBICd/uT7AHvbpWdk9 dOAeat/pdOXz+hXKErw8dZMpwv9DH5lQYY7GnYeIWY7QXYYgInt6aMjnx WSyWgSbnA647RE9PJDe/GSCEyN3ARjDJKJLATNdRRCL0x8u9s2ohbm4KZ A==; X-IronPort-AV: E=McAfee;i="6200,9189,10236"; a="245778434" X-IronPort-AV: E=Sophos;i="5.88,311,1635231600"; d="scan'208";a="245778434" Received: from orsmga004.jf.intel.com ([10.7.209.38]) by orsmga102.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 24 Jan 2022 00:42:33 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.88,311,1635231600"; d="scan'208";a="627417135" Received: from ahunter-desktop.fi.intel.com ([10.237.72.92]) by orsmga004.jf.intel.com with ESMTP; 24 Jan 2022 00:42:31 -0800 From: Adrian Hunter To: Arnaldo Carvalho de Melo Cc: Jiri Olsa , Alexander Shishkin , Andi Kleen , linux-kernel@vger.kernel.org Subject: [PATCH 13/25] perf intel-pt: Record Event Trace capability flag Date: Mon, 24 Jan 2022 10:41:49 +0200 Message-Id: <20220124084201.2699795-14-adrian.hunter@intel.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220124084201.2699795-1-adrian.hunter@intel.com> References: <20220124084201.2699795-1-adrian.hunter@intel.com> MIME-Version: 1.0 Organization: Intel Finland Oy, Registered Address: PL 281, 00181 Helsinki, Business Identity Code: 0357606 - 4, Domiciled in Helsinki Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" The change to the MODE.Exec packet means processing must distinguish between the old and new cases. Record the Event Trace capability flag to make that possible. Signed-off-by: Adrian Hunter --- tools/perf/arch/x86/util/intel-pt.c | 7 +++++++ tools/perf/util/intel-pt.c | 10 +++++++++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/tools/perf/arch/x86/util/intel-pt.c b/tools/perf/arch/x86/util= /intel-pt.c index 6df0dc00d73a..8c31578d6f4a 100644 --- a/tools/perf/arch/x86/util/intel-pt.c +++ b/tools/perf/arch/x86/util/intel-pt.c @@ -306,6 +306,7 @@ intel_pt_info_priv_size(struct auxtrace_record *itr, st= ruct evlist *evlist) =20 ptr->priv_size =3D (INTEL_PT_AUXTRACE_PRIV_MAX * sizeof(u64)) + intel_pt_filter_bytes(filter); + ptr->priv_size +=3D sizeof(u64); /* Cap Event Trace */ =20 return ptr->priv_size; } @@ -335,6 +336,7 @@ static int intel_pt_info_fill(struct auxtrace_record *i= tr, unsigned long max_non_turbo_ratio; size_t filter_str_len; const char *filter; + int event_trace; __u64 *info; int err; =20 @@ -357,6 +359,9 @@ static int intel_pt_info_fill(struct auxtrace_record *i= tr, if (perf_pmu__scan_file(intel_pt_pmu, "max_nonturbo_ratio", "%lu", &max_non_turbo_ratio) !=3D 1) max_non_turbo_ratio =3D 0; + if (perf_pmu__scan_file(intel_pt_pmu, "caps/event_trace", + "%d", &event_trace) !=3D 1) + event_trace =3D 0; =20 filter =3D intel_pt_find_filter(session->evlist, ptr->intel_pt_pmu); filter_str_len =3D filter ? strlen(filter) : 0; @@ -407,6 +412,8 @@ static int intel_pt_info_fill(struct auxtrace_record *i= tr, info +=3D len >> 3; } =20 + *info++ =3D event_trace; + return 0; } =20 diff --git a/tools/perf/util/intel-pt.c b/tools/perf/util/intel-pt.c index f3e5c2dfee25..23cb272e3d03 100644 --- a/tools/perf/util/intel-pt.c +++ b/tools/perf/util/intel-pt.c @@ -75,6 +75,7 @@ struct intel_pt { bool mispred_all; bool use_thread_stack; bool callstack; + bool cap_event_trace; unsigned int br_stack_sz; unsigned int br_stack_sz_plus; int have_sched_switch; @@ -3795,7 +3796,7 @@ int intel_pt_process_auxtrace_info(union perf_event *= event, } =20 info =3D &auxtrace_info->priv[INTEL_PT_FILTER_STR_LEN] + 1; - info_end =3D (void *)info + auxtrace_info->header.size; + info_end =3D (void *)auxtrace_info + auxtrace_info->header.size; =20 if (intel_pt_has(auxtrace_info, INTEL_PT_FILTER_STR_LEN)) { size_t len; @@ -3834,6 +3835,13 @@ int intel_pt_process_auxtrace_info(union perf_event = *event, intel_pt_print_info_str("Filter string", pt->filter); } =20 + if ((void *)info < info_end) { + pt->cap_event_trace =3D *info++; + if (dump_trace) + fprintf(stdout, " Cap Event Trace %d\n", + pt->cap_event_trace); + } + pt->timeless_decoding =3D intel_pt_timeless_decoding(pt); if (pt->timeless_decoding && !pt->tc.time_mult) pt->tc.time_mult =3D 1; --=20 2.25.1 From nobody Tue Jun 30 06:32:16 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 6650DC433EF for ; Mon, 24 Jan 2022 08:42:56 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S242419AbiAXImy (ORCPT ); Mon, 24 Jan 2022 03:42:54 -0500 Received: from mga09.intel.com ([134.134.136.24]:62621 "EHLO mga09.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S242303AbiAXImg (ORCPT ); Mon, 24 Jan 2022 03:42:36 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1643013756; x=1674549756; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=m/k3Yf24BGItlCOwE1O7iCZbvBiqf5oyYyQH/dJtIBI=; b=ZXwLCoN3mXMI0H3X/2TpJZoIPRNJbWhzWknGB3LVS0FNOwi36JfUEtOo nFwMxA44VlUjfyqCRzPwyv1+IdinC1vIOCoAn+QKy/MrpBfuREPDGKm3H 0HJ4iwUtFsBkt6uJV+JLTaETWvqHbFcsvQXfToDwmDxEDi6ZhbfogWDuo NCuDwlH/aar1lT85dkHQRecN1XFs9LAdcIRb7xQCQGayTaFQwgYTpXLxv Mj2DQhaIVTmPug8VY2Qn0DydClmUNnH8JQivUVelOcrCnW3ZjOV7AiReS gUYDCfueDHHqRETVDn2s2GlGqgz2VzKKAmpOMiRu4kxhB+O1Vh795V5BB Q==; X-IronPort-AV: E=McAfee;i="6200,9189,10236"; a="245778437" X-IronPort-AV: E=Sophos;i="5.88,311,1635231600"; d="scan'208";a="245778437" Received: from orsmga004.jf.intel.com ([10.7.209.38]) by orsmga102.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 24 Jan 2022 00:42:35 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.88,311,1635231600"; d="scan'208";a="627417151" Received: from ahunter-desktop.fi.intel.com ([10.237.72.92]) by orsmga004.jf.intel.com with ESMTP; 24 Jan 2022 00:42:33 -0800 From: Adrian Hunter To: Arnaldo Carvalho de Melo Cc: Jiri Olsa , Alexander Shishkin , Andi Kleen , linux-kernel@vger.kernel.org Subject: [PATCH 14/25] perf intel-pt: Synthesize CFE / EVD event Date: Mon, 24 Jan 2022 10:41:50 +0200 Message-Id: <20220124084201.2699795-15-adrian.hunter@intel.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220124084201.2699795-1-adrian.hunter@intel.com> References: <20220124084201.2699795-1-adrian.hunter@intel.com> MIME-Version: 1.0 Organization: Intel Finland Oy, Registered Address: PL 281, 00181 Helsinki, Business Identity Code: 0357606 - 4, Domiciled in Helsinki Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Synthesize an attribute event and sample events for Intel PT Event Trace events represented by CFE and EVD packets. Signed-off-by: Adrian Hunter --- tools/perf/util/intel-pt.c | 62 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) diff --git a/tools/perf/util/intel-pt.c b/tools/perf/util/intel-pt.c index 23cb272e3d03..1e07a3c03102 100644 --- a/tools/perf/util/intel-pt.c +++ b/tools/perf/util/intel-pt.c @@ -49,6 +49,7 @@ #define INTEL_PT_CFG_PASS_THRU BIT_ULL(0) #define INTEL_PT_CFG_PWR_EVT_EN BIT_ULL(4) #define INTEL_PT_CFG_BRANCH_EN BIT_ULL(13) +#define INTEL_PT_CFG_EVT_EN BIT_ULL(31) =20 struct range { u64 start; @@ -120,6 +121,9 @@ struct intel_pt { bool sample_pebs; struct evsel *pebs_evsel; =20 + u64 evt_sample_type; + u64 evt_id; + u64 tsc_bit; u64 mtc_bit; u64 mtc_freq_bits; @@ -2166,6 +2170,45 @@ static int intel_pt_synth_pebs_sample(struct intel_p= t_queue *ptq) return err; } =20 +static int intel_pt_synth_events_sample(struct intel_pt_queue *ptq) +{ + struct intel_pt *pt =3D ptq->pt; + union perf_event *event =3D ptq->event_buf; + struct perf_sample sample =3D { .ip =3D 0, }; + struct { + struct perf_synth_intel_evt cfe; + struct perf_synth_intel_evd evd[INTEL_PT_MAX_EVDS]; + } raw; + int i; + + if (intel_pt_skip_event(pt)) + return 0; + + intel_pt_prep_p_sample(pt, ptq, event, &sample); + + sample.id =3D ptq->pt->evt_id; + sample.stream_id =3D ptq->pt->evt_id; + + raw.cfe.type =3D ptq->state->cfe_type; + raw.cfe.reserved =3D 0; + raw.cfe.ip =3D !!(ptq->state->flags & INTEL_PT_FUP_IP); + raw.cfe.vector =3D ptq->state->cfe_vector; + raw.cfe.evd_cnt =3D ptq->state->evd_cnt; + + for (i =3D 0; i < ptq->state->evd_cnt; i++) { + raw.evd[i].et =3D 0; + raw.evd[i].evd_type =3D ptq->state->evd[i].type; + raw.evd[i].payload =3D ptq->state->evd[i].payload; + } + + sample.raw_size =3D perf_synth__raw_size(raw) + + ptq->state->evd_cnt * sizeof(struct perf_synth_intel_evd); + sample.raw_data =3D perf_synth__raw_data(&raw); + + return intel_pt_deliver_synth_event(pt, event, &sample, + pt->evt_sample_type); +} + static int intel_pt_synth_error(struct intel_pt *pt, int code, int cpu, pid_t pid, pid_t tid, u64 ip, u64 timestamp) { @@ -2272,6 +2315,14 @@ static int intel_pt_sample(struct intel_pt_queue *pt= q) return err; } =20 + if (pt->synth_opts.intr_events) { + if (state->type & INTEL_PT_EVT) { + err =3D intel_pt_synth_events_sample(ptq); + if (err) + return err; + } + } + if (pt->sample_pwr_events) { if (state->type & INTEL_PT_PSB_EVT) { err =3D intel_pt_synth_psb_sample(ptq); @@ -3469,6 +3520,17 @@ static int intel_pt_synth_events(struct intel_pt *pt, id +=3D 1; } =20 + if (pt->synth_opts.intr_events && (evsel->core.attr.config & INTEL_PT_CFG= _EVT_EN)) { + attr.config =3D PERF_SYNTH_INTEL_EVT; + err =3D intel_pt_synth_event(session, "evt", &attr, id); + if (err) + return err; + pt->evt_sample_type =3D attr.sample_type; + pt->evt_id =3D id; + intel_pt_set_event_name(evlist, id, "evt"); + id +=3D 1; + } + return 0; } =20 --=20 2.25.1 From nobody Tue Jun 30 06:32:16 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 355FBC433EF for ; Mon, 24 Jan 2022 08:43:04 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S242457AbiAXInD (ORCPT ); Mon, 24 Jan 2022 03:43:03 -0500 Received: from mga09.intel.com ([134.134.136.24]:62624 "EHLO mga09.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S242277AbiAXImk (ORCPT ); Mon, 24 Jan 2022 03:42:40 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1643013760; x=1674549760; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=dtfim9SEIDgnFiNewz+c+/ywOrcl4zmpQfWGZ7QNPtc=; b=nTeyo3q4Rq64JPvWjxywUym6w2RGvAn2IS5O2f5upaI6LjDAgfJpWxvA bFwb8J80AztMT3CB1Fwtuwr2P+g5Vu+aDs2kr0bZBePbx2KjO9jZGOlQF Qz/ClqPxBXH1xxq5F62xwTj58y6u4eLxDbKBC/yVZwtmLWHXXueHTkaKb iffqkeEKfgJdnPB+GcR6dfbafl370Mo3MscBm0mw037u8pdpry9gB9HaT M2bnUwIJR7Tu6m5O80XoHjUqkZSHS23Wc1CU+kmRO1TbiUyHxuWoBJXug 1IOSe/QiMAagEQ2alpuPqN2nrhY4Wczqpzu4wVryUOKfArJZ+GrM+inUv Q==; X-IronPort-AV: E=McAfee;i="6200,9189,10236"; a="245778440" X-IronPort-AV: E=Sophos;i="5.88,311,1635231600"; d="scan'208";a="245778440" Received: from orsmga004.jf.intel.com ([10.7.209.38]) by orsmga102.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 24 Jan 2022 00:42:38 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.88,311,1635231600"; d="scan'208";a="627417166" Received: from ahunter-desktop.fi.intel.com ([10.237.72.92]) by orsmga004.jf.intel.com with ESMTP; 24 Jan 2022 00:42:36 -0800 From: Adrian Hunter To: Arnaldo Carvalho de Melo Cc: Jiri Olsa , Alexander Shishkin , Andi Kleen , linux-kernel@vger.kernel.org Subject: [PATCH 15/25] perf intel-pt: Synthesize iflag event Date: Mon, 24 Jan 2022 10:41:51 +0200 Message-Id: <20220124084201.2699795-16-adrian.hunter@intel.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220124084201.2699795-1-adrian.hunter@intel.com> References: <20220124084201.2699795-1-adrian.hunter@intel.com> MIME-Version: 1.0 Organization: Intel Finland Oy, Registered Address: PL 281, 00181 Helsinki, Business Identity Code: 0357606 - 4, Domiciled in Helsinki Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Synthesize an attribute event and sample events for changes to the interrupt flag represented by the MODE.Exec packet. Signed-off-by: Adrian Hunter --- tools/perf/util/intel-pt.c | 52 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) diff --git a/tools/perf/util/intel-pt.c b/tools/perf/util/intel-pt.c index 1e07a3c03102..c5b860c842f0 100644 --- a/tools/perf/util/intel-pt.c +++ b/tools/perf/util/intel-pt.c @@ -124,6 +124,9 @@ struct intel_pt { u64 evt_sample_type; u64 evt_id; =20 + u64 iflag_chg_sample_type; + u64 iflag_chg_id; + u64 tsc_bit; u64 mtc_bit; u64 mtc_freq_bits; @@ -2209,6 +2212,39 @@ static int intel_pt_synth_events_sample(struct intel= _pt_queue *ptq) pt->evt_sample_type); } =20 +static int intel_pt_synth_iflag_chg_sample(struct intel_pt_queue *ptq) +{ + struct intel_pt *pt =3D ptq->pt; + union perf_event *event =3D ptq->event_buf; + struct perf_sample sample =3D { .ip =3D 0, }; + struct perf_synth_intel_iflag_chg raw; + + if (intel_pt_skip_event(pt)) + return 0; + + intel_pt_prep_p_sample(pt, ptq, event, &sample); + + sample.id =3D ptq->pt->iflag_chg_id; + sample.stream_id =3D ptq->pt->iflag_chg_id; + + raw.flags =3D 0; + raw.iflag =3D ptq->state->to_iflag; + + if (ptq->state->type & INTEL_PT_BRANCH) { + raw.via_branch =3D 1; + raw.branch_ip =3D ptq->state->to_ip; + } else { + sample.addr =3D 0; + } + sample.flags =3D ptq->flags; + + sample.raw_size =3D perf_synth__raw_size(raw); + sample.raw_data =3D perf_synth__raw_data(&raw); + + return intel_pt_deliver_synth_event(pt, event, &sample, + pt->iflag_chg_sample_type); +} + static int intel_pt_synth_error(struct intel_pt *pt, int code, int cpu, pid_t pid, pid_t tid, u64 ip, u64 timestamp) { @@ -2321,6 +2357,11 @@ static int intel_pt_sample(struct intel_pt_queue *pt= q) if (err) return err; } + if (state->type & INTEL_PT_IFLAG_CHG) { + err =3D intel_pt_synth_iflag_chg_sample(ptq); + if (err) + return err; + } } =20 if (pt->sample_pwr_events) { @@ -3531,6 +3572,17 @@ static int intel_pt_synth_events(struct intel_pt *pt, id +=3D 1; } =20 + if (pt->synth_opts.intr_events && pt->cap_event_trace) { + attr.config =3D PERF_SYNTH_INTEL_IFLAG_CHG; + err =3D intel_pt_synth_event(session, "iflag", &attr, id); + if (err) + return err; + pt->iflag_chg_sample_type =3D attr.sample_type; + pt->iflag_chg_id =3D id; + intel_pt_set_event_name(evlist, id, "iflag"); + id +=3D 1; + } + return 0; } =20 --=20 2.25.1 From nobody Tue Jun 30 06:32:16 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 7F3C3C433EF for ; Mon, 24 Jan 2022 08:43:08 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S242389AbiAXInH (ORCPT ); Mon, 24 Jan 2022 03:43:07 -0500 Received: from mga09.intel.com ([134.134.136.24]:62581 "EHLO mga09.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S242387AbiAXImp (ORCPT ); Mon, 24 Jan 2022 03:42:45 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1643013765; x=1674549765; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=wJb9eTAjmQ7zYzdn4Qp13ayT03ao8p4X0rn1JcgJoTI=; b=SWNyqe/q6VH8AvZYcY4MUFg4uenRTU8WbBpZpKLAf9R/YEjEwHJyKE2h Dv9ppxz+eZ27cCGphBpBXs84YpuKfXwuMmKgBUy8BWins0S0YUOVGjtZX 9xHiVgKSEnGkHtFQTkAyKhFiDODYhsvZSzboSYHoEKybG7nY3ZF/xd8pW jwQ2qIX89QIKJvSremmujJq/CBGi/Zk1cHl3XmnOKl25qXfC0dUjJFBFW YED9CX0mFAdGdjhGIQ2f9Cta65Ydj8agwOuV6oiy2RJIinti46s0kkVMd +KEo4AMLlwlU7W6nLYJuT7qQD11sZ9lNX5d7tFMj60Sp6h58Jjw/ndzTh Q==; X-IronPort-AV: E=McAfee;i="6200,9189,10236"; a="245778457" X-IronPort-AV: E=Sophos;i="5.88,311,1635231600"; d="scan'208";a="245778457" Received: from orsmga004.jf.intel.com ([10.7.209.38]) by orsmga102.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 24 Jan 2022 00:42:40 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.88,311,1635231600"; d="scan'208";a="627417185" Received: from ahunter-desktop.fi.intel.com ([10.237.72.92]) by orsmga004.jf.intel.com with ESMTP; 24 Jan 2022 00:42:38 -0800 From: Adrian Hunter To: Arnaldo Carvalho de Melo Cc: Jiri Olsa , Alexander Shishkin , Andi Kleen , linux-kernel@vger.kernel.org Subject: [PATCH 16/25] perf intel-pt: Synthesize new D and t flags Date: Mon, 24 Jan 2022 10:41:52 +0200 Message-Id: <20220124084201.2699795-17-adrian.hunter@intel.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220124084201.2699795-1-adrian.hunter@intel.com> References: <20220124084201.2699795-1-adrian.hunter@intel.com> MIME-Version: 1.0 Organization: Intel Finland Oy, Registered Address: PL 281, 00181 Helsinki, Business Identity Code: 0357606 - 4, Domiciled in Helsinki Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Update sample flags to represent the state and changes to the interrupt flag. Signed-off-by: Adrian Hunter --- tools/perf/util/intel-pt.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/tools/perf/util/intel-pt.c b/tools/perf/util/intel-pt.c index c5b860c842f0..d76e4b865cb0 100644 --- a/tools/perf/util/intel-pt.c +++ b/tools/perf/util/intel-pt.c @@ -1329,6 +1329,8 @@ static void intel_pt_set_pid_tid_cpu(struct intel_pt = *pt, =20 static void intel_pt_sample_flags(struct intel_pt_queue *ptq) { + struct intel_pt *pt =3D ptq->pt; + ptq->insn_len =3D 0; if (ptq->state->flags & INTEL_PT_ABORT_TX) { ptq->flags =3D PERF_IP_FLAG_BRANCH | PERF_IP_FLAG_TX_ABORT; @@ -1359,6 +1361,17 @@ static void intel_pt_sample_flags(struct intel_pt_qu= eue *ptq) ptq->flags |=3D PERF_IP_FLAG_TRACE_BEGIN; if (ptq->state->type & INTEL_PT_TRACE_END) ptq->flags |=3D PERF_IP_FLAG_TRACE_END; + + if (pt->cap_event_trace) { + if (ptq->state->type & INTEL_PT_IFLAG_CHG) { + if (!ptq->state->from_iflag) + ptq->flags |=3D PERF_IP_FLAG_INTR_DISABLE; + if (ptq->state->from_iflag !=3D ptq->state->to_iflag) + ptq->flags |=3D PERF_IP_FLAG_INTR_TOGGLE; + } else if (!ptq->state->to_iflag) { + ptq->flags |=3D PERF_IP_FLAG_INTR_DISABLE; + } + } } =20 static void intel_pt_setup_time_range(struct intel_pt *pt, --=20 2.25.1 From nobody Tue Jun 30 06:32:16 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 84A8EC433EF for ; Mon, 24 Jan 2022 08:43:19 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S242339AbiAXInS (ORCPT ); Mon, 24 Jan 2022 03:43:18 -0500 Received: from mga09.intel.com ([134.134.136.24]:62621 "EHLO mga09.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S242411AbiAXImv (ORCPT ); Mon, 24 Jan 2022 03:42:51 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1643013771; x=1674549771; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=P/dMgwg1V0hlBxLmQZn3s/GYLfkoLYgxBcveFlmrccs=; b=SCEu8cTOJkPvmkwLTvhAjHWIXPx4DwADjaLUMrM8uSaPxR91LVEcRy9C qVZb8FahFhoBtnahP96dgz6+GBqGjx4OYCw4Ic3pM74RiXWkm7aYKGTrw uBCFP+8+Xc/CdKhRrlMn2yf7h9GcnddraaletWlJZcJCOqQi4stF4FKlq sYsbBM4mB7/iODmqnHlqKxswYt/Ikrlmn8ADSX26Q1/F2KdGnoRUR20ZE t147xTlMezd/MiHXvgoZNfj89PXJKsi6t5Y7S9bA/QpthlGzyPQkRpszR bIQ+Cgfde4U1p8y0dWrqCK+jaiS8BCcgdqgxjNbPRULcWAd+2RtTDq80R g==; X-IronPort-AV: E=McAfee;i="6200,9189,10236"; a="245778465" X-IronPort-AV: E=Sophos;i="5.88,311,1635231600"; d="scan'208";a="245778465" Received: from orsmga004.jf.intel.com ([10.7.209.38]) by orsmga102.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 24 Jan 2022 00:42:42 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.88,311,1635231600"; d="scan'208";a="627417197" Received: from ahunter-desktop.fi.intel.com ([10.237.72.92]) by orsmga004.jf.intel.com with ESMTP; 24 Jan 2022 00:42:40 -0800 From: Adrian Hunter To: Arnaldo Carvalho de Melo Cc: Jiri Olsa , Alexander Shishkin , Andi Kleen , linux-kernel@vger.kernel.org Subject: [PATCH 17/25] perf intel-pt: Force 'quick' mode when TNT is disabled Date: Mon, 24 Jan 2022 10:41:53 +0200 Message-Id: <20220124084201.2699795-18-adrian.hunter@intel.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220124084201.2699795-1-adrian.hunter@intel.com> References: <20220124084201.2699795-1-adrian.hunter@intel.com> MIME-Version: 1.0 Organization: Intel Finland Oy, Registered Address: PL 281, 00181 Helsinki, Business Identity Code: 0357606 - 4, Domiciled in Helsinki Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" It is not possible to walk the executable code without TNT packets, so force 'quick' mode when TNT is disabled, because 'quick' mode does not walk the code. Signed-off-by: Adrian Hunter --- tools/perf/util/intel-pt.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/tools/perf/util/intel-pt.c b/tools/perf/util/intel-pt.c index d76e4b865cb0..ec43d364d0de 100644 --- a/tools/perf/util/intel-pt.c +++ b/tools/perf/util/intel-pt.c @@ -50,6 +50,7 @@ #define INTEL_PT_CFG_PWR_EVT_EN BIT_ULL(4) #define INTEL_PT_CFG_BRANCH_EN BIT_ULL(13) #define INTEL_PT_CFG_EVT_EN BIT_ULL(31) +#define INTEL_PT_CFG_TNT_DIS BIT_ULL(55) =20 struct range { u64 start; @@ -972,6 +973,19 @@ static bool intel_pt_branch_enable(struct intel_pt *pt) return true; } =20 +static bool intel_pt_disabled_tnt(struct intel_pt *pt) +{ + struct evsel *evsel; + u64 config; + + evlist__for_each_entry(pt->session->evlist, evsel) { + if (intel_pt_get_config(pt, &evsel->core.attr, &config) && + config & INTEL_PT_CFG_TNT_DIS) + return true; + } + return false; +} + static unsigned int intel_pt_mtc_period(struct intel_pt *pt) { struct evsel *evsel; @@ -1227,6 +1241,10 @@ static struct intel_pt_queue *intel_pt_alloc_queue(s= truct intel_pt *pt, params.first_timestamp =3D pt->first_timestamp; params.max_loops =3D pt->max_loops; =20 + /* Cannot walk code without TNT, so force 'quick' mode */ + if (params.branch_enable && intel_pt_disabled_tnt(pt) && !params.quick) + params.quick =3D 1; + if (pt->filts.cnt > 0) params.pgd_ip =3D intel_pt_pgd_ip; =20 --=20 2.25.1 From nobody Tue Jun 30 06:32:16 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id B61BAC433EF for ; Mon, 24 Jan 2022 08:43:21 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S236432AbiAXInV (ORCPT ); Mon, 24 Jan 2022 03:43:21 -0500 Received: from mga09.intel.com ([134.134.136.24]:62624 "EHLO mga09.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S242281AbiAXInA (ORCPT ); Mon, 24 Jan 2022 03:43:00 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1643013780; x=1674549780; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=mDOEF1umuCiDtDZCtLqE0fShk/Up4rH4HVDS85Hwz7k=; b=LXKZRAHd2JlWe6eLJHdkIs7JsL/bA2Huh3itbRcuDNaN64ZlnaocKOyU bTwB7ESKef4aYlN9tFlj0SXhYYDN6yV8E9UmhQQGe5dGWTdPhR6mcjowa xVxjtdPOyNoW/C+zUP800Hv2EVNTbW6Dxwoun7hoB86cojfbqKffAxf3f bisdg2i7zZyvRn/zwG+X2d8Gr1gfsulBm4nqH4XWQ4QmXqrptuDA11xr4 y1E6dXrzgcIoih0Q6W3ufm1WmjEU+0biPeebOf8WQna6kAgpl8hBGQhCt PKSQ8ejmCCfc+zGMxtuoYdagbKVqcnw/Imny55KXsaVSXtU5YjdGQFWfd A==; X-IronPort-AV: E=McAfee;i="6200,9189,10236"; a="245778468" X-IronPort-AV: E=Sophos;i="5.88,311,1635231600"; d="scan'208";a="245778468" Received: from orsmga004.jf.intel.com ([10.7.209.38]) by orsmga102.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 24 Jan 2022 00:42:45 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.88,311,1635231600"; d="scan'208";a="627417212" Received: from ahunter-desktop.fi.intel.com ([10.237.72.92]) by orsmga004.jf.intel.com with ESMTP; 24 Jan 2022 00:42:42 -0800 From: Adrian Hunter To: Arnaldo Carvalho de Melo Cc: Jiri Olsa , Alexander Shishkin , Andi Kleen , linux-kernel@vger.kernel.org Subject: [PATCH 18/25] perf script: Display Intel PT CFE / EVD synthesized event Date: Mon, 24 Jan 2022 10:41:54 +0200 Message-Id: <20220124084201.2699795-19-adrian.hunter@intel.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220124084201.2699795-1-adrian.hunter@intel.com> References: <20220124084201.2699795-1-adrian.hunter@intel.com> MIME-Version: 1.0 Organization: Intel Finland Oy, Registered Address: PL 281, 00181 Helsinki, Business Identity Code: 0357606 - 4, Domiciled in Helsinki Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Similar to other Intel PT synth events, display Event Trace events recorded by CFE / EVD packets. Signed-off-by: Adrian Hunter --- tools/perf/builtin-script.c | 39 +++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/tools/perf/builtin-script.c b/tools/perf/builtin-script.c index abae8184e171..08e8ef5fcf83 100644 --- a/tools/perf/builtin-script.c +++ b/tools/perf/builtin-script.c @@ -1811,6 +1811,43 @@ static int perf_sample__fprintf_synth_psb(struct per= f_sample *sample, FILE *fp) return len + perf_sample__fprintf_pt_spacing(len, fp); } =20 +/* Intel PT Event Trace */ +static int perf_sample__fprintf_synth_evt(struct perf_sample *sample, FILE= *fp) +{ + struct perf_synth_intel_evt *data =3D perf_sample__synth_ptr(sample); + const char *cfe[32] =3D {NULL, "INTR", "IRET", "SMI", "RSM", "SIPI", + "INIT", "VMENTRY", "VMEXIT", "VMEXIT_INTR", + "SHUTDOWN"}; + const char *evd[64] =3D {"PFA", "VMXQ", "VMXR"}; + const char *s; + int len, i; + + if (perf_sample__bad_synth_size(sample, *data)) + return 0; + + s =3D cfe[data->type]; + if (s) { + len =3D fprintf(fp, " cfe: %s IP: %d vector: %u", + s, data->ip, data->vector); + } else { + len =3D fprintf(fp, " cfe: %u IP: %d vector: %u", + data->type, data->ip, data->vector); + } + for (i =3D 0; i < data->evd_cnt; i++) { + unsigned int et =3D data->evd[i].evd_type & 0x3f; + + s =3D evd[et]; + if (s) { + len +=3D fprintf(fp, " %s: %#" PRIx64, + s, data->evd[i].payload); + } else { + len +=3D fprintf(fp, " EVD_%u: %#" PRIx64, + et, data->evd[i].payload); + } + } + return len + perf_sample__fprintf_pt_spacing(len, fp); +} + static int perf_sample__fprintf_synth(struct perf_sample *sample, struct evsel *evsel, FILE *fp) { @@ -1829,6 +1866,8 @@ static int perf_sample__fprintf_synth(struct perf_sam= ple *sample, return perf_sample__fprintf_synth_cbr(sample, fp); case PERF_SYNTH_INTEL_PSB: return perf_sample__fprintf_synth_psb(sample, fp); + case PERF_SYNTH_INTEL_EVT: + return perf_sample__fprintf_synth_evt(sample, fp); default: break; } --=20 2.25.1 From nobody Tue Jun 30 06:32:16 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 91B28C433EF for ; Mon, 24 Jan 2022 08:43:25 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S242305AbiAXInY (ORCPT ); Mon, 24 Jan 2022 03:43:24 -0500 Received: from mga09.intel.com ([134.134.136.24]:62581 "EHLO mga09.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S242378AbiAXInG (ORCPT ); Mon, 24 Jan 2022 03:43:06 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1643013785; x=1674549785; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=eikBDUZ3omO3sAq/4CvQOCJc/wxTAuBw/ebwEZMCkm0=; b=IlOsXfdb3Lw4GRhUnil7+bqPqnLZbPFw+wAysA5yw4egaKmOCF7uVUtS wUM5c/tTJxQLCyNsj0hrkuxgNta/5t8/ONGjzLZiV4FwGqf5A53xftNX2 ymYWs/yOyGbNeEURD1Zp3OsFs11kh/795FC0pS3x0ESjHmZLwIv6Wnw6G V4Q7ssPaekOAlKf/ixEBbo/Sc7m2gm6jyic/JhJr98oTwx7Y3veFsRVRY 4GG16So7RLpLftqK1dDSmoDLs3tEymIKCTiVXfisGko7orzCQDRwP2fBy GVhE9ky+BHJOju9ewcf8o4AkH6C5s5S0uyB1YEBQEYqYuc9dQwApgJkzx Q==; X-IronPort-AV: E=McAfee;i="6200,9189,10236"; a="245778473" X-IronPort-AV: E=Sophos;i="5.88,311,1635231600"; d="scan'208";a="245778473" Received: from orsmga004.jf.intel.com ([10.7.209.38]) by orsmga102.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 24 Jan 2022 00:42:47 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.88,311,1635231600"; d="scan'208";a="627417221" Received: from ahunter-desktop.fi.intel.com ([10.237.72.92]) by orsmga004.jf.intel.com with ESMTP; 24 Jan 2022 00:42:45 -0800 From: Adrian Hunter To: Arnaldo Carvalho de Melo Cc: Jiri Olsa , Alexander Shishkin , Andi Kleen , linux-kernel@vger.kernel.org Subject: [PATCH 19/25] perf script: Display Intel PT iflag synthesized event Date: Mon, 24 Jan 2022 10:41:55 +0200 Message-Id: <20220124084201.2699795-20-adrian.hunter@intel.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220124084201.2699795-1-adrian.hunter@intel.com> References: <20220124084201.2699795-1-adrian.hunter@intel.com> MIME-Version: 1.0 Organization: Intel Finland Oy, Registered Address: PL 281, 00181 Helsinki, Business Identity Code: 0357606 - 4, Domiciled in Helsinki Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Similar to other Intel PT synth events, display changes to the interrupt flag represented by the MODE.Exec packet. Signed-off-by: Adrian Hunter --- tools/perf/builtin-script.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/tools/perf/builtin-script.c b/tools/perf/builtin-script.c index 08e8ef5fcf83..517d5f7a7d39 100644 --- a/tools/perf/builtin-script.c +++ b/tools/perf/builtin-script.c @@ -1848,6 +1848,19 @@ static int perf_sample__fprintf_synth_evt(struct per= f_sample *sample, FILE *fp) return len + perf_sample__fprintf_pt_spacing(len, fp); } =20 +static int perf_sample__fprintf_synth_iflag_chg(struct perf_sample *sample= , FILE *fp) +{ + struct perf_synth_intel_iflag_chg *data =3D perf_sample__synth_ptr(sample= ); + int len; + + if (perf_sample__bad_synth_size(sample, *data)) + return 0; + + len =3D fprintf(fp, " IFLAG: %d->%d %s branch", !data->iflag, data->iflag, + data->via_branch ? "via" : "non"); + return len + perf_sample__fprintf_pt_spacing(len, fp); +} + static int perf_sample__fprintf_synth(struct perf_sample *sample, struct evsel *evsel, FILE *fp) { @@ -1868,6 +1881,8 @@ static int perf_sample__fprintf_synth(struct perf_sam= ple *sample, return perf_sample__fprintf_synth_psb(sample, fp); case PERF_SYNTH_INTEL_EVT: return perf_sample__fprintf_synth_evt(sample, fp); + case PERF_SYNTH_INTEL_IFLAG_CHG: + return perf_sample__fprintf_synth_iflag_chg(sample, fp); default: break; } --=20 2.25.1 From nobody Tue Jun 30 06:32:16 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 22D07C433EF for ; Mon, 24 Jan 2022 08:43:28 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S242366AbiAXIn0 (ORCPT ); Mon, 24 Jan 2022 03:43:26 -0500 Received: from mga09.intel.com ([134.134.136.24]:62668 "EHLO mga09.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S242393AbiAXInK (ORCPT ); Mon, 24 Jan 2022 03:43:10 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1643013790; x=1674549790; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=pqE1c0GPx7HHb6iG99OWBfb5ZGWqVwXg1A1M59qD240=; b=PvP3fBeks3Jap4spwz3VvQYj2RpRCrBXesKRzyKkVGMS6IcwNmtZU3Hr CaS2ffChwuEcPwXALec49GbIkBVVMTOnJKelYe19YG0RrawjRAEU1pUOr LMBQrSbmM0Nk7Dg8Wdb13NBRvCXjCWDiqspWBAsUjQzdMJK64BosPDghs /JWHmcYWW8awcNwMpPHTf2gMuKj+wWQ6QqDGqMLcxyTaUVYAe6nCohpTV FqX9Gy4oukrZ0A54uXwAc8VN/OG9/QncI9kvNfvFUvTFbfdbrLRLktq46 pHlsjY/2puw1kagJVKXZWTiujALXXlErTL9O2UvPr5eSlvICLpFEJGPH/ g==; X-IronPort-AV: E=McAfee;i="6200,9189,10236"; a="245778476" X-IronPort-AV: E=Sophos;i="5.88,311,1635231600"; d="scan'208";a="245778476" Received: from orsmga004.jf.intel.com ([10.7.209.38]) by orsmga102.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 24 Jan 2022 00:42:49 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.88,311,1635231600"; d="scan'208";a="627417239" Received: from ahunter-desktop.fi.intel.com ([10.237.72.92]) by orsmga004.jf.intel.com with ESMTP; 24 Jan 2022 00:42:47 -0800 From: Adrian Hunter To: Arnaldo Carvalho de Melo Cc: Jiri Olsa , Alexander Shishkin , Andi Kleen , linux-kernel@vger.kernel.org Subject: [PATCH 20/25] perf script: Display new D and t flags Date: Mon, 24 Jan 2022 10:41:56 +0200 Message-Id: <20220124084201.2699795-21-adrian.hunter@intel.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220124084201.2699795-1-adrian.hunter@intel.com> References: <20220124084201.2699795-1-adrian.hunter@intel.com> MIME-Version: 1.0 Organization: Intel Finland Oy, Registered Address: PL 281, 00181 Helsinki, Business Identity Code: 0357606 - 4, Domiciled in Helsinki Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Amend the display to include D and t flags in the same way as the x flag. Signed-off-by: Adrian Hunter --- tools/perf/Documentation/perf-script.txt | 13 ++++++++----- tools/perf/builtin-script.c | 24 ++++++++++++++++-------- 2 files changed, 24 insertions(+), 13 deletions(-) diff --git a/tools/perf/Documentation/perf-script.txt b/tools/perf/Document= ation/perf-script.txt index b0070718784d..afd4718475c9 100644 --- a/tools/perf/Documentation/perf-script.txt +++ b/tools/perf/Documentation/perf-script.txt @@ -195,16 +195,19 @@ OPTIONS At this point usage is displayed, and perf-script exits. =20 The flags field is synthesized and may have a value when Instruction - Trace decoding. The flags are "bcrosyiABExgh" which stand for branch, + Trace decoding. The flags are "bcrosyiABExghDt" which stand for branch, call, return, conditional, system, asynchronous, interrupt, - transaction abort, trace begin, trace end, in transaction, VM-Entry, and = VM-Exit - respectively. Known combinations of flags are printed more nicely e.g. + transaction abort, trace begin, trace end, in transaction, VM-Entry, + VM-Exit, interrupt disabled and interrupt disable toggle respectively. + Known combinations of flags are printed more nicely e.g. "call" for "bc", "return" for "br", "jcc" for "bo", "jmp" for "b", "int" for "bci", "iret" for "bri", "syscall" for "bcs", "sysret" for "brs= ", "async" for "by", "hw int" for "bcyi", "tx abrt" for "bA", "tr strt" for = "bB", "tr end" for "bE", "vmentry" for "bcg", "vmexit" for "bch". - However the "x" flag will be displayed separately in those - cases e.g. "jcc (x)" for a condition branch within a transaction. + However the "x", "D" and "t" flags will be displayed separately in those + cases e.g. "jcc (xD)" for a condition branch within a transaction + with interrupts disabled. Note, interrupts becoming disabled is "t", + whereas interrupts becoming enabled is "Dt". =20 The callindent field is synthesized and may have a value when Instruction Trace decoding. For calls and returns, it will display the diff --git a/tools/perf/builtin-script.c b/tools/perf/builtin-script.c index 517d5f7a7d39..9e032343f1c6 100644 --- a/tools/perf/builtin-script.c +++ b/tools/perf/builtin-script.c @@ -1579,26 +1579,34 @@ static const char *sample_flags_to_name(u32 flags) =20 int perf_sample__sprintf_flags(u32 flags, char *str, size_t sz) { + u32 xf =3D PERF_IP_FLAG_IN_TX | PERF_IP_FLAG_INTR_DISABLE | + PERF_IP_FLAG_INTR_TOGGLE; const char *chars =3D PERF_IP_FLAG_CHARS; const size_t n =3D strlen(PERF_IP_FLAG_CHARS); - bool in_tx =3D flags & PERF_IP_FLAG_IN_TX; const char *name =3D NULL; size_t i, pos =3D 0; + char xs[16] =3D {0}; =20 - name =3D sample_flags_to_name(flags & ~PERF_IP_FLAG_IN_TX); + if (flags & xf) + snprintf(xs, sizeof(xs), "(%s%s%s)", + flags & PERF_IP_FLAG_IN_TX ? "x" : "", + flags & PERF_IP_FLAG_INTR_DISABLE ? "D" : "", + flags & PERF_IP_FLAG_INTR_TOGGLE ? "t" : ""); + + name =3D sample_flags_to_name(flags & ~xf); if (name) - return snprintf(str, sz, "%-15s%4s", name, in_tx ? "(x)" : ""); + return snprintf(str, sz, "%-15s%6s", name, xs); =20 if (flags & PERF_IP_FLAG_TRACE_BEGIN) { - name =3D sample_flags_to_name(flags & ~(PERF_IP_FLAG_IN_TX | PERF_IP_FLA= G_TRACE_BEGIN)); + name =3D sample_flags_to_name(flags & ~(xf | PERF_IP_FLAG_TRACE_BEGIN)); if (name) - return snprintf(str, sz, "tr strt %-7s%4s", name, in_tx ? "(x)" : ""); + return snprintf(str, sz, "tr strt %-7s%6s", name, xs); } =20 if (flags & PERF_IP_FLAG_TRACE_END) { - name =3D sample_flags_to_name(flags & ~(PERF_IP_FLAG_IN_TX | PERF_IP_FLA= G_TRACE_END)); + name =3D sample_flags_to_name(flags & ~(xf | PERF_IP_FLAG_TRACE_END)); if (name) - return snprintf(str, sz, "tr end %-7s%4s", name, in_tx ? "(x)" : ""); + return snprintf(str, sz, "tr end %-7s%6s", name, xs); } =20 for (i =3D 0; i < n; i++, flags >>=3D 1) { @@ -1620,7 +1628,7 @@ static int perf_sample__fprintf_flags(u32 flags, FILE= *fp) char str[SAMPLE_FLAGS_BUF_SIZE]; =20 perf_sample__sprintf_flags(flags, str, sizeof(str)); - return fprintf(fp, " %-19s ", str); + return fprintf(fp, " %-21s ", str); } =20 struct printer_data { --=20 2.25.1 From nobody Tue Jun 30 06:32:16 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 64D88C433EF for ; Mon, 24 Jan 2022 08:43:35 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232626AbiAXIne (ORCPT ); Mon, 24 Jan 2022 03:43:34 -0500 Received: from mga09.intel.com ([134.134.136.24]:62621 "EHLO mga09.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S242283AbiAXInO (ORCPT ); Mon, 24 Jan 2022 03:43:14 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1643013794; x=1674549794; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=h2h9bHGDewdmOF/SyS/9WfylitAc0QQW5ESIvmQkmic=; b=E+SXK7VRSqIMlNB1gkQSQWjZQ0+5ZRDtIbgpzkr/zlE035TVCHTe+A8h UMdBvhJhwrEE+UirByJs3rGNYZ09p+qxYek6eQXggAbU8VYgaHoDa8h6w Los5ke07vWsStYzz7Vju2BoNHKwPvxCNjhetMieyIThuNN5tZhIdTBYHk 6FxE2gVz7KArnKBvqJNU0WCAvYVVUSrbNOqtnnG2WerzcenciUO5x6Z9g /kFYbcptxUh9/SUaGnzq9SFRV+lbVGYcBcx7mVpwxDlMK8GAI9Kz6HBDB JchxSLas6ckxJLAPoB9bIKpUJOEaiePOnk+1ozaKHesuIFsa1eMvFwCYW Q==; X-IronPort-AV: E=McAfee;i="6200,9189,10236"; a="245778488" X-IronPort-AV: E=Sophos;i="5.88,311,1635231600"; d="scan'208";a="245778488" Received: from orsmga004.jf.intel.com ([10.7.209.38]) by orsmga102.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 24 Jan 2022 00:42:52 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.88,311,1635231600"; d="scan'208";a="627417257" Received: from ahunter-desktop.fi.intel.com ([10.237.72.92]) by orsmga004.jf.intel.com with ESMTP; 24 Jan 2022 00:42:49 -0800 From: Adrian Hunter To: Arnaldo Carvalho de Melo Cc: Jiri Olsa , Alexander Shishkin , Andi Kleen , linux-kernel@vger.kernel.org Subject: [PATCH 21/25] perf scripts python: intel-pt-events.py: Add Event Trace Date: Mon, 24 Jan 2022 10:41:57 +0200 Message-Id: <20220124084201.2699795-22-adrian.hunter@intel.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220124084201.2699795-1-adrian.hunter@intel.com> References: <20220124084201.2699795-1-adrian.hunter@intel.com> MIME-Version: 1.0 Organization: Intel Finland Oy, Registered Address: PL 281, 00181 Helsinki, Business Identity Code: 0357606 - 4, Domiciled in Helsinki Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Add Event Trace to the intel-pt-events.py script. This shows how to unpack the raw data from the new sample events in a Python script. Signed-off-by: Adrian Hunter --- tools/perf/scripts/python/intel-pt-events.py | 55 ++++++++++++++++++-- 1 file changed, 50 insertions(+), 5 deletions(-) diff --git a/tools/perf/scripts/python/intel-pt-events.py b/tools/perf/scri= pts/python/intel-pt-events.py index 66452a8ec358..973bd12b7b40 100644 --- a/tools/perf/scripts/python/intel-pt-events.py +++ b/tools/perf/scripts/python/intel-pt-events.py @@ -76,16 +76,16 @@ def trace_begin(): glb_args =3D ap.parse_args() if glb_args.insn_trace: print("Intel PT Instruction Trace") - itrace =3D "i0nsepwx" + itrace =3D "i0nsepwxI" glb_insn =3D True elif glb_args.src_trace: print("Intel PT Source Trace") - itrace =3D "i0nsepwx" + itrace =3D "i0nsepwxI" glb_insn =3D True glb_src =3D True else: - print("Intel PT Branch Trace, Power Events and PTWRITE") - itrace =3D "bepwx" + print("Intel PT Branch Trace, Power Events, Event Trace and PTWRITE") + itrace =3D "bepwxI" global glb_disassembler try: glb_disassembler =3D LibXED() @@ -149,6 +149,43 @@ def print_psb(raw_buf): offset =3D data[1] print("offset: %#x" % (offset), end=3D' ') =20 +glb_cfe =3D ["", "INTR", "IRET", "SMI", "RSM", "SIPI", "INIT", "VMENTRY", = "VMEXIT", + "VMEXIT_INTR", "SHUTDOWN", "", "UINT", "UIRET"] + [""] * 18 +glb_evd =3D ["", "PFA", "VMXQ", "VMXR"] + [""] * 60 + +def print_evt(raw_buf): + data =3D struct.unpack_from("> 7 + vector =3D data[1] + evd_cnt =3D data[2] + s =3D glb_cfe[typ] + if s: + print(" cfe: %s IP: %u vector: %u" % (s, ip_flag, vector), end=3D' ') + else: + print(" cfe: %u IP: %u vector: %u" % (typ, ip_flag, vector), end=3D' ') + pos =3D 4 + for i in range(evd_cnt): + data =3D struct.unpack_from("%u %s branch" % (old_iflag, iflag, s), end=3D' ') + def common_start_str(comm, sample): ts =3D sample["time"] cpu =3D sample["cpu"] @@ -164,7 +201,7 @@ def print_common_start(comm, sample, name): # weight =3D sample["weight"] # transaction =3D sample["transaction"] # cpumode =3D get_optional_zero(sample, "cpumode") - print(common_start_str(comm, sample) + "%7s %19s" % (name, flags_disp), = end=3D' ') + print(common_start_str(comm, sample) + "%8s %21s" % (name, flags_disp), = end=3D' ') =20 def print_instructions_start(comm, sample): if "x" in get_optional_null(sample, "flags"): @@ -315,6 +352,14 @@ def do_process_event(param_dict): print_common_start(comm, sample, name) print_psb(raw_buf) print_common_ip(param_dict, sample, symbol, dso) + elif name =3D=3D "evt": + print_common_start(comm, sample, name) + print_evt(raw_buf) + print_common_ip(param_dict, sample, symbol, dso) + elif name =3D=3D "iflag": + print_common_start(comm, sample, name) + print_iflag(raw_buf) + print_common_ip(param_dict, sample, symbol, dso) else: print_common_start(comm, sample, name) print_common_ip(param_dict, sample, symbol, dso) --=20 2.25.1 From nobody Tue Jun 30 06:32:16 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 9F620C433EF for ; Mon, 24 Jan 2022 08:43:54 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S242404AbiAXInx (ORCPT ); Mon, 24 Jan 2022 03:43:53 -0500 Received: from mga09.intel.com ([134.134.136.24]:62624 "EHLO mga09.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S242393AbiAXInr (ORCPT ); Mon, 24 Jan 2022 03:43:47 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1643013827; x=1674549827; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=8q/Wt44pMdRN3PKEEkQ91EMdy7sMo2325SWA5ltc8EE=; b=kLuU5r9K6eiATsCE386SpsTgRiuQzHYj2EyF1+y953CsmMW88Ltu8Zof P6cSd6XLhuKiZN+o/WvmyB6EKwRKZ+5neDA7GLThld1ny5Ti0V28RApRp jt+IMF1A8YeZPuE+Dwt5t0fF8j58f5McDUjO39H2JXT3I6i5JYD6TgzsV ff8YLUg4iw1vIvXcq/6IG94aVAIcI8TmK3HHAqQ7EFVI0S98GvhMZ3Z6T 0b0OiDL/IreL7aQ17ug2nHEw//mPMtY19S4Zln0gsyG08XJMHt/0GTslM ODyftx6G2/b2yPCPXUYyOaIxtjXuO9mvSdJibyQXjHIB8DCGz5VjQGKIN w==; X-IronPort-AV: E=McAfee;i="6200,9189,10236"; a="245778508" X-IronPort-AV: E=Sophos;i="5.88,311,1635231600"; d="scan'208";a="245778508" Received: from orsmga004.jf.intel.com ([10.7.209.38]) by orsmga102.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 24 Jan 2022 00:42:54 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.88,311,1635231600"; d="scan'208";a="627417280" Received: from ahunter-desktop.fi.intel.com ([10.237.72.92]) by orsmga004.jf.intel.com with ESMTP; 24 Jan 2022 00:42:52 -0800 From: Adrian Hunter To: Arnaldo Carvalho de Melo Cc: Jiri Olsa , Alexander Shishkin , Andi Kleen , linux-kernel@vger.kernel.org Subject: [PATCH 22/25] perf scripting python: Add all sample flags to DB export Date: Mon, 24 Jan 2022 10:41:58 +0200 Message-Id: <20220124084201.2699795-23-adrian.hunter@intel.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220124084201.2699795-1-adrian.hunter@intel.com> References: <20220124084201.2699795-1-adrian.hunter@intel.com> MIME-Version: 1.0 Organization: Intel Finland Oy, Registered Address: PL 281, 00181 Helsinki, Business Identity Code: 0357606 - 4, Domiciled in Helsinki Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Currently, the transaction flag (x) is kept separate from branch flags. Instead of doing the same for the interrupt disabled flags (D and t), add all flags so that new flags will not need to be handled separately in the future. Signed-off-by: Adrian Hunter --- tools/perf/util/scripting-engines/trace-event-python.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tools/perf/util/scripting-engines/trace-event-python.c b/tools= /perf/util/scripting-engines/trace-event-python.c index e752e1f4a5f0..413f2d19c13f 100644 --- a/tools/perf/util/scripting-engines/trace-event-python.c +++ b/tools/perf/util/scripting-engines/trace-event-python.c @@ -1216,7 +1216,7 @@ static void python_export_sample_table(struct db_expo= rt *dbe, struct tables *tables =3D container_of(dbe, struct tables, dbe); PyObject *t; =20 - t =3D tuple_new(24); + t =3D tuple_new(25); =20 tuple_set_d64(t, 0, es->db_id); tuple_set_d64(t, 1, es->evsel->db_id); @@ -1242,6 +1242,7 @@ static void python_export_sample_table(struct db_expo= rt *dbe, tuple_set_d64(t, 21, es->call_path_id); tuple_set_d64(t, 22, es->sample->insn_cnt); tuple_set_d64(t, 23, es->sample->cyc_cnt); + tuple_set_s32(t, 24, es->sample->flags); =20 call_object(tables->sample_handler, t, "sample_table"); =20 --=20 2.25.1 From nobody Tue Jun 30 06:32:16 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 81641C433EF for ; Mon, 24 Jan 2022 08:43:56 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S242278AbiAXInz (ORCPT ); Mon, 24 Jan 2022 03:43:55 -0500 Received: from mga09.intel.com ([134.134.136.24]:62668 "EHLO mga09.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S242424AbiAXInr (ORCPT ); Mon, 24 Jan 2022 03:43:47 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1643013827; x=1674549827; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=wuSr8gsqw7dsz4rThO8aX99+YLV64Z6bw2AGjlT33GM=; b=PYunpwSrMsQGBiK/pgeVV9W6NWZ4lj3hAYiWV9EZxK7w9AC828mCGxKZ 4PCgNhnQH4uWV2igCZfhpAW7su8NZCZ04pywsC4sZ9OniqOruiLP8sgGA 3qaGKBvP5eihrfxZxVyi/+vvRe1Srjp3o58nPXx9ukkv2GSYiztzwaHEZ WMNzm0gVfxM4+e6TwAvEvMm9EHL2utifRE8R6qBGfbwUcJ5TYPsio/zXl 4qbSXARaaWrDcGL+sJGqyIDisuCaMBh0A603VpVH5M9GqK3m1RM8CXQC1 oTpCqCujfVHoNXKMuJVyqf73D+Yr4t+NTgE5oOOsiBjMkLhnK08/k0dKV A==; X-IronPort-AV: E=McAfee;i="6200,9189,10236"; a="245778512" X-IronPort-AV: E=Sophos;i="5.88,311,1635231600"; d="scan'208";a="245778512" Received: from orsmga004.jf.intel.com ([10.7.209.38]) by orsmga102.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 24 Jan 2022 00:42:56 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.88,311,1635231600"; d="scan'208";a="627417293" Received: from ahunter-desktop.fi.intel.com ([10.237.72.92]) by orsmga004.jf.intel.com with ESMTP; 24 Jan 2022 00:42:54 -0800 From: Adrian Hunter To: Arnaldo Carvalho de Melo Cc: Jiri Olsa , Alexander Shishkin , Andi Kleen , linux-kernel@vger.kernel.org Subject: [PATCH 23/25] perf scripts python: export-to-sqlite.py: Export all sample flags Date: Mon, 24 Jan 2022 10:41:59 +0200 Message-Id: <20220124084201.2699795-24-adrian.hunter@intel.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220124084201.2699795-1-adrian.hunter@intel.com> References: <20220124084201.2699795-1-adrian.hunter@intel.com> MIME-Version: 1.0 Organization: Intel Finland Oy, Registered Address: PL 281, 00181 Helsinki, Business Identity Code: 0357606 - 4, Domiciled in Helsinki Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Add sample flags to the SQLite database definition and export. Signed-off-by: Adrian Hunter --- tools/perf/scripts/python/export-to-sqlite.py | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/tools/perf/scripts/python/export-to-sqlite.py b/tools/perf/scr= ipts/python/export-to-sqlite.py index 8043a7272a56..73c992feb1b9 100644 --- a/tools/perf/scripts/python/export-to-sqlite.py +++ b/tools/perf/scripts/python/export-to-sqlite.py @@ -223,7 +223,8 @@ if branches: 'in_tx boolean,' 'call_path_id bigint,' 'insn_count bigint,' - 'cyc_count bigint)') + 'cyc_count bigint,' + 'flags integer)') else: do_query(query, 'CREATE TABLE samples (' 'id integer NOT NULL PRIMARY KEY,' @@ -249,7 +250,8 @@ else: 'in_tx boolean,' 'call_path_id bigint,' 'insn_count bigint,' - 'cyc_count bigint)') + 'cyc_count bigint,' + 'flags integer)') =20 if perf_db_export_calls or perf_db_export_callchains: do_query(query, 'CREATE TABLE call_paths (' @@ -442,7 +444,8 @@ do_query(query, 'CREATE VIEW samples_view AS ' 'in_tx,' 'insn_count,' 'cyc_count,' - 'CASE WHEN cyc_count=3D0 THEN CAST(0 AS FLOAT) ELSE ROUND(CAST(insn_coun= t AS FLOAT) / cyc_count, 2) END AS IPC' + 'CASE WHEN cyc_count=3D0 THEN CAST(0 AS FLOAT) ELSE ROUND(CAST(insn_coun= t AS FLOAT) / cyc_count, 2) END AS IPC,' + 'flags' ' FROM samples') =20 do_query(query, 'CREATE VIEW ptwrite_view AS ' @@ -584,9 +587,9 @@ branch_type_query =3D QSqlQuery(db) branch_type_query.prepare("INSERT INTO branch_types VALUES (?, ?)") sample_query =3D QSqlQuery(db) if branches: - sample_query.prepare("INSERT INTO samples VALUES (?, ?, ?, ?, ?, ?, ?, ?,= ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)") + sample_query.prepare("INSERT INTO samples VALUES (?, ?, ?, ?, ?, ?, ?, ?,= ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)") else: - sample_query.prepare("INSERT INTO samples VALUES (?, ?, ?, ?, ?, ?, ?, ?,= ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)") + sample_query.prepare("INSERT INTO samples VALUES (?, ?, ?, ?, ?, ?, ?, ?,= ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)") if perf_db_export_calls or perf_db_export_callchains: call_path_query =3D QSqlQuery(db) call_path_query.prepare("INSERT INTO call_paths VALUES (?, ?, ?, ?)") @@ -618,7 +621,7 @@ def trace_begin(): comm_table(0, "unknown", 0, 0, 0) dso_table(0, 0, "unknown", "unknown", "") symbol_table(0, 0, 0, 0, 0, "unknown") - sample_table(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, = 0, 0, 0, 0) + sample_table(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, = 0, 0, 0, 0, 0) if perf_db_export_calls or perf_db_export_callchains: call_path_table(0, 0, 0, 0) call_return_table(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) @@ -703,11 +706,11 @@ def sample_table(*x): if branches: for xx in x[0:15]: sample_query.addBindValue(str(xx)) - for xx in x[19:24]: + for xx in x[19:25]: sample_query.addBindValue(str(xx)) do_query_(sample_query) else: - bind_exec(sample_query, 24, x) + bind_exec(sample_query, 25, x) =20 def call_path_table(*x): bind_exec(call_path_query, 4, x) --=20 2.25.1 From nobody Tue Jun 30 06:32:16 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 758FCC433EF for ; Mon, 24 Jan 2022 08:43:58 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S242462AbiAXIn5 (ORCPT ); Mon, 24 Jan 2022 03:43:57 -0500 Received: from mga09.intel.com ([134.134.136.24]:62581 "EHLO mga09.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S242423AbiAXInr (ORCPT ); Mon, 24 Jan 2022 03:43:47 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1643013827; x=1674549827; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=ypc+Qxk9ekX5hM/PA7q7iXC6k9blbnTC+nul8hX0Bbc=; b=GnIAnp+NDWON6YTA1cGJJ/Vr1r4CG6QnYUVGs8k3GVVY31uGm7Mv/Yir YvHzomWuvRAG+uRS64INGNW0dEOl1/FFZESDKY/LPwRNcEmaRDBI54Oam HIZPxaPetyvZGuTq71by9tokRQ7zNjkHgy+mYiKoYUJEZWE3cJk1iIjt0 8ljgoIPDcp+Ydpb3mxLStmvxSfOuARSQPDmimk54BdaS7e42d2H6t2Ivk qTZqY/gsblG01eX4Ql3qFR37yvkzbHtz30Mb7HeQAhfV54ZuMLJPt6B7N IGNjvyDycQ1xdDqYJJuThFZn3zbGMNqkWiHhUnbIrSGZrJBH+7w2h1V2G A==; X-IronPort-AV: E=McAfee;i="6200,9189,10236"; a="245778520" X-IronPort-AV: E=Sophos;i="5.88,311,1635231600"; d="scan'208";a="245778520" Received: from orsmga004.jf.intel.com ([10.7.209.38]) by orsmga102.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 24 Jan 2022 00:42:58 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.88,311,1635231600"; d="scan'208";a="627417308" Received: from ahunter-desktop.fi.intel.com ([10.237.72.92]) by orsmga004.jf.intel.com with ESMTP; 24 Jan 2022 00:42:56 -0800 From: Adrian Hunter To: Arnaldo Carvalho de Melo Cc: Jiri Olsa , Alexander Shishkin , Andi Kleen , linux-kernel@vger.kernel.org Subject: [PATCH 24/25] perf scripts python: export-to-postgresql.py: Export all sample flags Date: Mon, 24 Jan 2022 10:42:00 +0200 Message-Id: <20220124084201.2699795-25-adrian.hunter@intel.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220124084201.2699795-1-adrian.hunter@intel.com> References: <20220124084201.2699795-1-adrian.hunter@intel.com> MIME-Version: 1.0 Organization: Intel Finland Oy, Registered Address: PL 281, 00181 Helsinki, Business Identity Code: 0357606 - 4, Domiciled in Helsinki Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Add sample flags to the PostgreSQL database definition and export. Signed-off-by: Adrian Hunter --- .../perf/scripts/python/export-to-postgresql.py | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/tools/perf/scripts/python/export-to-postgresql.py b/tools/perf= /scripts/python/export-to-postgresql.py index d187e46c2683..3a6bdcd74e60 100644 --- a/tools/perf/scripts/python/export-to-postgresql.py +++ b/tools/perf/scripts/python/export-to-postgresql.py @@ -399,7 +399,8 @@ if branches: 'in_tx boolean,' 'call_path_id bigint,' 'insn_count bigint,' - 'cyc_count bigint)') + 'cyc_count bigint,' + 'flags integer)') else: do_query(query, 'CREATE TABLE samples (' 'id bigint NOT NULL,' @@ -425,7 +426,8 @@ else: 'in_tx boolean,' 'call_path_id bigint,' 'insn_count bigint,' - 'cyc_count bigint)') + 'cyc_count bigint,' + 'flags integer)') =20 if perf_db_export_calls or perf_db_export_callchains: do_query(query, 'CREATE TABLE call_paths (' @@ -604,7 +606,8 @@ do_query(query, 'CREATE VIEW samples_view AS ' 'in_tx,' 'insn_count,' 'cyc_count,' - 'CASE WHEN cyc_count=3D0 THEN CAST(0 AS NUMERIC(20, 2)) ELSE CAST((CAST(= insn_count AS FLOAT) / cyc_count) AS NUMERIC(20, 2)) END AS IPC' + 'CASE WHEN cyc_count=3D0 THEN CAST(0 AS NUMERIC(20, 2)) ELSE CAST((CAST(= insn_count AS FLOAT) / cyc_count) AS NUMERIC(20, 2)) END AS IPC,' + 'flags' ' FROM samples') =20 do_query(query, 'CREATE VIEW ptwrite_view AS ' @@ -804,7 +807,7 @@ def trace_begin(): comm_table(0, "unknown", 0, 0, 0) dso_table(0, 0, "unknown", "unknown", "") symbol_table(0, 0, 0, 0, 0, "unknown") - sample_table(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, = 0, 0, 0, 0) + sample_table(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, = 0, 0, 0, 0, 0) if perf_db_export_calls or perf_db_export_callchains: call_path_table(0, 0, 0, 0) call_return_table(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) @@ -1025,11 +1028,11 @@ def branch_type_table(branch_type, name, *x): value =3D struct.pack(fmt, 2, 4, branch_type, n, name) branch_type_file.write(value) =20 -def sample_table(sample_id, evsel_id, machine_id, thread_id, comm_id, dso_= id, symbol_id, sym_offset, ip, time, cpu, to_dso_id, to_symbol_id, to_sym_o= ffset, to_ip, period, weight, transaction, data_src, branch_type, in_tx, ca= ll_path_id, insn_cnt, cyc_cnt, *x): +def sample_table(sample_id, evsel_id, machine_id, thread_id, comm_id, dso_= id, symbol_id, sym_offset, ip, time, cpu, to_dso_id, to_symbol_id, to_sym_o= ffset, to_ip, period, weight, transaction, data_src, branch_type, in_tx, ca= ll_path_id, insn_cnt, cyc_cnt, flags, *x): if branches: - value =3D struct.pack("!hiqiqiqiqiqiqiqiqiqiqiiiqiqiqiqiiiBiqiqiq", 20, = 8, sample_id, 8, evsel_id, 8, machine_id, 8, thread_id, 8, comm_id, 8, dso_= id, 8, symbol_id, 8, sym_offset, 8, ip, 8, time, 4, cpu, 8, to_dso_id, 8, t= o_symbol_id, 8, to_sym_offset, 8, to_ip, 4, branch_type, 1, in_tx, 8, call_= path_id, 8, insn_cnt, 8, cyc_cnt) + value =3D struct.pack("!hiqiqiqiqiqiqiqiqiqiqiiiqiqiqiqiiiBiqiqiqii", 21= , 8, sample_id, 8, evsel_id, 8, machine_id, 8, thread_id, 8, comm_id, 8, ds= o_id, 8, symbol_id, 8, sym_offset, 8, ip, 8, time, 4, cpu, 8, to_dso_id, 8,= to_symbol_id, 8, to_sym_offset, 8, to_ip, 4, branch_type, 1, in_tx, 8, cal= l_path_id, 8, insn_cnt, 8, cyc_cnt, 4, flags) else: - value =3D struct.pack("!hiqiqiqiqiqiqiqiqiqiqiiiqiqiqiqiqiqiqiqiiiBiqiqi= q", 24, 8, sample_id, 8, evsel_id, 8, machine_id, 8, thread_id, 8, comm_id,= 8, dso_id, 8, symbol_id, 8, sym_offset, 8, ip, 8, time, 4, cpu, 8, to_dso_= id, 8, to_symbol_id, 8, to_sym_offset, 8, to_ip, 8, period, 8, weight, 8, t= ransaction, 8, data_src, 4, branch_type, 1, in_tx, 8, call_path_id, 8, insn= _cnt, 8, cyc_cnt) + value =3D struct.pack("!hiqiqiqiqiqiqiqiqiqiqiiiqiqiqiqiqiqiqiqiiiBiqiqi= qii", 25, 8, sample_id, 8, evsel_id, 8, machine_id, 8, thread_id, 8, comm_i= d, 8, dso_id, 8, symbol_id, 8, sym_offset, 8, ip, 8, time, 4, cpu, 8, to_ds= o_id, 8, to_symbol_id, 8, to_sym_offset, 8, to_ip, 8, period, 8, weight, 8,= transaction, 8, data_src, 4, branch_type, 1, in_tx, 8, call_path_id, 8, in= sn_cnt, 8, cyc_cnt, 4, flags) sample_file.write(value) =20 def call_path_table(cp_id, parent_id, symbol_id, ip, *x): --=20 2.25.1 From nobody Tue Jun 30 06:32:16 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 00D05C433EF for ; Mon, 24 Jan 2022 08:44:01 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S242387AbiAXIn7 (ORCPT ); Mon, 24 Jan 2022 03:43:59 -0500 Received: from mga09.intel.com ([134.134.136.24]:62624 "EHLO mga09.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S242438AbiAXInu (ORCPT ); Mon, 24 Jan 2022 03:43:50 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1643013830; x=1674549830; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=5j5TJCoGxF4CAqoY0fyuwuUeKSolXVQK42ITi5wrZag=; b=d69RjDpPDJuqRSGyW34xyocFm9rinqpfzJnuEKj+S9zZ1VPPY0o8D3CN ar+A2nzhLAmROR6N/FyEser+srJqwMwf0KCS3RVQanvNOqK/i65xwEv0+ YQdZ30aRqQRtJgdBrIh4k8XHlfhO20DVhoABOI05YCBevS0+uty9TUJYS 30+oGRfuh5Tnjw67+7lNEsbr5Bp8ElRq9g8y6aKRex9beMjwX8TJJzKVS SJpz0wLjDCeiXOvtzt+ql00PuWjTgM0O9iFLRVtuH4p2rTypmHCnRrnmn U7QJ6+xLD+4IcJ6W2vzfDjUvl8LuwoJJ5syux7tIcUDCCbDFeVrjcZAt7 g==; X-IronPort-AV: E=McAfee;i="6200,9189,10236"; a="245778524" X-IronPort-AV: E=Sophos;i="5.88,311,1635231600"; d="scan'208";a="245778524" Received: from orsmga004.jf.intel.com ([10.7.209.38]) by orsmga102.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 24 Jan 2022 00:43:00 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.88,311,1635231600"; d="scan'208";a="627417322" Received: from ahunter-desktop.fi.intel.com ([10.237.72.92]) by orsmga004.jf.intel.com with ESMTP; 24 Jan 2022 00:42:58 -0800 From: Adrian Hunter To: Arnaldo Carvalho de Melo Cc: Jiri Olsa , Alexander Shishkin , Andi Kleen , linux-kernel@vger.kernel.org Subject: [PATCH 25/25] perf intel-pt: Add documentation for Event Trace and TNT disable Date: Mon, 24 Jan 2022 10:42:01 +0200 Message-Id: <20220124084201.2699795-26-adrian.hunter@intel.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220124084201.2699795-1-adrian.hunter@intel.com> References: <20220124084201.2699795-1-adrian.hunter@intel.com> MIME-Version: 1.0 Organization: Intel Finland Oy, Registered Address: PL 281, 00181 Helsinki, Business Identity Code: 0357606 - 4, Domiciled in Helsinki Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Add documentation for Event Trace and TNT disable to the perf Intel PT man page. Signed-off-by: Adrian Hunter --- tools/perf/Documentation/perf-intel-pt.txt | 104 ++++++++++++++++++++- 1 file changed, 102 insertions(+), 2 deletions(-) diff --git a/tools/perf/Documentation/perf-intel-pt.txt b/tools/perf/Docume= ntation/perf-intel-pt.txt index cbb920f5d056..ff58bd4c381b 100644 --- a/tools/perf/Documentation/perf-intel-pt.txt +++ b/tools/perf/Documentation/perf-intel-pt.txt @@ -108,9 +108,10 @@ displayed as follows: =20 perf script --itrace=3Dibxwpe -F+flags =20 -The flags are "bcrosyiABExgh" which stand for branch, call, return, condit= ional, +The flags are "bcrosyiABExghDt" which stand for branch, call, return, cond= itional, system, asynchronous, interrupt, transaction abort, trace begin, trace end, -in transaction, VM-entry, and VM-exit respectively. +in transaction, VM-entry, VM-exit, interrupt disabled, and interrupt disab= le +toggle respectively. =20 perf script also supports higher level ways to dump instruction traces: =20 @@ -483,6 +484,30 @@ pwr_evt Enable power events. The power events provid= e information about which contains "1" if the feature is supported and "0" otherwise. =20 +event Enable Event Trace. The events provide information about asynchron= ous + events. + + Support for this feature is indicated by: + + /sys/bus/event_source/devices/intel_pt/caps/event_trace + + which contains "1" if the feature is supported and + "0" otherwise. + +notnt Disable TNT packets. Without TNT packets, it is not possible to wa= lk + executable code to reconstruct control flow, however FUP, TIP, TIP.PGE + and TIP.PGD packets still indicate asynchronous control flow, and (if + return compression is disabled - see noretcomp) return statements. + The advantage of eliminating TNT packets is reducing the size of the + trace and corresponding tracing overhead. + + Support for this feature is indicated by: + + /sys/bus/event_source/devices/intel_pt/caps/tnt_disable + + which contains "1" if the feature is supported and + "0" otherwise. + =20 AUX area sampling option ~~~~~~~~~~~~~~~~~~~~~~~~ @@ -876,6 +901,8 @@ The letters are: p synthesize "power" events (incl. PSB events) c synthesize branches events (calls only) r synthesize branches events (returns only) + o synthesize PEBS-via-PT events + I synthesize Event Trace events e synthesize tracing error events d create a debug log g synthesize a call chain (use with i or x) @@ -1371,6 +1398,79 @@ There were none. :17006 17006 [001] 11500.262869216: ffffffff8220116e error_entr= y+0xe ([guest.kernel.kallsyms]) pushq %rax =20 =20 +Event Trace +----------- + +Event Trace records information about asynchronous events, for example int= errupts, +faults, VM exits and entries. The information is recorded in CFE and EVD = packets, +and also the Interrupt Flag is recorded on the MODE.Exec packet. The CFE = packet +contains a type field to identify one of the following: + + 1 INTR interrupt, fault, exception, NMI + 2 IRET interrupt return + 3 SMI system management interrupt + 4 RSM resume from system management mode + 5 SIPI startup interprocessor interrupt + 6 INIT INIT signal + 7 VMENTRY VM-Entry + 8 VMEXIT VM-Entry + 9 VMEXIT_INTR VM-Exit due to interrupt + 10 SHUTDOWN Shutdown + +For more details, refer to the Intel 64 and IA-32 Architectures Software +Developer Manuals (version 076 or later). + +The capability to do Event Trace is indicated by the +/sys/bus/event_source/devices/intel_pt/caps/event_trace file. + +Event trace is selected for recording using the "event" config term. e.g. + + perf record -e intel_pt/event/u uname + +Event trace events are output using the --itrace I option. e.g. + + perf script --itrace=3DIe + +perf script displays events containing CFE type, vector and event data, +in the form: + + evt: hw int (t) cfe: INTR IP: 1 vector: 3 PFA: 0x88776655= 44332211 + +The IP flag indicates if the event binds to an IP, which includes any case= where +flow control packet generation is enabled, as well as when CFE packet IP b= it is +set. + +perf script displays events containing changes to the Interrupt Flag in th= e form: + + iflag: t IFLAG: 1->0 via branch + +where "via branch" indicates a branch (interrupt or return from interrupt)= and +"non branch" indicates an instruction such as CFI, STI or POPF). + +In addition, the current state of the interrupt flag is indicated by the p= resence +or absence of the "D" (interrupt disabled) perf script flag. If the inter= rupt +flag is changed, then the "t" flag is also included i.e. + + no flag, interrupts enabled IF=3D1 + t interrupts become disabled IF=3D1 -> IF=3D0 + D interrupts are disabled IF=3D0 + Dt interrupts become enabled IF=3D0 -> IF=3D1 + +The intel-pt-events.py script illustrates how to access Event Trace inform= ation +using a Python script. + + +TNT Disable +----------- + +TNT packets are disabled using the "notnt" config term. e.g. + + perf record -e intel_pt/notnt/u uname + +In that case the --itrace q option is forced because walking executable co= de +to reconstruct the control flow is not possible. + + =20 SEE ALSO -------- --=20 2.25.1