From patchwork Sat Nov 5 07:23:10 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Leo Yan X-Patchwork-Id: 13032960 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 bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 4B78CC4332F for ; Sat, 5 Nov 2022 07:24:59 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-Id:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=x4ff6TmvUNStQ2bRrIiK8PUXHxnmF2UzUICyoCEDuCI=; b=R6YqtD+YT3qwwO X1C34ryKgttExaPY1GsJpgqX3KgI6VjOIaXlt1y6s41pRp2UpC71cBk/T8va6FCl9mZt/8Zw/sQKG SuwMOvBvUNcL5gmNFYVES/bO32yoM3fa0q4ovW1nXcSmLAZJ5skMl1/6YNcBANzv+40ck0bAtk6kD STT0pfDh4MwbVejjj+SsWwBHOAty3SiWd7Qo8Mj2crHDlXu094SHGQumRP8CcoRQZlCaXQmls+89j 8YS2ImHrJAmBgaBRJMmi0XiXysWuMS/OHEuNyVSWRLlnU593SPexL3R5Lp2SNPtf/RYmayftsuE8j 2lw0Ol+copcDl/375Bdw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1orDX4-005zfy-K7; Sat, 05 Nov 2022 07:23:58 +0000 Received: from mail-pg1-x530.google.com ([2607:f8b0:4864:20::530]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1orDWv-005zcg-Iv for linux-arm-kernel@lists.infradead.org; Sat, 05 Nov 2022 07:23:51 +0000 Received: by mail-pg1-x530.google.com with SMTP id f63so6207926pgc.2 for ; Sat, 05 Nov 2022 00:23:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=QfZA8Oeq546U9rjXWlvF9+hmpzEZ8iLdnFqiiX6KOGA=; b=bHXFAvPFjUm6i2kX0+cKQ9kyX3IEu0dAg7rej/TY3PIo8z+3oigqZrU9IyDTpig+R3 HJN1Txjluse6j+vStwPJGRMGQ2GQfVNq9iTZQAZG/88DlBTj+WoYddnMO7dEAGRRy81/ 7uNc8LfdswOlXFqzrYNoY8hk83/eFkQeePpTXaZNoWlSiI6RkzO9bBj1Lra5u7PKE7XI YZp8JMGcjrYuXqAQUIfNvqMj6q3LmZW7DsihaejeJi5LGY/dO0jhHe1SpWyFBo0LGCh0 NU/4w+dZlOR2PRJFjVuQstVilJzYNAhIsBuGRf0wBs9nuZ+/VHjwdaQp2+kwd9dj3X8W dBZQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=QfZA8Oeq546U9rjXWlvF9+hmpzEZ8iLdnFqiiX6KOGA=; b=jEA15sBN2dPdy4gcKVBsJ28/eItMFp5YeGrEVDrM/utUOO1sWtV8JN1EQGxAkZR+Zy O9eiaXw/0wMxTmATIbS/tLSae3hO7wEGTCNLf583AHCcU83gdx8r1xzgKBEzdPC5e87N xMQe1FlQbZZIrEJqCV/zSkoEdr7INuQsduSi6W6lS5L9z8lxFNpdBnmFFfNfchw6Z/ZX UAu1uFu8mNOB8V+GjLyALW3pPbbAR+ru4GERM6zuRFnPfZ7R0HZfBt3wi132fttTLeaU TCPy6v2lmWnqMMyawx228ZMGbnIwYdCZWVohlerfF6fgnE0Io2/bSTWUGshZSULjqy41 S89Q== X-Gm-Message-State: ACrzQf2lyx2wE/+msntpG50gGkUG6mzCDrswZ4T0xQfs2zN1LskCg7LC JMnxrvrqcbKJnTm6besjpY1Lew== X-Google-Smtp-Source: AMsMyM5wcfHGBOZqSWFQQMZBQipB+vd3qIPfNGFDpVK5wLEQTDZBAIR4i3sEAE/hnRLXOzTBhLMmoA== X-Received: by 2002:a63:1a60:0:b0:43c:9bcd:6c37 with SMTP id a32-20020a631a60000000b0043c9bcd6c37mr33168645pgm.125.1667633028514; Sat, 05 Nov 2022 00:23:48 -0700 (PDT) Received: from leoy-huangpu.lan (211-75-219-201.hinet-ip.hinet.net. [211.75.219.201]) by smtp.gmail.com with ESMTPSA id w27-20020aa79a1b000000b00562ef28aac6sm698138pfj.185.2022.11.05.00.23.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 05 Nov 2022 00:23:48 -0700 (PDT) From: Leo Yan To: Marc Zyngier , James Morse , Alexandru Elisei , Suzuki K Poulose , Oliver Upton , Catalin Marinas , Will Deacon , Arnaldo Carvalho de Melo , John Garry , James Clark , Mike Leach , Peter Zijlstra , Ingo Molnar , Mark Rutland , Alexander Shishkin , Jiri Olsa , Namhyung Kim , linux-arm-kernel@lists.infradead.org, kvmarm@lists.linux.dev, kvmarm@lists.cs.columbia.edu, linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org Cc: Leo Yan Subject: [PATCH v1 2/3] KVM: arm64: Add trace events with field 'vcpu_id' Date: Sat, 5 Nov 2022 07:23:10 +0000 Message-Id: <20221105072311.8214-3-leo.yan@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20221105072311.8214-1-leo.yan@linaro.org> References: <20221105072311.8214-1-leo.yan@linaro.org> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20221105_002349_649326_30238A1A X-CRM114-Status: GOOD ( 15.93 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org The existed trace events kvm_entry and kvm_exit don't contain the info for virtual CPU id, thus the perf tool has no chance to do statistics based on virtual CPU wise; and the trace events are ABI and we cannot change it to avoid ABI breakage. For above reasons, this patch adds two trace events kvm_entry_v2 and kvm_exit_v2 with a new field 'vcpu_id'. To support both the old and new events, we use the tracepoint callback to check if any event is enabled or not, if it's enabled then the callback will invoke the corresponding trace event. Signed-off-by: Leo Yan --- arch/arm64/kvm/trace.c | 6 +++++ arch/arm64/kvm/trace_arm.h | 45 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 51 insertions(+) diff --git a/arch/arm64/kvm/trace.c b/arch/arm64/kvm/trace.c index d25a3db994e2..d9b2587c77c3 100644 --- a/arch/arm64/kvm/trace.c +++ b/arch/arm64/kvm/trace.c @@ -10,6 +10,9 @@ static void kvm_entry_tp(void *data, struct kvm_vcpu *vcpu) { if (trace_kvm_entry_enabled()) trace_kvm_entry(*vcpu_pc(vcpu)); + + if (trace_kvm_entry_v2_enabled()) + trace_kvm_entry_v2(vcpu); } static void kvm_exit_tp(void *data, int ret, struct kvm_vcpu *vcpu) @@ -17,6 +20,9 @@ static void kvm_exit_tp(void *data, int ret, struct kvm_vcpu *vcpu) if (trace_kvm_exit_enabled()) trace_kvm_exit(ret, kvm_vcpu_trap_get_class(vcpu), *vcpu_pc(vcpu)); + + if (trace_kvm_exit_v2_enabled()) + trace_kvm_exit_v2(ret, vcpu); } static int __init kvm_tp_init(void) diff --git a/arch/arm64/kvm/trace_arm.h b/arch/arm64/kvm/trace_arm.h index ef02ae93b28b..932c9d0c36f3 100644 --- a/arch/arm64/kvm/trace_arm.h +++ b/arch/arm64/kvm/trace_arm.h @@ -4,6 +4,7 @@ #include #include +#include #undef TRACE_SYSTEM #define TRACE_SYSTEM kvm @@ -30,6 +31,23 @@ TRACE_EVENT(kvm_entry, TP_printk("PC: 0x%016lx", __entry->vcpu_pc) ); +TRACE_EVENT(kvm_entry_v2, + TP_PROTO(struct kvm_vcpu *vcpu), + TP_ARGS(vcpu), + + TP_STRUCT__entry( + __field( unsigned int, vcpu_id ) + __field( unsigned long, vcpu_pc ) + ), + + TP_fast_assign( + __entry->vcpu_id = vcpu->vcpu_id; + __entry->vcpu_pc = *vcpu_pc(vcpu); + ), + + TP_printk("vcpu: %u PC: 0x%016lx", __entry->vcpu_id, __entry->vcpu_pc) +); + DECLARE_TRACE(kvm_exit_tp, TP_PROTO(int ret, struct kvm_vcpu *vcpu), TP_ARGS(ret, vcpu)); @@ -57,6 +75,33 @@ TRACE_EVENT(kvm_exit, __entry->vcpu_pc) ); +TRACE_EVENT(kvm_exit_v2, + TP_PROTO(int ret, struct kvm_vcpu *vcpu), + TP_ARGS(ret, vcpu), + + TP_STRUCT__entry( + __field( unsigned int, vcpu_id ) + __field( int, ret ) + __field( unsigned int, esr_ec ) + __field( unsigned long, vcpu_pc ) + ), + + TP_fast_assign( + __entry->vcpu_id = vcpu->vcpu_id; + __entry->ret = ARM_EXCEPTION_CODE(ret); + __entry->esr_ec = ARM_EXCEPTION_IS_TRAP(ret) ? + kvm_vcpu_trap_get_class(vcpu): 0; + __entry->vcpu_pc = *vcpu_pc(vcpu); + ), + + TP_printk("%s: vcpu: %u HSR_EC: 0x%04x (%s), PC: 0x%016lx", + __print_symbolic(__entry->ret, kvm_arm_exception_type), + __entry->vcpu_id, + __entry->esr_ec, + __print_symbolic(__entry->esr_ec, kvm_arm_exception_class), + __entry->vcpu_pc) +); + TRACE_EVENT(kvm_guest_fault, TP_PROTO(unsigned long vcpu_pc, unsigned long hsr, unsigned long hxfar,