From nobody Fri Jan 2 20:35:53 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 46F9AE95A82 for ; Sun, 8 Oct 2023 14:53:14 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1344901AbjJHOxN (ORCPT ); Sun, 8 Oct 2023 10:53:13 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36778 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230303AbjJHOxL (ORCPT ); Sun, 8 Oct 2023 10:53:11 -0400 Received: from AUS01-ME3-obe.outbound.protection.outlook.com (mail-me3aus01olkn2156.outbound.protection.outlook.com [40.92.63.156]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 0FD52A4; Sun, 8 Oct 2023 07:53:10 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=hcPenzeoMVj3NWwKD1fZPwzFKRph1JZMs+VeDteEKOU8RFEcq4Kf+G7W6+OSNTC+oYUWzSPs6tU98ObLY7fpYqEB32HS5MFSlWUOrZwdB6aDuqyGSheLK6Mw9E7G6mlbxGeQQ1YvBa3Nf25wVg2o2OLr/FsWm0q6+3NwintCdxwdyV7n9PGcFtFdIPjEn3LG06FJUPynRM7rcAtdOyzag/PiL13sD4osXi+vc44uYcMWaw4mQwhRR7cdAwrbvDBGGKi8JSxBIH5gFweuxI3v5z2x9jRXHSuI7lsGGI/UhM0nnQMOYYEyRFBeZxhK92tAh8sT/j8cwcOY4UvttxiiIg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=4CxXtiQ9USb3dDRkpn0l1+Exe6nY1VWP5IqNPZ/uctk=; b=AIJYr3qWjzF1xcgbrXosLf0wgDHyuUF9waj1jZcKAp3ug3mbwLD0J1v07PKkcWjWfdH4cnu/3Jy7TBWSuFODMiD2BAwjPgqs+WfQFbptkfzg8Syr09JN7CQnAGfl9DOa7PywSt8Y+DF+u1mc+5tSPOY0YV639P0CRxXY5TtpHuOKNIvLT1kKEYxadDzApj/GemhNjUcofI09yyZdmiqq4u8wPlH8VYQ8WRFK7OKqQbChU8HDlKDe5U6X/oqL51sAu48j7PsPEFbNQYS3Xa+hYUMU69EeruPoFVvebhoXoS7vbOD8L5aG/c4Wz7IIWuinEdvV4Vqw8TN9oRGLmVibSg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=outlook.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=4CxXtiQ9USb3dDRkpn0l1+Exe6nY1VWP5IqNPZ/uctk=; b=BxxLcwRr7Brk6iKa9EjdbueLfhB//Q8NlEiihSA9vVZOP0R7+BOQY6/wYQOBtpdFPTnjgUGMjCFRPlwS5SxLeoiiWChMaV3MuJBR4OVjYbUK52hSMjOhG4Cc2WURTgGbOtSWCR5GFjR7zW/Msz8SQtWJR1s2lkSHXORsq33/zdXu5wgCW7nbMkOMYbHhQbu0anR03B7Gy/zznE1KcDsDAcCX88gXTqp1emlnZ7epigy0F1TVcsArou7ym1MMJxBGmXEFzCL+RP5WFtbBHqAyXPEC4jTvlmQ/EbZDFkNwRUOrOzh0WZe5WYi6/BJLoiN/uhxl6UReaNdHT6Frt+LIjA== Received: from SY4P282MB1084.AUSP282.PROD.OUTLOOK.COM (2603:10c6:10:ac::13) by SY4P282MB1371.AUSP282.PROD.OUTLOOK.COM (2603:10c6:10:a2::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6813.21; Sun, 8 Oct 2023 14:53:03 +0000 Received: from SY4P282MB1084.AUSP282.PROD.OUTLOOK.COM ([fe80::e39e:17fc:36d8:1ea8]) by SY4P282MB1084.AUSP282.PROD.OUTLOOK.COM ([fe80::e39e:17fc:36d8:1ea8%3]) with mapi id 15.20.6838.040; Sun, 8 Oct 2023 14:53:03 +0000 From: Tianyi Liu To: seanjc@google.com, pbonzini@redhat.com, peterz@infradead.org, mingo@redhat.com, acme@kernel.org Cc: linux-arm-kernel@lists.infradead.org, kvmarm@lists.linux.dev, linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org, kvm@vger.kernel.org, x86@kernel.org, mark.rutland@arm.com, alexander.shishkin@linux.intel.com, jolsa@kernel.org, namhyung@kernel.org, irogers@google.com, adrian.hunter@intel.com, Tianyi Liu Subject: [PATCH v2 1/5] KVM: Add arch specific interfaces for sampling guest callchains Date: Sun, 8 Oct 2023 22:52:20 +0800 Message-ID: X-Mailer: git-send-email 2.42.0 In-Reply-To: References: Content-Transfer-Encoding: quoted-printable X-TMN: [dT35Yg0Ztuvx/B/C13xQirvyaWVIvY1Jsoj0E78mW46eB3Mbm3wgrw==] X-ClientProxiedBy: SGAP274CA0024.SGPP274.PROD.OUTLOOK.COM (2603:1096:4:b6::36) To SY4P282MB1084.AUSP282.PROD.OUTLOOK.COM (2603:10c6:10:ac::13) X-Microsoft-Original-Message-ID: <20231008145220.7220-1-i.pear@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SY4P282MB1084:EE_|SY4P282MB1371:EE_ X-MS-Office365-Filtering-Correlation-Id: b93ee731-1a71-405c-4f7c-08dbc80e459a X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: aGsZAKOkUwNp2fXgX9x9kENhiCrK6+zipDPILE6muw/KvTn1Lny2mgsh9Wd/U0coAImxUPPcpENoYHlc+eMcWzLX0mZGoPe95/rNrg/MSe0Bn8JKxfQoFZ0NzuTP6McF1SncJkyYYodDnb3sRrIkSCj8iQaFXbAG7UU2TcCcTTvb7+a1yd2FyCpgKofvEWpnFWBORZhgZw/fe+UpMvhgBBNcLpKfKqmXc2l0QgtlI7pA6/Z4DJEbxagaQbe/vbCszzgprMFZJKE4HpXqvOuO4tVXxZmtI4IN1ACUeK+9Rw1QpPQWozXgBe4nRWBcJsieJoLxLXdjgl0YPJ+15awtbNladcU3eiK2+9jGWG9qR5Io/vdNemyq+NxtCUwmghlAOj7Kwc8puEN5K6rHVANWwJy7VtE4jwBfUSzjXoMwVCCxRnTzK3abCLOHSpr/4DzL3Jx1h5LqMcNykS94AzsUuqBwWrHV78+WGqv7G0DwALulXdAVQRGa/kasnLMKXX4aUVny84jPdYIxZx/TTXdH54lNQIdgvjq1JID0E+vIvwZc0ZWHfa5j7Abv4XdVMXn1K4tTvKRngBoC79LzoNIoF2QyisR1Mh+xAezNnQ/ALvMjsWXCOqIuFFnM0Od/4o2K X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?4l2IwV3BplunpSkqMvgynTu/CBdmRU3be8ph6Jxf9L29TYc9c2nQdMcp2bWR?= =?us-ascii?Q?GTqIaCBdhA32nMiCNUqlZ8S0QwBivtxV7m1vLPgMFJ6bS5WgavG0NZy5dw08?= =?us-ascii?Q?0l+MdrpBLgcMS83TD9zsqfFRFp3UffCF4vkVq5FVUDAiE6Nt5hvE1DpUQZly?= =?us-ascii?Q?zpjUJeKcjOA9R/WpHYobCEI/snhzsgqGIukKXyHAfkEeHvYiISIY/8DC2HcG?= =?us-ascii?Q?vP/aHz+6qNYcRkol/ExpnCvbmZ+mo2eM48ulTKYKJvBTN8m2+g9z4EA9y2Ue?= =?us-ascii?Q?eQ5JO+90Mit0Bcap5UWKKreIopUTz9k9aUOyp6zyciIM1QXZbeDyNQkD7TCu?= =?us-ascii?Q?hKKPI2RMB5l4EJeT0R/iWQCTGS/yhXgGGCpR0fd8V1ljGcP1LwuV0aan0zZj?= =?us-ascii?Q?013yv/yZb9yvXYs49MAMEGqIDagkmwLPyDQ89Dgl5x8h0GjP3igm5J5GPYzH?= =?us-ascii?Q?HGNKrR23HJ5OJ4e+9IEfyg9Fgzr+tu1FQNIr2j2Vfnpz/AwnTS0t6ZRh1kxj?= =?us-ascii?Q?OWGna1J+GByUvTd6x9GvZ7ucoaDZjMcJuulQgtGFy1vX+SX1wHMZLoU5Q1Fd?= =?us-ascii?Q?M4UIDDgFtYiYpnieshiyiot2qFlJzZNV8+5f8IV3dLfakto77wIdIesqqLIB?= =?us-ascii?Q?vhGY6FQEw9mrvBj59T3jvMnSebU41WQTNCh9B2dB1fXUQ9Z9YxUCRBBLK3zK?= =?us-ascii?Q?w9EStrMV7WQq2u4YyXzPmzeM3UGr6f3tfJI4a/iJrPJ+mZn7jACIj4WBhflY?= =?us-ascii?Q?5v27n6zXgO5rHNCWB1o+V5W7pOVIBZVRfCpDMRTbyWnnt2vbjcNl1XbUpE1H?= =?us-ascii?Q?OmM1O2PJi3+hmPen4lkIg0x2rOfJDvZrTykc9wZRbSF/EZ5p7uhfciFrIL5e?= =?us-ascii?Q?SKMmnLANBdKKXM4sdjJJDvhVwi90lVljMRjeOpa8vg/f89VoqS6Qr/6pr1EQ?= =?us-ascii?Q?udsriEf1nkzSMXdWVa/Ms12m3S4bcU8GVJb+DGjHAR/EXtJafjAUlh2gffZN?= =?us-ascii?Q?Ps/IPNWrxb4FE8Hziw965Pf5UGIWB0A9xxUQCxQcMijYQlOuHLhTSFsOkIkk?= =?us-ascii?Q?H1KpQ5CFKs+QK6CjV+ij6vWvmKIVImPQ7ui1EJHbTMLqHEuHtdxwhypVxPwM?= =?us-ascii?Q?jQFvtp4SZ3wM5hOgbLvmgpCDCfbQXKbzKTEdIWYof7mBrEK01T28HQGt9dyr?= =?us-ascii?Q?/DrTYM1uKMxs1ZS19UtVxv2zEx0GWmsYAAN800fwPGFmYh6pw6alYX1c11ze?= =?us-ascii?Q?CkxMj3aMtpwZNbpJI431?= X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: b93ee731-1a71-405c-4f7c-08dbc80e459a X-MS-Exchange-CrossTenant-AuthSource: SY4P282MB1084.AUSP282.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Oct 2023 14:53:03.7523 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-Transport-CrossTenantHeadersStamped: SY4P282MB1371 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" This patch adds three architecture specific interfaces and x86 implementations used by `perf kvm`: - kvm_arch_vcpu_get_frame_pointer: Return the frame pointer of vcpu, for x86 it's RBP, and for arm64 it's x29. - kvm_arch_vcpu_read_virt: Read data from a virtual address of the given guest vm. - kvm_arch_vcpu_is_64bit: Return whether the vcpu is working in 64-bit mode. It's used for determining the size of a stack frame. Since arm64 hasn't provided some foundational infrastructure, stub the arm64 implementation for now because it's a bit complex. Signed-off-by: Tianyi Liu --- arch/arm64/kvm/arm.c | 17 +++++++++++++++++ arch/x86/kvm/x86.c | 18 ++++++++++++++++++ include/linux/kvm_host.h | 4 ++++ 3 files changed, 39 insertions(+) diff --git a/arch/arm64/kvm/arm.c b/arch/arm64/kvm/arm.c index 4866b3f7b..b57b88c58 100644 --- a/arch/arm64/kvm/arm.c +++ b/arch/arm64/kvm/arm.c @@ -571,6 +571,23 @@ unsigned long kvm_arch_vcpu_get_ip(struct kvm_vcpu *vc= pu) { return *vcpu_pc(vcpu); } + +unsigned long kvm_arch_vcpu_get_frame_pointer(struct kvm_vcpu *vcpu) +{ + /* TODO: implement */ + return NULL; +} + +bool kvm_arch_vcpu_read_virt(struct kvm_vcpu *vcpu, void *addr, void *dest= , unsigned int length) +{ + /* TODO: implement */ + return false; +} + +bool kvm_arch_vcpu_is_64bit(struct kvm_vcpu *vcpu) +{ + return !vcpu_mode_is_32bit(vcpu); +} #endif =20 static int kvm_vcpu_initialized(struct kvm_vcpu *vcpu) diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c index 9f18b06bb..17dea02b7 100644 --- a/arch/x86/kvm/x86.c +++ b/arch/x86/kvm/x86.c @@ -12904,6 +12904,24 @@ unsigned long kvm_arch_vcpu_get_ip(struct kvm_vcpu= *vcpu) return kvm_rip_read(vcpu); } =20 +unsigned long kvm_arch_vcpu_get_frame_pointer(struct kvm_vcpu *vcpu) +{ + return kvm_register_read_raw(vcpu, VCPU_REGS_RBP); +} + +bool kvm_arch_vcpu_read_virt(struct kvm_vcpu *vcpu, void *addr, void *dest= , unsigned int length) +{ + struct x86_exception e; + + /* Return true on success */ + return kvm_read_guest_virt(vcpu, addr, dest, length, &e) =3D=3D X86EMUL_C= ONTINUE; +} + +bool kvm_arch_vcpu_is_64bit(struct kvm_vcpu *vcpu) +{ + return is_64_bit_mode(vcpu); +} + int kvm_arch_vcpu_should_kick(struct kvm_vcpu *vcpu) { return kvm_vcpu_exiting_guest_mode(vcpu) =3D=3D IN_GUEST_MODE; diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h index fb6c6109f..f92f1a9c8 100644 --- a/include/linux/kvm_host.h +++ b/include/linux/kvm_host.h @@ -1595,6 +1595,10 @@ static inline bool kvm_arch_intc_initialized(struct = kvm *kvm) =20 #ifdef CONFIG_GUEST_PERF_EVENTS unsigned long kvm_arch_vcpu_get_ip(struct kvm_vcpu *vcpu); +unsigned long kvm_arch_vcpu_get_frame_pointer(struct kvm_vcpu *vcpu); +bool kvm_arch_vcpu_read_virt(struct kvm_vcpu *vcpu, void *addr, void *dest, + unsigned int length); +bool kvm_arch_vcpu_is_64bit(struct kvm_vcpu *vcpu); =20 void kvm_register_perf_callbacks(unsigned int (*pt_intr_handler)(void)); void kvm_unregister_perf_callbacks(void); --=20 2.42.0 From nobody Fri Jan 2 20:35:53 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 809A1E95A82 for ; Sun, 8 Oct 2023 14:54:31 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1344905AbjJHOya (ORCPT ); Sun, 8 Oct 2023 10:54:30 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:53604 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230303AbjJHOy2 (ORCPT ); Sun, 8 Oct 2023 10:54:28 -0400 Received: from AUS01-ME3-obe.outbound.protection.outlook.com (mail-me3aus01olkn2159.outbound.protection.outlook.com [40.92.63.159]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 0C935A4; Sun, 8 Oct 2023 07:54:27 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=WMmJa60OL51BurQg+847fy5d+UwpqF8hHYXORAKjergNrx9iIH+btJ3YEp964hBfk+El3hpE6gD66QDs1ESHRlZ7MYomIoc6dOBY+aIqWJ/Z9+kzx/ogR10w1aW2asghTwhShggwIELA4DtE8BlMf4ImbFEHilOhx/214hR2+7EqrHQ+rP/LoSKcsrquh8jQ5E36JBVi++aDkOaJ424L6ICU7cPojB7M6Zv11xXOOehZudETj/TClqYp+XehiqHEcx6duz1lFHmdruVPXEX2S68+8DMxHuYwilvO2LbyyNJunE487Tzw9TqWzskuklF70iAL1fH+SLtUQeBDBdbI2w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=V4dan7kHVeyvxdy/3lD+tO9lH46m373g697XhVl5n5o=; b=CvF8ss5hxHSZ2RFGh5rCoBTg3lL9UnWhZsnN6Hs3Zj+aGGDzTaDxX957O8SxkqcTwiLQmCmWyu+ZrOKJW/1Yd02/Z0t2CdLI3H7ii/LZjos14lDGGnn2VbrqXirx5SiHQLJ1ldSEP5/pwcaxjCIeHP5N9G/mXCD+7XDeQX2ZqBL8Rjt9r56NP9lF5d3c37ny/pNu8uCPKCxh4TaoooIQKNZxs70ZZtNCqtq9msO8cWguWpCpSQgFHHHEhyaN+r/h89TsiTI/nIqjKNTzH3pBd0dTvU/J/K7nnRy0GBa96hsDv7RnbGK8IZkwDCrLC18s0VZpv8ffh++ombsO/cKYAg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=outlook.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=V4dan7kHVeyvxdy/3lD+tO9lH46m373g697XhVl5n5o=; b=rStEOiy+g2M3KYn0YHg6AG7GWqNO1I50nkUH5LbNIrlFbiglzFZOnswMfP9vy3NJzQC7o8oCfm/vZjSuI66fovGjn7h4rpNnwdd4evx+rAhmZCURhMH2sJzolZmFTN0t18Qfal/2Dup5BaJZGeQrtcT7kJHF4D5hzndObqU5erkvmktfdGufMWgIpEcOfm+sOHAEWH7jtUaGU9lDjuuXoa0n+oJRJgSvxv/V90skvyjBBCCdC6gKb6OgzI93zu69bFWjKN5VBlhtDODdaTyEjozKPY/G38eLmZeWE8tQqu7y46zyVmV0A9VUc7NHP0XgxLSWEHMQoiYtY+DIpPZX5A== Received: from SY4P282MB1084.AUSP282.PROD.OUTLOOK.COM (2603:10c6:10:ac::13) by SY4P282MB1371.AUSP282.PROD.OUTLOOK.COM (2603:10c6:10:a2::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6813.21; Sun, 8 Oct 2023 14:54:20 +0000 Received: from SY4P282MB1084.AUSP282.PROD.OUTLOOK.COM ([fe80::e39e:17fc:36d8:1ea8]) by SY4P282MB1084.AUSP282.PROD.OUTLOOK.COM ([fe80::e39e:17fc:36d8:1ea8%3]) with mapi id 15.20.6838.040; Sun, 8 Oct 2023 14:54:20 +0000 From: Tianyi Liu To: seanjc@google.com, pbonzini@redhat.com, peterz@infradead.org, mingo@redhat.com, acme@kernel.org Cc: linux-arm-kernel@lists.infradead.org, kvmarm@lists.linux.dev, linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org, kvm@vger.kernel.org, x86@kernel.org, mark.rutland@arm.com, alexander.shishkin@linux.intel.com, jolsa@kernel.org, namhyung@kernel.org, irogers@google.com, adrian.hunter@intel.com, Tianyi Liu Subject: [PATCH v2 2/5] perf kvm: Introduce guest interfaces for sampling callchains Date: Sun, 8 Oct 2023 22:53:59 +0800 Message-ID: X-Mailer: git-send-email 2.42.0 In-Reply-To: References: Content-Transfer-Encoding: quoted-printable X-TMN: [iekiAmTYnBBVvcmUmOfpwm9LbawksJQ1ZghS3+UOfjPumANR7m9DTQ==] X-ClientProxiedBy: PS2PR02CA0047.apcprd02.prod.outlook.com (2603:1096:300:59::35) To SY4P282MB1084.AUSP282.PROD.OUTLOOK.COM (2603:10c6:10:ac::13) X-Microsoft-Original-Message-ID: <20231008145359.7269-1-i.pear@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SY4P282MB1084:EE_|SY4P282MB1371:EE_ X-MS-Office365-Filtering-Correlation-Id: 57133fc6-dd08-4e97-d9d1-08dbc80e738b X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: qf6odUHCy1AankStOFkVtSxY9m0Sq9VLW7IJw5hiqxXsrzkt7PL1Scln628kVsZSSXHO/iqBQQZ907wnHf2JgBr6KjcgOvxgVhK428UtgZAtuQa0b5ZdzckRixvRLR3RURwgMskQH88qIHFh11tV+V0OOhJMGcF5+UulU69Z9BliO7HkrzrCQQepOkazsylX29sfhDnrfrgvFs4rGkxMPC/qPbukOOjk9ohyaCd9r92Fb1pmLiifBz+VYvWKllwQ8az5fbLf+S0d2KqzWo6bFn5yfyPbX4LNyhXgYgiHfRYv58Ai6gIKNOpPENmInHfHiyQuGwOe7lDn/nyTdbRuH43Y3NIS5l4Q2pbQGrvtxmE/2CItK0WKTT9BTEEI2IsevjslxL+QMg2jC39zwXuo4gQhg3OnzMkQVt2RR6iKXUIT9zv87FMkQUngCINGsDGX3ec/6Td1/a4aWm40aIXeUxg179H4KbRxsBJ0ns8kacIDHQh/JMyS4w0vOwMlh4NiC6xnDQOQb3z1CyseuLWHde0ARb6TnImii5eioXXulTTGP2U57tZc0vDn+FmZJsycRyXoHbmkIQL+qkLGGblmEEVQ6w/LV+wenJ3BUqfQpdTrwQBrP6PXkE0FeMge9hpj X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?rTl+zseYA3aMpBGUHatuh9UjG5ma3O9e1XER06oDU98fC5s5nD+97kSfEGs6?= =?us-ascii?Q?+tR5msYzlqKLpz/3BpD3RuvcdW2ntbbHyWPRFVJJCF4BfBj5YyA59gzHzZ9y?= =?us-ascii?Q?9Po6Is5b8m1L8fTSnDVWpEcJkWGls4nSTRLj7rG1Ug4t7UP7OzkjSWAaYMwR?= =?us-ascii?Q?Mx48L7rtnXQ2FsramireeQBxenv4nfuupLbMqXCJ2Vpz5Je4tLtjqu1k51vH?= =?us-ascii?Q?q2i7lLyHNlJQwpSRIJsiFGIdgHSJcC8RKGVrUnIbYL4Vn42dHwQUOTCl7oI7?= =?us-ascii?Q?gcKvnvdsRYGyiCCMtqmOnyRuUEJ5zWcdkOpFVg0ogM20rXMDoetQ5PnzapaP?= =?us-ascii?Q?ZEZE0XK24hr100WOSQydLV0XLxyftT4KWT5nC6bkGC2YQ6nmQB8TbuhUWwf4?= =?us-ascii?Q?qh7YMbbuXK5QMlPK4VjnYV44AZzIWnvcaPebNimwwx8rxgp44WSI5XZ1McNQ?= =?us-ascii?Q?ByOes8YiuOIj1+PTSTdne4ECiLDv06fZUoS9xA8sgEMdMQZPxaXMr/Ws+JpV?= =?us-ascii?Q?O6jvSxd1AVIQF3bjAFD61C1Or9wfVE7Dqt7CYoUukY3Ad/lo3ts0MA6LZc+2?= =?us-ascii?Q?y4a53AA1nMfnPz69osfn1uqZS4WJijOstNwU8/KUiztAsYf5hcJpyJ9UIEIq?= =?us-ascii?Q?3L27+G0mU5IlVcGIjyYi8dnCbR5IQcnWAFGOnKyy8CzXYoonjCr1sunnBE7m?= =?us-ascii?Q?XnJ36mttjDHJiBE2q5mjeGcGNKhdsVSP+thLeW4xp97AGuCbZhXNQjWQmTr8?= =?us-ascii?Q?efodif3Ee3Rzhg0IGJsh1dDEJyMrzsQl8vtDLBEERSMRld9m5Rkg0p9hilVn?= =?us-ascii?Q?XXMDD+yM5oe1xZvaBNqVgxIRgDve4hNZZJ175w8heD73g6Fhczp/s/DEjG8G?= =?us-ascii?Q?brUBXvTP4+SWOR6Y29P2c6BKnNqukmhjO6uP+Syo0tzooIN6VTGt81LIn7R1?= =?us-ascii?Q?r55XFjA7Hob7sCRL8ncf1av1p9z5xQu2L1036Y4dyn+figMZWe3ofvi0gQKt?= =?us-ascii?Q?aHVbkqRr+p2a0/b63Y1hpiYVxBU0vUT4vDSUKSIFkzRu+2lOsZcNzQfvrMeD?= =?us-ascii?Q?nVAwChEkwoUptCi9nF1LX9R5R14fDAO2sZU8jbWzuGWDd2cURsyE2h5bVgvu?= =?us-ascii?Q?Xhu7V6WzGeSRz9Y7j88/1loyk0gMagYOtdtrN8bmDPuvheXphxi03sOKujb+?= =?us-ascii?Q?HVCMaJAEnJTMesOKhber8BpAzsAI/kKlwc8EZRre3li2eCJcAekEHx1H3cW/?= =?us-ascii?Q?I+/uNRekbXb5OtAD8ggw?= X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 57133fc6-dd08-4e97-d9d1-08dbc80e738b X-MS-Exchange-CrossTenant-AuthSource: SY4P282MB1084.AUSP282.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Oct 2023 14:54:20.8541 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-Transport-CrossTenantHeadersStamped: SY4P282MB1371 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" This patch introduces two callback interfaces used between perf and KVM: - get_frame_pointer: Return the frame pointer of the running vm. - read_virt: Read data from a virtual address of the running vm, used for reading the stack frames from the guest. This also introduces a new flag, `PERF_GUEST_64BIT`, to the `.state` callback interface, which indicates whether the vm is running in 64-bit mode. Signed-off-by: Tianyi Liu --- include/linux/perf_event.h | 15 +++++++++++++++ kernel/events/core.c | 10 ++++++++++ 2 files changed, 25 insertions(+) diff --git a/include/linux/perf_event.h b/include/linux/perf_event.h index e85cd1c0e..d0f937a62 100644 --- a/include/linux/perf_event.h +++ b/include/linux/perf_event.h @@ -28,10 +28,13 @@ =20 #define PERF_GUEST_ACTIVE 0x01 #define PERF_GUEST_USER 0x02 +#define PERF_GUEST_64BIT 0x04 =20 struct perf_guest_info_callbacks { unsigned int (*state)(void); unsigned long (*get_ip)(void); + unsigned long (*get_frame_pointer)(void); + bool (*read_virt)(void *addr, void *dest, unsigned int len); unsigned int (*handle_intel_pt_intr)(void); }; =20 @@ -1495,6 +1498,8 @@ extern struct perf_guest_info_callbacks __rcu *perf_g= uest_cbs; =20 DECLARE_STATIC_CALL(__perf_guest_state, *perf_guest_cbs->state); DECLARE_STATIC_CALL(__perf_guest_get_ip, *perf_guest_cbs->get_ip); +DECLARE_STATIC_CALL(__perf_guest_get_frame_pointer, *perf_guest_cbs->get_f= rame_pointer); +DECLARE_STATIC_CALL(__perf_guest_read_virt, *perf_guest_cbs->read_virt); DECLARE_STATIC_CALL(__perf_guest_handle_intel_pt_intr, *perf_guest_cbs->ha= ndle_intel_pt_intr); =20 static inline unsigned int perf_guest_state(void) @@ -1505,6 +1510,14 @@ static inline unsigned long perf_guest_get_ip(void) { return static_call(__perf_guest_get_ip)(); } +static inline unsigned long perf_guest_get_frame_pointer(void) +{ + return static_call(__perf_guest_get_frame_pointer)(); +} +static inline bool perf_guest_read_virt(void *addr, void *dest, unsigned i= nt length) +{ + return static_call(__perf_guest_read_virt)(addr, dest, length); +} static inline unsigned int perf_guest_handle_intel_pt_intr(void) { return static_call(__perf_guest_handle_intel_pt_intr)(); @@ -1514,6 +1527,8 @@ extern void perf_unregister_guest_info_callbacks(stru= ct perf_guest_info_callback #else static inline unsigned int perf_guest_state(void) { return 0; } static inline unsigned long perf_guest_get_ip(void) { return 0; } +static inline unsigned long perf_guest_get_frame_pointer(void) { return 0;= } +static inline bool perf_guest_read_virt(void*, void*, unsigned int) { retu= rn 0; } static inline unsigned int perf_guest_handle_intel_pt_intr(void) { return = 0; } #endif /* CONFIG_GUEST_PERF_EVENTS */ =20 diff --git a/kernel/events/core.c b/kernel/events/core.c index 4c72a41f1..eaba00ec2 100644 --- a/kernel/events/core.c +++ b/kernel/events/core.c @@ -6759,6 +6759,8 @@ struct perf_guest_info_callbacks __rcu *perf_guest_cb= s; =20 DEFINE_STATIC_CALL_RET0(__perf_guest_state, *perf_guest_cbs->state); DEFINE_STATIC_CALL_RET0(__perf_guest_get_ip, *perf_guest_cbs->get_ip); +DEFINE_STATIC_CALL_RET0(__perf_guest_get_frame_pointer, *perf_guest_cbs->g= et_frame_pointer); +DEFINE_STATIC_CALL_RET0(__perf_guest_read_virt, *perf_guest_cbs->read_virt= ); DEFINE_STATIC_CALL_RET0(__perf_guest_handle_intel_pt_intr, *perf_guest_cbs= ->handle_intel_pt_intr); =20 void perf_register_guest_info_callbacks(struct perf_guest_info_callbacks *= cbs) @@ -6770,6 +6772,12 @@ void perf_register_guest_info_callbacks(struct perf_= guest_info_callbacks *cbs) static_call_update(__perf_guest_state, cbs->state); static_call_update(__perf_guest_get_ip, cbs->get_ip); =20 + if (cbs->get_frame_pointer) + static_call_update(__perf_guest_get_frame_pointer, cbs->get_frame_pointe= r); + + if (cbs->read_virt) + static_call_update(__perf_guest_read_virt, cbs->read_virt); + /* Implementing ->handle_intel_pt_intr is optional. */ if (cbs->handle_intel_pt_intr) static_call_update(__perf_guest_handle_intel_pt_intr, @@ -6785,6 +6793,8 @@ void perf_unregister_guest_info_callbacks(struct perf= _guest_info_callbacks *cbs) rcu_assign_pointer(perf_guest_cbs, NULL); static_call_update(__perf_guest_state, (void *)&__static_call_return0); static_call_update(__perf_guest_get_ip, (void *)&__static_call_return0); + static_call_update(__perf_guest_get_frame_pointer, (void *)&__static_call= _return0); + static_call_update(__perf_guest_read_virt, (void *)&__static_call_return0= ); static_call_update(__perf_guest_handle_intel_pt_intr, (void *)&__static_call_return0); synchronize_rcu(); --=20 2.42.0 From nobody Fri Jan 2 20:35:53 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 049CDE95A67 for ; Sun, 8 Oct 2023 14:56:45 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1344906AbjJHO4o (ORCPT ); Sun, 8 Oct 2023 10:56:44 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:51374 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234339AbjJHO4m (ORCPT ); Sun, 8 Oct 2023 10:56:42 -0400 Received: from AUS01-ME3-obe.outbound.protection.outlook.com (mail-me3aus01olkn2148.outbound.protection.outlook.com [40.92.63.148]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 387AFB3; Sun, 8 Oct 2023 07:56:41 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=k2w3skakuJlkm6qU94OPPsF2EVMYow5tcxyzOBqNC5KV3rsY4JsvwaymYrj9z0wi8OFq47UK4bx2JOW75lyO/1UFC3li0yn2G3MlZzFi6Tb68oQYHjCrVSLuv5mqDo9OA2u8TF6x9w2j8C2L+QktwCKzQESIeoFfFfPAOF8AX3S9WKcTJajXfJW6hPotpgUGsxUwjS8a8mAjnT2sNry7kIhUit5dr3GIho1AKm16fOjt8emdF/1Eb4woNR8YmX0vBcHLa2aYtiE2VxK0gTm3KPuogaUVUAmECLPgWK9ykdJP+XElPBHVX+LQgB0bppdHeQeyBfjYD5pwhqhpj397Hw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=tApWIMZaO912qHnzgVfU6tDTZddSnki3baiHmbsKoeM=; b=ORekvS5GsTwP/4nnk/ho5aR+VWwq1aIDyIATQRIf0UYNJt0fuTVeOKoWqx1wiUaPetqfg8IuL+GQi9gZ5rdY7wsB6QGMKwZDyRHOlST+0NBubvz33Pe2jJC/Y6YYheo8TT+NEEI/ORDJ/0Kn/9Y+6G/L9mR4xaawkfN8Ee3Xx/pXYvyCTXvwZ9It04xkic/2Q75dImb/0IFq0b2TvH4iT4OqSygyqB40w5FipxE3LDNGVR9kyEo4XNNDB901OJVR4VS75oVUmHwGiDSpvAf4IgIOagzPP7qn6JC1KmdNh6NhPqFu1qPj8C0FfzwfdeZlp6IEirBuxLTEBc2/XRbZ8Q== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=outlook.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=tApWIMZaO912qHnzgVfU6tDTZddSnki3baiHmbsKoeM=; b=PbdJ6mzny3jLJ2WMRXRjX7nB4ZMaQ8Ew3FO7JQLtL1ZoiVFRBAsfWsR1fv1sGThN/0Rmnkhv5aJEgqgDzZz5oeQgvHmKkIB1hphQFTwPq9mlacGMMgK0y0x7GIo3/paLkko1D1danJwybUDKXOWrP46me/lNeKJKoTkRv0H/OTL54bqUKry9GuchWwlj1o9nbNDJ9HhR0PNISLY4iZb1NXx2I7vdj3l5VH9nnu0heJfGMzBxU0D/Zk1FbRSrC7dslJZ2vT57hXh7rHXX5m9FcAq7H44ABK88O5PJK23PM62v5AAbZyr19PyvCUKXeE14pqmWBXIrE4b3ZF2z0iRf8g== Received: from SY4P282MB1084.AUSP282.PROD.OUTLOOK.COM (2603:10c6:10:ac::13) by SY4P282MB1371.AUSP282.PROD.OUTLOOK.COM (2603:10c6:10:a2::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6813.21; Sun, 8 Oct 2023 14:56:35 +0000 Received: from SY4P282MB1084.AUSP282.PROD.OUTLOOK.COM ([fe80::e39e:17fc:36d8:1ea8]) by SY4P282MB1084.AUSP282.PROD.OUTLOOK.COM ([fe80::e39e:17fc:36d8:1ea8%3]) with mapi id 15.20.6838.040; Sun, 8 Oct 2023 14:56:35 +0000 From: Tianyi Liu To: seanjc@google.com, pbonzini@redhat.com, peterz@infradead.org, mingo@redhat.com, acme@kernel.org Cc: linux-arm-kernel@lists.infradead.org, kvmarm@lists.linux.dev, linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org, kvm@vger.kernel.org, x86@kernel.org, mark.rutland@arm.com, alexander.shishkin@linux.intel.com, jolsa@kernel.org, namhyung@kernel.org, irogers@google.com, adrian.hunter@intel.com, Tianyi Liu Subject: [PATCH v2 3/5] KVM: implement new perf interfaces Date: Sun, 8 Oct 2023 22:56:10 +0800 Message-ID: X-Mailer: git-send-email 2.42.0 In-Reply-To: References: Content-Transfer-Encoding: quoted-printable X-TMN: [xAU9EoBRPnMxN3DdhbNcR6zfJ7d1j812xI7i1Rqnz4Ym4NO0kHakmw==] X-ClientProxiedBy: SG2PR02CA0115.apcprd02.prod.outlook.com (2603:1096:4:92::31) To SY4P282MB1084.AUSP282.PROD.OUTLOOK.COM (2603:10c6:10:ac::13) X-Microsoft-Original-Message-ID: <20231008145610.7786-1-i.pear@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SY4P282MB1084:EE_|SY4P282MB1371:EE_ X-MS-Office365-Filtering-Correlation-Id: 579365f9-de45-481a-6905-08dbc80ec3a4 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 2pLdw1fhNxjH2oJDI7HUaoka2KzQiAM8nDT1rptY4gsQ0pLrQnT8M9GV/QqoIexqrl/g/hMTxV1vfaGgZLtmuFr2npiPSHf71OrD67n9bx2zsfs12Jd5qg6iu77Vv9QkO2RQcSK+iSjCY7kVFMODbvdobHqSUGKtYjbGbcQ2yKqWEmCpbSFI8dMObD4Bnc3Wu9+Gap6KTDnJgk2MY3frRMR2Wwfrpwam3mTQQV5wqrw6TV/LN5mZflIigLNxqafBBKVYoaQVwfiKEU4yIkm5/DYH3jjzyFfEugINJ6ZGFOft/KRvodSATmMNkXU07f+u+M449j4rK92lo5fvDJ681aUcYfz5binCDZ/HX62vJWZ+C7adULT6VuGw4Zvpk/6joMilxKZ5ECDu8WX2ttD3NIVR8OaZtHuD0MuNJgBhgyJf6mOCcFMkbOW5AGM3VANrG5R3jB/3WLJl28YuaE0h/Dw+USOyLgvZc5Nm+5EVMm2Z/WaqPcrUTyj0X6BWD0LXu5Ny3SINWEOi2T1akb0X+HhS3taTjdQWQk1k5FBRw3ZYAX/HvnyVgEpj2ivuYQLwCtNiMQw/NoMVp9YdXG6Kk7lMnkZkIORZt9VcpsLpn8vn4aP01Hrrza/vaNp5yf1N X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?dQcWig7s3tkGMgPMPn7D0e6wDdOveeklD1mvV2Ob8/58rQVmgnaV+oXuLiXG?= =?us-ascii?Q?brYK1S3PTwjUxk1n4SRhCwaCtD9LlbZBsTpn9KX2ZA8u4Lnsa5pABiO46rxo?= =?us-ascii?Q?NyLzAg7Y9YcUFzT2QtbT9TuHius4i4/wLFBbJshBuGY5NAHHu6MM7MSlVgPR?= =?us-ascii?Q?7h1CSggW+ELUu76+6FBkeWTfFvq2GmJBn8VrdLCoUnGVVBJjLqU4UkP/MXir?= =?us-ascii?Q?NdMPZcAHYeNCmc3LlmnjuGrri3pUMS4cA3IOsMAfA1gsolXQH2dA1SgxURjk?= =?us-ascii?Q?KXqFNbIt6LSPYknHLCF/DeeNLB62Dpu5VEIyaeK3ZadjJOnGMT7c11hAMBNK?= =?us-ascii?Q?x1TlS1rxQ/dzzWlm4JwKa7sQdKbUU1iDYJBmM8GUqvicHD1cRGKccWAnkIII?= =?us-ascii?Q?/G64l/vAK/ZONWWpNYVVOxGMUC1qD3pFwue0NcebzdKLXH9YTXzjK3bA6uwC?= =?us-ascii?Q?Zcir8fM0AKxE7QzbYYHYJH9yHaNRJP2bA5REw19e9wWpGg4Xz+VUCaYESNT+?= =?us-ascii?Q?s912wDwb3Rx6RnDl1ubwhLzqXsn2mu517qqTP5LgTY3KaMpvaNs1EReQQohZ?= =?us-ascii?Q?+d74drTyo0NkHni8A8XkbmVSiPfBa6Zfw3/Z1sAiQrdRrG8etBs88EdBAnac?= =?us-ascii?Q?R9m9jNL3RXTLDdlJGi7F4crapL6t+A/fKYKBBcb9Hj6FlTzI6yZ8OMlq6Vwx?= =?us-ascii?Q?ia5SvSNtBJuENpKUN0MeH2lY/Qi+4yklcCmEp8DBjM51G39+NmD7h2sxg74Z?= =?us-ascii?Q?WU0Zxh19idkV953GH192/9jx32rSjjAYaqeunLaI3xZxGNISgppivfQScmdJ?= =?us-ascii?Q?YGebMvyluC3oVdUqRnk7zlsEtzKVKVWxvM2jPYMEJIFnmCWe6j2+xk8FN4da?= =?us-ascii?Q?kMSgDTvwm4EwBmmYRTm/77Ct0Ao36JvnhTzL6NfaS1N0huY+OMUoq8oWVD1W?= =?us-ascii?Q?Td0MgkK/VRL8r/a7TVLUZsdSXCa6r+h6DGkk0dDUPFpK8CM5d7rSLGbPILBq?= =?us-ascii?Q?ub4T2sxrI0IgR44SOznyZ9JmCVUKDPUTUwr8KYJ2LL8Vkejd1Mcovl3aY08d?= =?us-ascii?Q?lbKhME6qA00WG1NlP79srFRUB9zNpD7+nrss/b71zKuK/EzxiJvz7lLCwPPE?= =?us-ascii?Q?mw7f9PhTWikirWPNJaCN80B5Huc+T0LLcsuJ9ALXP6Vqyha9ss7+H3fNqHsi?= =?us-ascii?Q?BgtyHGC14hMbDa67U3hIkT4n7JvyxkZKnAXxGJJQarpK42+83zHR7icnXoXb?= =?us-ascii?Q?WHkdbYOOxQJwtbIN66IT?= X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 579365f9-de45-481a-6905-08dbc80ec3a4 X-MS-Exchange-CrossTenant-AuthSource: SY4P282MB1084.AUSP282.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Oct 2023 14:56:35.1163 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-Transport-CrossTenantHeadersStamped: SY4P282MB1371 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" This patch provides two KVM implementations for the following new perf interfaces, just redirecting them to the arch-specific implementations: - get_frame_pointer: Return the frame pointer of the running vm. - read_virt: Read data from a virtual address of the running vm. Signed-off-by: Tianyi Liu --- virt/kvm/kvm_main.c | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c index 486800a70..6fd6ee6c0 100644 --- a/virt/kvm/kvm_main.c +++ b/virt/kvm/kvm_main.c @@ -6018,6 +6018,9 @@ static unsigned int kvm_guest_state(void) if (!kvm_arch_vcpu_in_kernel(vcpu)) state |=3D PERF_GUEST_USER; =20 + if (kvm_arch_vcpu_is_64bit(vcpu)) + state |=3D PERF_GUEST_64BIT; + return state; } =20 @@ -6032,9 +6035,31 @@ static unsigned long kvm_guest_get_ip(void) return kvm_arch_vcpu_get_ip(vcpu); } =20 +static unsigned long kvm_guest_get_frame_pointer(void) +{ + struct kvm_vcpu *vcpu =3D kvm_get_running_vcpu(); + + if (WARN_ON_ONCE(!kvm_arch_pmi_in_guest(vcpu))) + return 0; + + return kvm_arch_vcpu_get_frame_pointer(vcpu); +} + +static bool kvm_guest_read_virt(void *addr, void *dest, unsigned int lengt= h) +{ + struct kvm_vcpu *vcpu =3D kvm_get_running_vcpu(); + + if (WARN_ON_ONCE(!kvm_arch_pmi_in_guest(vcpu))) + return false; + + return kvm_arch_vcpu_read_virt(vcpu, addr, dest, length); +} + static struct perf_guest_info_callbacks kvm_guest_cbs =3D { .state =3D kvm_guest_state, .get_ip =3D kvm_guest_get_ip, + .get_frame_pointer =3D kvm_guest_get_frame_pointer, + .read_virt =3D kvm_guest_read_virt, .handle_intel_pt_intr =3D NULL, }; =20 --=20 2.42.0 From nobody Fri Jan 2 20:35:53 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 1EA35E95A82 for ; Sun, 8 Oct 2023 14:57:33 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1344842AbjJHO5c (ORCPT ); Sun, 8 Oct 2023 10:57:32 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:49238 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234339AbjJHO5a (ORCPT ); Sun, 8 Oct 2023 10:57:30 -0400 Received: from AUS01-ME3-obe.outbound.protection.outlook.com (mail-me3aus01olkn2140.outbound.protection.outlook.com [40.92.63.140]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 6F11EB6; Sun, 8 Oct 2023 07:57:27 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=R2aHIwtqVtzsC3fIgp/rS6PKTqWp+BTjtAOOgH9G+lpZhq0W4COHrYAg2Tp1jMonhbuvguwOhKcCuNcQzkYyEVtrCAcccX5aj1sYWc4LW+m16ToJFk2BtwtuwMxQoOIA8faXO2R126DDPEGLMlITyVw+J+hudQXzhm97sXfL4i7f+uQQjH0Y0lgv+ev0sP8fkcoj3ieU7k7mjLSyRxNUUbtujfoFx4Tg+UnK51iyWawqGkvJ//5x7r2eDmZbuGzXSey3Sy8GbBPxS7PM/YdlLDhed7PYpuApU3FRAlAxcjpSt2pp9GIqF1nKXmfqHfAtXx/6CkRlLrByyoAq8DK+XQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=xaVtEI2qhZS1oaf1GD6pfFXb2t0VmkXD8ySWzedGCOg=; b=DD3LT+211aRgc/xu82MIVPJjxxRhS9lpm6BmYQra15ASapkmoNScC7KoPAuNFUEiRq+aXZD7fshPI+YZIloIwAZDfRmZdPZrq8Ff2N3icRtyovuhngzWEOoqg5hqInv29EcAENsefldGLE0qfNNq78VWiP6BGKdasLMEk3A4qtb9yt8RG981SzHx6/PO9N1cbPF4vFirHiWgsmMRWhVc+N0yVtCbD2gmrGDV6qwJCmVkImZXc2GMSBeiUN7QAJyWFwBeV2FRPBv0wlhRixnxNu13U7x4KXx64UoMHLv8kd8ZlJtCOrADuNh6NNAiMb4cPicdN67oHxzBc9zAiZ5Slg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=outlook.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=xaVtEI2qhZS1oaf1GD6pfFXb2t0VmkXD8ySWzedGCOg=; b=q8ZOJ0nG9CezlFn/JA62IxEMYlsQ89/guLRN2hzSwLUR/jJr6Y86oRdzIaPfDj4EWbOcfydyrJ4BISs8oAt8q1zB67SiHR5TmqwxauvTHavqUT3EI4RfTlWu2MLcezScZNSUQ6etumDj27h62QA7vsyT+r3H2JYilFSUgZAlCzocfUbyXj/e3ofn+EUkWk3NH06iz458294Ie3xVgz2eiqdAUhULq57amQQALw1X0AVBczK2M3pK6D01kM3BbP7XS4F+ezHUChN1k+NTS9jmwJ5hCXpJWjjl9fA4eg+b1j1XNuylTtPKjC95r5/C4CHzi3nnIP4ZMo0G2spFdfGXyA== Received: from SY4P282MB1084.AUSP282.PROD.OUTLOOK.COM (2603:10c6:10:ac::13) by SY4P282MB1371.AUSP282.PROD.OUTLOOK.COM (2603:10c6:10:a2::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6813.21; Sun, 8 Oct 2023 14:57:21 +0000 Received: from SY4P282MB1084.AUSP282.PROD.OUTLOOK.COM ([fe80::e39e:17fc:36d8:1ea8]) by SY4P282MB1084.AUSP282.PROD.OUTLOOK.COM ([fe80::e39e:17fc:36d8:1ea8%3]) with mapi id 15.20.6838.040; Sun, 8 Oct 2023 14:57:21 +0000 From: Tianyi Liu To: seanjc@google.com, pbonzini@redhat.com, peterz@infradead.org, mingo@redhat.com, acme@kernel.org Cc: linux-arm-kernel@lists.infradead.org, kvmarm@lists.linux.dev, linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org, kvm@vger.kernel.org, x86@kernel.org, mark.rutland@arm.com, alexander.shishkin@linux.intel.com, jolsa@kernel.org, namhyung@kernel.org, irogers@google.com, adrian.hunter@intel.com, Tianyi Liu Subject: [PATCH v2 4/5] perf kvm: Support sampling guest callchains Date: Sun, 8 Oct 2023 22:57:06 +0800 Message-ID: X-Mailer: git-send-email 2.42.0 In-Reply-To: References: Content-Transfer-Encoding: quoted-printable X-TMN: [mxPKa+D4OVm2IXQpeo58T38hSdmEF4oisq/ZqhpUqUk8kXqnb4yeoA==] X-ClientProxiedBy: SG2PR01CA0169.apcprd01.prod.exchangelabs.com (2603:1096:4:28::25) To SY4P282MB1084.AUSP282.PROD.OUTLOOK.COM (2603:10c6:10:ac::13) X-Microsoft-Original-Message-ID: <20231008145706.7852-1-i.pear@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SY4P282MB1084:EE_|SY4P282MB1371:EE_ X-MS-Office365-Filtering-Correlation-Id: 22d375be-0d9b-4a9c-5446-08dbc80edf01 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: S5HEydAcY269XC9TGJCQosaOfFgGHtCzYOydt41s6i3F6LHW06308AEma2GJO4qfscm3oEydZ7A7+J7RfQGV5Xv4q60kkyADqATVPggKRl3y4OVpIXAw05sH1eyeQ8Wu0245/47k4wR9+mdJ+Glyie1P8ZQ3n56TEt8IDzUdY4i562jGuELGLCnc6xyoYMD989cyuWOf13TNTpTF/M5ZoS5kYho9D1HYHOmmM7v09pHahdqdW+BQrJ/psq93wbjyNFBG8NDF1t2jW7rynGG3WvGMjOjqWkPRLmKFxZlHQBf0phPm/XGEzrg/Kp7PELB43zx9He0vFhKw9cA8p19CN4gH6+BP1fqsnlOAK/Erdyou57Aq7nh5pmmojUZSXRvcKec96rW2EBasiplQ7ZXCjZRXZYmIbvaeVzDkZSRfXIp438Z5r4mRg2NisRAgp+my3h5qt9u0GOzKxrdYj4PlhbE/GeDs9alTxbfcNBytFjIts9MaIQ7yZwIpghJKpgpz4OLiHemk8HvAZYCCgr4HSVQzPzHkPiJ5oDd54dPyKbkSCMepiSckSbAvw5qa0DAypvwVFAS2mPc9Rf5s91N4MU5x6/Frg3O2P/w8ozIsLTiU/s3zQ+dVoJAUfC6y2uQE X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?UCxwr112mtbwbZKYgG+RF54xsB4PtQeS4trJk0rYIx4YJL53vGetv+qrOB9b?= =?us-ascii?Q?SdHqyZVUe4ofdWK+EZiblOJvh4wzSY57Fj/L2cdxIp7jZqgg98b7uqiCsL5w?= =?us-ascii?Q?I1WiLu/nmPFUEwNC0SdOml/tikRrotX9qpHhxvqZqSypXhuwu/eniyM4G5lg?= =?us-ascii?Q?u7o1keCWgQQ36XQ65rtaw2I3bQo4ugGGDZjWRCJTQp354kgdMaOaU20V2Guy?= =?us-ascii?Q?fwmsQx9Ifs1XlKejJ0I8vJ2Az/4AfFnoWYNDdSsTD40ATgrSrMFvMGie7jsa?= =?us-ascii?Q?hBaeFo+3tU9pVuhZeOmP0ZqO4xYScxoMT71LlJABHUSqt5wDOG3HJcpHb23b?= =?us-ascii?Q?FU+70YnGEF9MN0+tlvNvL6SPgqEnBSWQdiXeWlvzMiVa/qa7qU5N82liQlMV?= =?us-ascii?Q?3i4yJU6EEqEeqnaZN/EsSL/ycXurKrxtBDsdRGFrtdHoLh6LkBW8eP2WddiZ?= =?us-ascii?Q?fKZCK2TIAsU7kKB3gNMMR8l8RJ0PNcpfq51s6bWf0coYQvhebM9GAb+JqV/O?= =?us-ascii?Q?FXR6VpD6I2hyv3Na+Agz0ihadT4ndhgFgQ4MfLjqhV4HxPNW/YSRLZFNCewS?= =?us-ascii?Q?9VDaSxiVeMWF6tYCpmxP5FAS0wlegv9fV5hNUFWi9WZSyYB/G0jewyPfdkZR?= =?us-ascii?Q?Y0dCPnf0w2ZJ6MhXix4ydhRIuZdbDBak1oTowqu0g3f7MverxtzMIA7e8s2p?= =?us-ascii?Q?x3sIr4IpnwzzwuhSweW79VKvg4WGb1Vwre/rVFkxX+NHj/Zzh1+QXX95TrBX?= =?us-ascii?Q?Ad182Rjt2rtjqAfg/Hvxg6drEaybd9+aFcMVW8c45+TKknMYYbv+SsoFXIO+?= =?us-ascii?Q?jS+ALgj3qgkc4MJ1s5M/nOOReRfsILq3g5lV8JE9ozOC0JWVSzJB21kfDIMt?= =?us-ascii?Q?+dZmvKU5KMKOaUw3X7fcmeidGZ+piM48VPqfaoOpOKrPD1fk3CGlDkCe2bYt?= =?us-ascii?Q?ICoNdHy6SVnCjh8pkkveTLAAAfc47pqBeaBUeAmgnTpgrGelooDJYeLXp8ID?= =?us-ascii?Q?I9QtmdpGVcXtVoE/eN9Ybbh6TqRk7JoALy3prVASWrLuDFP0pQxsU8/cXk+J?= =?us-ascii?Q?Sfwhnc+J1QfZ3I24E5kGbt/9yse/SxJwiibC+ZEQOYXLUKFMWmwxoGtAWiyi?= =?us-ascii?Q?yOx9zKDaXWEsk8F4B6kyVkRq/G+2ya7x4iFLXwxfCvspn2BQMp71aR5K8QPV?= =?us-ascii?Q?9lD5mvkqiJEuWhsjkKScGlqoNMK4BeYmMKAe2KyDrd8r0MX8UvWEMKnKkpGQ?= =?us-ascii?Q?r93zJTxHjSAq3aEX3Di2?= X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 22d375be-0d9b-4a9c-5446-08dbc80edf01 X-MS-Exchange-CrossTenant-AuthSource: SY4P282MB1084.AUSP282.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Oct 2023 14:57:21.1465 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-Transport-CrossTenantHeadersStamped: SY4P282MB1371 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" This patch provides support for sampling guests' callchains. The signature of `get_perf_callchain` has been modified to explicitly specify whether it needs to sample the host or guest callchain. Based on the context, it will distribute the sampling request to one of `perf_callchain_user`, `perf_callchain_kernel`, or `perf_callchain_guest`. The reason for separately implementing `perf_callchain_user` and `perf_callchain_kernel` is that the kernel may utilize special unwinders such as `ORC`. However, for the guest, we only support stackframe-based unwinding, so the implementation is generic and only needs to be separately implemented for 32-bit and 64-bit. Signed-off-by: Tianyi Liu --- arch/x86/events/core.c | 56 +++++++++++++++++++++++++++++++------- include/linux/perf_event.h | 3 +- kernel/bpf/stackmap.c | 8 +++--- kernel/events/callchain.c | 27 +++++++++++++++++- kernel/events/core.c | 7 ++++- 5 files changed, 84 insertions(+), 17 deletions(-) diff --git a/arch/x86/events/core.c b/arch/x86/events/core.c index 185f902e5..ea4c86175 100644 --- a/arch/x86/events/core.c +++ b/arch/x86/events/core.c @@ -2758,11 +2758,6 @@ perf_callchain_kernel(struct perf_callchain_entry_ct= x *entry, struct pt_regs *re struct unwind_state state; unsigned long addr; =20 - if (perf_guest_state()) { - /* TODO: We don't support guest os callchain now */ - return; - } - if (perf_callchain_store(entry, regs->ip)) return; =20 @@ -2778,6 +2773,52 @@ perf_callchain_kernel(struct perf_callchain_entry_ct= x *entry, struct pt_regs *re } } =20 +static inline void +perf_callchain_guest32(struct perf_callchain_entry_ctx *entry) +{ + struct stack_frame_ia32 frame; + const struct stack_frame_ia32 *fp; + + fp =3D (void *)perf_guest_get_frame_pointer(); + while (fp && entry->nr < entry->max_stack) { + if (!perf_guest_read_virt(&fp->next_frame, &frame.next_frame, + sizeof(frame.next_frame))) + break; + if (!perf_guest_read_virt(&fp->return_address, &frame.return_address, + sizeof(frame.return_address))) + break; + perf_callchain_store(entry, frame.return_address); + fp =3D (void *)frame.next_frame; + } +} + +void +perf_callchain_guest(struct perf_callchain_entry_ctx *entry) +{ + struct stack_frame frame; + const struct stack_frame *fp; + unsigned int guest_state; + + guest_state =3D perf_guest_state(); + perf_callchain_store(entry, perf_guest_get_ip()); + + if (guest_state & PERF_GUEST_64BIT) { + fp =3D (void *)perf_guest_get_frame_pointer(); + while (fp && entry->nr < entry->max_stack) { + if (!perf_guest_read_virt(&fp->next_frame, &frame.next_frame, + sizeof(frame.next_frame))) + break; + if (!perf_guest_read_virt(&fp->return_address, &frame.return_address, + sizeof(frame.return_address))) + break; + perf_callchain_store(entry, frame.return_address); + fp =3D (void *)frame.next_frame; + } + } else { + perf_callchain_guest32(entry); + } +} + static inline int valid_user_frame(const void __user *fp, unsigned long size) { @@ -2861,11 +2902,6 @@ perf_callchain_user(struct perf_callchain_entry_ctx = *entry, struct pt_regs *regs struct stack_frame frame; const struct stack_frame __user *fp; =20 - if (perf_guest_state()) { - /* TODO: We don't support guest os callchain now */ - return; - } - /* * We don't know what to do with VM86 stacks.. ignore them for now. */ diff --git a/include/linux/perf_event.h b/include/linux/perf_event.h index d0f937a62..a2baf4856 100644 --- a/include/linux/perf_event.h +++ b/include/linux/perf_event.h @@ -1545,9 +1545,10 @@ DECLARE_PER_CPU(struct perf_callchain_entry, perf_ca= llchain_entry); =20 extern void perf_callchain_user(struct perf_callchain_entry_ctx *entry, st= ruct pt_regs *regs); extern void perf_callchain_kernel(struct perf_callchain_entry_ctx *entry, = struct pt_regs *regs); +extern void perf_callchain_guest(struct perf_callchain_entry_ctx *entry); extern struct perf_callchain_entry * get_perf_callchain(struct pt_regs *regs, u32 init_nr, bool kernel, bool us= er, - u32 max_stack, bool crosstask, bool add_mark); + bool host, bool guest, u32 max_stack, bool crosstask, bool add_mark); extern int get_callchain_buffers(int max_stack); extern void put_callchain_buffers(void); extern struct perf_callchain_entry *get_callchain_entry(int *rctx); diff --git a/kernel/bpf/stackmap.c b/kernel/bpf/stackmap.c index 458bb80b1..2e88d4639 100644 --- a/kernel/bpf/stackmap.c +++ b/kernel/bpf/stackmap.c @@ -294,8 +294,8 @@ BPF_CALL_3(bpf_get_stackid, struct pt_regs *, regs, str= uct bpf_map *, map, if (max_depth > sysctl_perf_event_max_stack) max_depth =3D sysctl_perf_event_max_stack; =20 - trace =3D get_perf_callchain(regs, 0, kernel, user, max_depth, - false, false); + trace =3D get_perf_callchain(regs, 0, kernel, user, true, false, + max_depth, false, false); =20 if (unlikely(!trace)) /* couldn't fetch the stack trace */ @@ -420,8 +420,8 @@ static long __bpf_get_stack(struct pt_regs *regs, struc= t task_struct *task, else if (kernel && task) trace =3D get_callchain_entry_for_task(task, max_depth); else - trace =3D get_perf_callchain(regs, 0, kernel, user, max_depth, - false, false); + trace =3D get_perf_callchain(regs, 0, kernel, user, true, false, + max_depth, false, false); if (unlikely(!trace)) goto err_fault; =20 diff --git a/kernel/events/callchain.c b/kernel/events/callchain.c index 1273be843..7e80729e9 100644 --- a/kernel/events/callchain.c +++ b/kernel/events/callchain.c @@ -45,6 +45,10 @@ __weak void perf_callchain_user(struct perf_callchain_en= try_ctx *entry, { } =20 +__weak void perf_callchain_guest(struct perf_callchain_entry_ctx *entry) +{ +} + static void release_callchain_buffers_rcu(struct rcu_head *head) { struct callchain_cpus_entries *entries; @@ -178,11 +182,12 @@ put_callchain_entry(int rctx) =20 struct perf_callchain_entry * get_perf_callchain(struct pt_regs *regs, u32 init_nr, bool kernel, bool us= er, - u32 max_stack, bool crosstask, bool add_mark) + bool host, bool guest, u32 max_stack, bool crosstask, bool add_mark) { struct perf_callchain_entry *entry; struct perf_callchain_entry_ctx ctx; int rctx; + unsigned int guest_state; =20 entry =3D get_callchain_entry(&rctx); if (!entry) @@ -194,6 +199,26 @@ get_perf_callchain(struct pt_regs *regs, u32 init_nr, = bool kernel, bool user, ctx.contexts =3D 0; ctx.contexts_maxed =3D false; =20 + guest_state =3D perf_guest_state(); + if (guest_state) { + if (!guest) + goto exit_put; + if (user && (guest_state & PERF_GUEST_USER)) { + if (add_mark) + perf_callchain_store_context(&ctx, PERF_CONTEXT_GUEST_USER); + perf_callchain_guest(&ctx); + } + if (kernel && !(guest_state & PERF_GUEST_USER)) { + if (add_mark) + perf_callchain_store_context(&ctx, PERF_CONTEXT_GUEST_KERNEL); + perf_callchain_guest(&ctx); + } + goto exit_put; + } + + if (unlikely(!host)) + goto exit_put; + if (kernel && !user_mode(regs)) { if (add_mark) perf_callchain_store_context(&ctx, PERF_CONTEXT_KERNEL); diff --git a/kernel/events/core.c b/kernel/events/core.c index eaba00ec2..b3401f403 100644 --- a/kernel/events/core.c +++ b/kernel/events/core.c @@ -7559,6 +7559,8 @@ perf_callchain(struct perf_event *event, struct pt_re= gs *regs) { bool kernel =3D !event->attr.exclude_callchain_kernel; bool user =3D !event->attr.exclude_callchain_user; + bool host =3D !event->attr.exclude_host; + bool guest =3D !event->attr.exclude_guest; /* Disallow cross-task user callchains. */ bool crosstask =3D event->ctx->task && event->ctx->task !=3D current; const u32 max_stack =3D event->attr.sample_max_stack; @@ -7567,7 +7569,10 @@ perf_callchain(struct perf_event *event, struct pt_r= egs *regs) if (!kernel && !user) return &__empty_callchain; =20 - callchain =3D get_perf_callchain(regs, 0, kernel, user, + if (!host && !guest) + return &__empty_callchain; + + callchain =3D get_perf_callchain(regs, 0, kernel, user, host, guest, max_stack, crosstask, true); return callchain ?: &__empty_callchain; } --=20 2.42.0 From nobody Fri Jan 2 20:35:53 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 01278E95A67 for ; Sun, 8 Oct 2023 14:58:18 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1344881AbjJHO6R (ORCPT ); Sun, 8 Oct 2023 10:58:17 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46900 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230303AbjJHO6P (ORCPT ); Sun, 8 Oct 2023 10:58:15 -0400 Received: from AUS01-ME3-obe.outbound.protection.outlook.com (mail-me3aus01olkn2159.outbound.protection.outlook.com [40.92.63.159]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id F3FD6A4; Sun, 8 Oct 2023 07:58:12 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=nYHA7nfuRuhvLMy72MpWJ4mK3Jm0xZBoL4TvC3AZpUGkObu3MqIGpPAdNq6CRxINikHisMUbFuSjGEW38COSqRnkdr0BS1DGvEQ9QHfyr/27lCyP6i6gPKQCOluAdUv1ijgPUhEDqzJLAC9iKs1IDbr2WB3w8TnEsncomocLtFx6xqk/qr1o+fQK5rVVpDVRLH/96fyWeprLL0SJ3+tT9CwDGbCS/lUcdfEAfR/vWTU+poS2FW3bG7UUM+j+xYxfelQ8Pgdnj2uWlolyIOXOqLALv9jxTtvHsmiwl++kzpAkfHeTjwFAW3ihnqKl6P9flpSLpTT5fbWlYXEbut82pg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=I/lFtn/nLc2LrnucpQ3epHICG2GV9+ahNS6ImpVxMfc=; b=TkGgw0cIwiupQksITQIn8jAh0E54fPLFY/XgrbEEwAiUI20Z6gsXfFk7YK+4wEdrVZL72hlU/UR232OEju1DszJGkUVQmkunHFUzz7KkntaX8a5aoUEO7zqby4cLCxW+HXdRO7Pad/Gvn0M+4ZuYe8LCLJhk+YC+Q6U6Eyaif01HL7FGbG2fsohqqdku4QU/1SLpVNOudvIvZgyIfhyZACRmNICa/tpfk7Rkgl72RDr4aJxRXNEuCWpwDQb73ydN6FaOPweVXebbg3OZCKHk+wXt0raryqspNrob9XxJxEfXA0nd/9/FmjLgXLq+Pw5NZiLUg4DDTgfLYnbGR2cpxQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=outlook.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=I/lFtn/nLc2LrnucpQ3epHICG2GV9+ahNS6ImpVxMfc=; b=FKhXYTsr2zTk/gvEePAaOzVmVfxlx3K2gXV4OWq4nlAeFmALWbAbOAA+tZ04CR1hcUeHcLj2mdGbmmqAreDA2dE+618R5jU2bbzf+QoxyJWx/66qtESsEu4rOyaKQFhwq/GXSqOHTkLpRHGQmVn4rD1N9hxla2jYhKfWdfHh2pUqVRoeydGjQnsEiQXYu2dP+RIP+P6c1wlRX5GU0442yW46ciOBVvrk1u7BRUW2swZmARqXG8E6k88WTItcfFuvjUyTkaXmxX/SSdLtB3nV3WJxiLTGxZgH0tNiWTISUgmt/o11x+nVcftwMJxEEYfgtu9MQcOdZRBR+HAMAu127Q== Received: from SY4P282MB1084.AUSP282.PROD.OUTLOOK.COM (2603:10c6:10:ac::13) by SYYP282MB1101.AUSP282.PROD.OUTLOOK.COM (2603:10c6:10:bf::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6863.36; Sun, 8 Oct 2023 14:58:06 +0000 Received: from SY4P282MB1084.AUSP282.PROD.OUTLOOK.COM ([fe80::e39e:17fc:36d8:1ea8]) by SY4P282MB1084.AUSP282.PROD.OUTLOOK.COM ([fe80::e39e:17fc:36d8:1ea8%3]) with mapi id 15.20.6838.040; Sun, 8 Oct 2023 14:58:06 +0000 From: Tianyi Liu To: seanjc@google.com, pbonzini@redhat.com, peterz@infradead.org, mingo@redhat.com, acme@kernel.org Cc: linux-arm-kernel@lists.infradead.org, kvmarm@lists.linux.dev, linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org, kvm@vger.kernel.org, x86@kernel.org, mark.rutland@arm.com, alexander.shishkin@linux.intel.com, jolsa@kernel.org, namhyung@kernel.org, irogers@google.com, adrian.hunter@intel.com, Tianyi Liu Subject: [PATCH v2 5/5] perf tools: Support PERF_CONTEXT_GUEST_* flags Date: Sun, 8 Oct 2023 22:57:29 +0800 Message-ID: X-Mailer: git-send-email 2.42.0 In-Reply-To: References: Content-Transfer-Encoding: quoted-printable X-TMN: [brT8iFehEOwCNXRw/nHup347yUJJMi8XhYPK+wacExEAGNvB18G62w==] X-ClientProxiedBy: SG2PR06CA0235.apcprd06.prod.outlook.com (2603:1096:4:ac::19) To SY4P282MB1084.AUSP282.PROD.OUTLOOK.COM (2603:10c6:10:ac::13) X-Microsoft-Original-Message-ID: <20231008145729.7886-1-i.pear@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SY4P282MB1084:EE_|SYYP282MB1101:EE_ X-MS-Office365-Filtering-Correlation-Id: 9c550b0c-fb1d-492c-ce93-08dbc80efa0a X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: KHeHlcHDe59T0Nksh3RMSTCkhCHOh9vZsPg/95V2XqN0q2P2+7r29qRIwKl/SpRRUHFpxFWeQA2OWsl3JMvr98XswCt7ZZkNa0XhTUQ0576IDW9Op3WoUzC1o/mJyyyK0W/deJGGZPVKkVhCwNjrOqE3jGe6gSyG8LX2bDNDTjs0QzFexZvY5uR1Lkbm+Wsh6edF8mdkMeLkoCKC5X6ApUHQWFRB1KAr07rKdcQhVsZA8Kgahnj67XsmXCYq0BU7gTDm+AyCnG5SZtR6kxNaDTt1GGFW5xjcIu2ytfgs1OJ1vlHfHdE8pDgMpQUdsYERkTBpoJEr+I0ytXrwWQEOF3edIAvJdN7d1zfhwYxBJE6dyVgJQV7qEjE+9EZHflohxX2T59pgd3BYjKndmKiapv4okGjGKGgoCOdUoVRI/k0zerPYAyUuSwfa1z4zk4pqg/QFYVjN8YVEuSiAM2/F4UE0dc0sNQrrrP3c7d74zR8RkJAXfdzh5l5ntC6BlckEUA1z8MAob0rqQQQllxVmqMfM49i4BFAOix4tPTz/GNCWgWJsnDeOaBA1PXUaHzQlmmGyZIaA9oHGSjsW5FrZPg5jUtubzil3k5ZOXMbuZ3SJkvfFPOMe4BWGcQIE9vbG X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?+73wY44Qoc4JgWLeOlFDx2MdotZXzfNBpG1vDLXXeAS77wHJ6rAV8Em7MIWp?= =?us-ascii?Q?4wS4b5KEJOVr+TqtGtc/EnWLH8bxZwm2ECFoG2HC0eEFiMogpDhqWln19jDu?= =?us-ascii?Q?7DCU52FlF8JD56pMvo8wj+j5XW163sn/Rex5gMh02odQ73H4z5OgQEcd1Icn?= =?us-ascii?Q?RyysmTxC1JtdfBWtWWq4x9Ll+t60vEOldCa1nbBGo0GESV61Z4t1/Pa3G3JM?= =?us-ascii?Q?aZ9V+A7GudImH0WLGD6EJvIkb2YtfuV0TTmQUlpy/TZEqSQxx0yOIK1bOSh0?= =?us-ascii?Q?2B/YGdvfdqGg+zU5iSBVNH6y65uAjOhpdbGBpM86ItMjiX9FejVmXs2ZaENk?= =?us-ascii?Q?RzkdETbvS1gja0OyRrQde6NjtWt4SHForgSk9LrJfdaEvCj8toDta6c4Y3+1?= =?us-ascii?Q?8xagzTKQgVyac69M6OJNLGXa7dVkTHpGaRh429liIsTCuXxFSd4AxfFDIRbX?= =?us-ascii?Q?NXnlcZeVevGsSsq+9sPmq+FvC9pLquk9iGfA28GAnMD/UyE1A2tHah+2juKb?= =?us-ascii?Q?Jb+Jd38huKeBTYIJU5iiJRpjdiEDMPYkGxuedoUH+ib6xc76qzgoGIrLEeCC?= =?us-ascii?Q?3Us8pXXBBDh2eOZXkRKuuiGcgE7liaK06uWaV8Uh3lGQOfQF6sqFi7f/1y7e?= =?us-ascii?Q?cTALLew/HFHuEufTjA0X5DitkzNY5EugXM3DGYIhJrl67F9f4w0yy+rzctiJ?= =?us-ascii?Q?lsjhR8JOrjp3YAqBlIdj0lu9YgmD0zP8UP4XUwJ8kOZ4P6tV+/SOBvos71Is?= =?us-ascii?Q?Coc5BBBtp47OkJZlrTlD3eSn5BGmrUlo1iKY4uPvpBtt+taQfQqHpvGPMVGP?= =?us-ascii?Q?ElPpKRnhs659Ua7G06vzhgzfA4ziHq1UIO6/dIgyDuAf4mIglFR/e5vg4Zp1?= =?us-ascii?Q?MwmPtfRzaDZlEH3reuXRct0sdxvdREyDmGtprQ8YFA6xeSuvw1GuH+uL+6x7?= =?us-ascii?Q?nvgNly33F8TyuzOhQXJHWYBr+u0BLnwTK3drNG2NUf8VIWEmY1t/ZfYWI4GM?= =?us-ascii?Q?mQgKEhK8RpH8aQu1bC5PnPDj2cXxlfkbv4H4H8h+Y269AjDIqW4dwmeF9p/0?= =?us-ascii?Q?H18ww4F7DhumaM6X6lnDZT3+sGinTM6yBftC7QT0c9opy7MCMjqOTOBjRA85?= =?us-ascii?Q?9svMAQXHsL0bJa7vzN1GL38k25Cp9rDCTkRbWgcnJwCpry4uN9SLhXcryuOM?= =?us-ascii?Q?X1h+vqDd9hDe5Ib1e6vpd+PN14ksHpSALXVjGLmUNrRnp3/cq1dBMb4dQD8y?= =?us-ascii?Q?BYPSUKcM2EC49AWARdg7?= X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 9c550b0c-fb1d-492c-ce93-08dbc80efa0a X-MS-Exchange-CrossTenant-AuthSource: SY4P282MB1084.AUSP282.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Oct 2023 14:58:06.4846 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-Transport-CrossTenantHeadersStamped: SYYP282MB1101 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" The `perf` util currently has a incomplete implementation for the following event flags, that events with these flags will be dropped or be identified as unknown types: `PERF_CONTEXT_GUEST_KERNEL` `PERF_CONTEXT_GUEST_USER` This patch makes `perf script`, `perf timechart` and `perf data` to correctly identify these flags. Signed-off-by: Tianyi Liu --- tools/perf/builtin-timechart.c | 6 ++++++ tools/perf/util/data-convert-json.c | 6 ++++++ tools/perf/util/machine.c | 6 ++++++ 3 files changed, 18 insertions(+) diff --git a/tools/perf/builtin-timechart.c b/tools/perf/builtin-timechart.c index 19d4542ea..6a368b6a3 100644 --- a/tools/perf/builtin-timechart.c +++ b/tools/perf/builtin-timechart.c @@ -536,6 +536,12 @@ static const char *cat_backtrace(union perf_event *eve= nt, case PERF_CONTEXT_USER: cpumode =3D PERF_RECORD_MISC_USER; break; + case PERF_CONTEXT_GUEST_KERNEL: + cpumode =3D PERF_RECORD_MISC_GUEST_KERNEL; + break; + case PERF_CONTEXT_GUEST_USER: + cpumode =3D PERF_RECORD_MISC_GUEST_USER; + break; default: pr_debug("invalid callchain context: " "%"PRId64"\n", (s64) ip); diff --git a/tools/perf/util/data-convert-json.c b/tools/perf/util/data-con= vert-json.c index 5bb3c2ba9..62686f78d 100644 --- a/tools/perf/util/data-convert-json.c +++ b/tools/perf/util/data-convert-json.c @@ -205,6 +205,12 @@ static int process_sample_event(struct perf_tool *tool, case PERF_CONTEXT_USER: cpumode =3D PERF_RECORD_MISC_USER; break; + case PERF_CONTEXT_GUEST_KERNEL: + cpumode =3D PERF_RECORD_MISC_GUEST_KERNEL; + break; + case PERF_CONTEXT_GUEST_USER: + cpumode =3D PERF_RECORD_MISC_GUEST_USER; + break; default: pr_debug("invalid callchain context: %" PRId64 "\n", (s64) ip); diff --git a/tools/perf/util/machine.c b/tools/perf/util/machine.c index 88f31b3a6..d88458c3b 100644 --- a/tools/perf/util/machine.c +++ b/tools/perf/util/machine.c @@ -2346,6 +2346,12 @@ static int add_callchain_ip(struct thread *thread, case PERF_CONTEXT_USER: *cpumode =3D PERF_RECORD_MISC_USER; break; + case PERF_CONTEXT_GUEST_KERNEL: + *cpumode =3D PERF_RECORD_MISC_GUEST_KERNEL; + break; + case PERF_CONTEXT_GUEST_USER: + *cpumode =3D PERF_RECORD_MISC_GUEST_USER; + break; default: pr_debug("invalid callchain context: " "%"PRId64"\n", (s64) ip); --=20 2.42.0