From mboxrd@z Thu Jan 1 00:00:00 1970 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 mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id B2926C4332F for ; Thu, 11 Nov 2021 02:07:47 +0000 (UTC) Received: from mm01.cs.columbia.edu (mm01.cs.columbia.edu [128.59.11.253]) by mail.kernel.org (Postfix) with ESMTP id 32258611AD for ; Thu, 11 Nov 2021 02:07:47 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.1 mail.kernel.org 32258611AD Authentication-Results: mail.kernel.org; dmarc=fail (p=reject dis=none) header.from=google.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=lists.cs.columbia.edu Received: from localhost (localhost [127.0.0.1]) by mm01.cs.columbia.edu (Postfix) with ESMTP id 9D3214B17C; Wed, 10 Nov 2021 21:07:46 -0500 (EST) X-Virus-Scanned: at lists.cs.columbia.edu Authentication-Results: mm01.cs.columbia.edu (amavisd-new); dkim=softfail (fail, message has been altered) header.i=@google.com Received: from mm01.cs.columbia.edu ([127.0.0.1]) by localhost (mm01.cs.columbia.edu [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id d6PoDU0uwwDa; Wed, 10 Nov 2021 21:07:44 -0500 (EST) Received: from mm01.cs.columbia.edu (localhost [127.0.0.1]) by mm01.cs.columbia.edu (Postfix) with ESMTP id E3E054B162; Wed, 10 Nov 2021 21:07:44 -0500 (EST) Received: from localhost (localhost [127.0.0.1]) by mm01.cs.columbia.edu (Postfix) with ESMTP id 29D1C4B15A for ; Wed, 10 Nov 2021 21:07:44 -0500 (EST) X-Virus-Scanned: at lists.cs.columbia.edu Received: from mm01.cs.columbia.edu ([127.0.0.1]) by localhost (mm01.cs.columbia.edu [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id ArkwTCbGJnfi for ; Wed, 10 Nov 2021 21:07:42 -0500 (EST) Received: from mail-pg1-f202.google.com (mail-pg1-f202.google.com [209.85.215.202]) by mm01.cs.columbia.edu (Postfix) with ESMTPS id 17A954B12E for ; Wed, 10 Nov 2021 21:07:42 -0500 (EST) Received: by mail-pg1-f202.google.com with SMTP id t75-20020a63784e000000b002993a9284b0so2485803pgc.11 for ; Wed, 10 Nov 2021 18:07:42 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=reply-to:date:message-id:mime-version:subject:from:to:cc; bh=tUIQRP/L4Fp0gX6OhmNi7HbxcL+5uZ5JBj+c5s8Epc0=; b=SHNbfqTm3J0sCYDnSCPJl2DJ6T9yOTXJQHvuHx8d04TG6gGxpzfaf/C1v4gFFxrBPV Nqw7AUHS01qZz0UD93QTZiHv9vFDhe2GdeiYEKJ4f9tX2pvUysavfJFD5gQ4gNAG6pKe lJuw7Z3tdfLgDKejGON+MO9SGmEzmVIPRzmdTSDCNpCRdZIISx15JlmN7eHU6e0hABbO ggSU2q0H1akcoFCvWhLk23HEYoCc8zZRMmEW+nbv3sbHxH0cDekH6WrEbtb1X+tgaA6k FbiWW2J5zLyfWA9uMi2CyYilMp6JqRACLddKb1B7Cqi9I+sv88k2AOHAQxuAqltrxkop Ei4A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:reply-to:date:message-id:mime-version:subject :from:to:cc; bh=tUIQRP/L4Fp0gX6OhmNi7HbxcL+5uZ5JBj+c5s8Epc0=; b=FNvIUxEW9iEl8Eua1nr85TjvXjGkZS+yJoSln3paaB33iYc3Sq59EJPipW+yw1oPvq zsURWZnVQbl4EPCG6krcLwSsSh+oG3ZSpkLr6THGLxtFmqcsX4ZFEQTyPvCojHDSBbpe a4wOY413Zgolx3EiFoxKBTJiAS6guCBRRCp2KxpmhVGTRptxP8zpTbLnWAookRQgZ0nS ZjKEJfw5CfDH3MQMYuTB6rcprnxG9WaZ2BjySFiL8hsaQ95HIpBfBf/11NDvB0J86By3 9lgg3UwjBr16aZXhyBVLI6V/PFfE3+h0URkdWfboZoyzn4BZ6xZB4qb1Dod8QDrHy4mM Sg5w== X-Gm-Message-State: AOAM531Uu/jQqK+ASjy6ZVB5Hkm8ytZyzPngMxriRotzV5WHHk67pvJb zCzCc91jyiUfmAkjj7hbD36XNk70d/4= X-Google-Smtp-Source: ABdhPJyLbpoo29ePfTjvBFgohxjl3NBLChAqmG4K4wYBtXh/2rWx5xqvq1BN1sRzHdfKDemaaNnkz7tBMNU= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a17:903:2004:b0:142:6344:2c08 with SMTP id s4-20020a170903200400b0014263442c08mr3739627pla.51.1636596461111; Wed, 10 Nov 2021 18:07:41 -0800 (PST) Date: Thu, 11 Nov 2021 02:07:21 +0000 Message-Id: <20211111020738.2512932-1-seanjc@google.com> Mime-Version: 1.0 X-Mailer: git-send-email 2.34.0.rc0.344.g81b53c2807-goog Subject: [PATCH v4 00/17] perf: KVM: Fix, optimize, and clean up callbacks From: Sean Christopherson To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Will Deacon , Mark Rutland , Russell King , Marc Zyngier , Catalin Marinas , Guo Ren , Nick Hu , Greentime Hu , Vincent Chen , Paul Walmsley , Palmer Dabbelt , Albert Ou , Thomas Gleixner , Borislav Petkov , Dave Hansen , x86@kernel.org, Paolo Bonzini , Boris Ostrovsky , Juergen Gross Cc: Wanpeng Li , kvm@vger.kernel.org, Alexander Shishkin , "H. Peter Anvin" , linux-riscv@lists.infradead.org, Jiri Olsa , kvmarm@lists.cs.columbia.edu, Stefano Stabellini , Like Xu , Joerg Roedel , linux-csky@vger.kernel.org, xen-devel@lists.xenproject.org, Zhu Lingshan , Namhyung Kim , Artem Kashkanov , linux-arm-kernel@lists.infradead.org, Jim Mattson , Like Xu , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org, Vitaly Kuznetsov X-BeenThere: kvmarm@lists.cs.columbia.edu X-Mailman-Version: 2.1.14 Precedence: list Reply-To: Sean Christopherson List-Id: Where KVM/ARM decisions are made List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: kvmarm-bounces@lists.cs.columbia.edu Sender: kvmarm-bounces@lists.cs.columbia.edu This is a combination of ~2 series to fix bugs in the perf+KVM callbacks, optimize the callbacks by employing static_call, and do a variety of cleanup in both perf and KVM. For the non-perf patches, I think everything except patch 13 (Paolo) and patches 15 and 16 (Marc) has the appropriate acks. Patch 1 fixes a set of mostly-theoretical bugs by protecting the guest callbacks pointer with RCU. Patches 2 and 3 fix an Intel PT handling bug where KVM incorrectly eats PT interrupts when PT is supposed to be owned entirely by the host. Patches 4-9 clean up perf's callback infrastructure and switch to static_call for arm64 and x86 (the only survivors). Patches 10-17 clean up related KVM code and unify the arm64/x86 callbacks. Based on Linus' tree, commit cb690f5238d7 ("Merge tag 'for-5.16/drivers...). v4: - Rebase. - Collect acks and reviews. - Fully protect perf_guest_cbs with RCU. [Paolo]. - Add patch to hide arm64's kvm_arm_pmu_available behind CONFIG_HW_PERF_EVENTS=y. v3: - https://lore.kernel.org/all/20210922000533.713300-1-seanjc@google.com/ - Add wrappers for guest callbacks to that stubs can be provided when GUEST_PERF_EVENTS=n. - s/HAVE_GUEST_PERF_EVENTS/GUEST_PERF_EVENTS and select it from KVM and XEN_PV instead of from top-level arm64/x86. [Paolo] - Drop an unnecessary synchronize_rcu() when registering callbacks. [Peter] - Retain a WARN_ON_ONCE() when unregistering callbacks if the caller didn't provide the correct pointer. [Peter] - Rework the static_call patch to move it all to common perf. - Add a patch to drop the (un)register stubs, made possible after having KVM+XEN_PV select GUEST_PERF_EVENTS. - Split dropping guest callback "support" for arm, csky, etc... to a separate patch, to make introducing GUEST_PERF_EVENTS cleaner. v2 (relative to static_call v10): - Split the patch into the semantic change (multiplexed ->state) and introduction of static_call. - Don't use '0' for "not a guest RIP". - Handle unregister path. - Drop changes for architectures that can be culled entirely. v2 (relative to v1): - https://lkml.kernel.org/r/20210828003558.713983-6-seanjc@google.com - Drop per-cpu approach. [Peter] - Fix mostly-theoretical reload and use-after-free with READ_ONCE(), WRITE_ONCE(), and synchronize_rcu(). [Peter] - Avoid new exports like the plague. [Peter] v1: - https://lkml.kernel.org/r/20210827005718.585190-1-seanjc@google.com v10 static_call: - https://lkml.kernel.org/r/20210806133802.3528-2-lingshan.zhu@intel.com Like Xu (1): perf/core: Rework guest callbacks to prepare for static_call support Sean Christopherson (16): perf: Protect perf_guest_cbs with RCU KVM: x86: Register perf callbacks after calling vendor's hardware_setup() KVM: x86: Register Processor Trace interrupt hook iff PT enabled in guest perf: Stop pretending that perf can handle multiple guest callbacks perf: Drop dead and useless guest "support" from arm, csky, nds32 and riscv perf: Add wrappers for invoking guest callbacks perf: Force architectures to opt-in to guest callbacks perf/core: Use static_call to optimize perf_guest_info_callbacks KVM: x86: Drop current_vcpu for kvm_running_vcpu + kvm_arch_vcpu variable KVM: x86: More precisely identify NMI from guest when handling PMI KVM: Move x86's perf guest info callbacks to generic KVM KVM: x86: Move Intel Processor Trace interrupt handler to vmx.c KVM: arm64: Convert to the generic perf callbacks KVM: arm64: Hide kvm_arm_pmu_available behind CONFIG_HW_PERF_EVENTS=y KVM: arm64: Drop perf.c and fold its tiny bits of code into arm.c perf: Drop guest callback (un)register stubs arch/arm/kernel/perf_callchain.c | 28 ++------------ arch/arm64/include/asm/kvm_host.h | 11 +++++- arch/arm64/kernel/image-vars.h | 2 + arch/arm64/kernel/perf_callchain.c | 13 ++++--- arch/arm64/kvm/Kconfig | 1 + arch/arm64/kvm/Makefile | 2 +- arch/arm64/kvm/arm.c | 10 ++++- arch/arm64/kvm/perf.c | 59 ------------------------------ arch/arm64/kvm/pmu-emul.c | 2 + arch/csky/kernel/perf_callchain.c | 10 ----- arch/nds32/kernel/perf_event_cpu.c | 29 ++------------- arch/riscv/kernel/perf_callchain.c | 10 ----- arch/x86/events/core.c | 13 ++++--- arch/x86/events/intel/core.c | 5 +-- arch/x86/include/asm/kvm_host.h | 7 +++- arch/x86/kvm/Kconfig | 1 + arch/x86/kvm/pmu.c | 2 +- arch/x86/kvm/svm/svm.c | 2 +- arch/x86/kvm/vmx/vmx.c | 25 ++++++++++++- arch/x86/kvm/x86.c | 58 +++++------------------------ arch/x86/kvm/x86.h | 17 +++++++-- arch/x86/xen/Kconfig | 1 + arch/x86/xen/pmu.c | 32 +++++++--------- include/kvm/arm_pmu.h | 19 ++++++---- include/linux/kvm_host.h | 10 +++++ include/linux/perf_event.h | 44 ++++++++++++++++------ init/Kconfig | 4 ++ kernel/events/core.c | 41 +++++++++++++++------ virt/kvm/kvm_main.c | 44 ++++++++++++++++++++++ 29 files changed, 246 insertions(+), 256 deletions(-) delete mode 100644 arch/arm64/kvm/perf.c -- 2.34.0.rc0.344.g81b53c2807-goog _______________________________________________ kvmarm mailing list kvmarm@lists.cs.columbia.edu https://lists.cs.columbia.edu/mailman/listinfo/kvmarm From mboxrd@z Thu Jan 1 00:00:00 1970 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 mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 4B027C433EF for ; Thu, 11 Nov 2021 02:07:43 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 31C866128E for ; Thu, 11 Nov 2021 02:07:43 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233633AbhKKCKa (ORCPT ); Wed, 10 Nov 2021 21:10:30 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:60184 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233453AbhKKCK3 (ORCPT ); Wed, 10 Nov 2021 21:10:29 -0500 Received: from mail-pg1-x549.google.com (mail-pg1-x549.google.com [IPv6:2607:f8b0:4864:20::549]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id ABD0AC06127A for ; Wed, 10 Nov 2021 18:07:41 -0800 (PST) Received: by mail-pg1-x549.google.com with SMTP id 70-20020a630149000000b002da385ceffaso2468577pgb.17 for ; Wed, 10 Nov 2021 18:07:41 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=reply-to:date:message-id:mime-version:subject:from:to:cc; bh=tUIQRP/L4Fp0gX6OhmNi7HbxcL+5uZ5JBj+c5s8Epc0=; b=SHNbfqTm3J0sCYDnSCPJl2DJ6T9yOTXJQHvuHx8d04TG6gGxpzfaf/C1v4gFFxrBPV Nqw7AUHS01qZz0UD93QTZiHv9vFDhe2GdeiYEKJ4f9tX2pvUysavfJFD5gQ4gNAG6pKe lJuw7Z3tdfLgDKejGON+MO9SGmEzmVIPRzmdTSDCNpCRdZIISx15JlmN7eHU6e0hABbO ggSU2q0H1akcoFCvWhLk23HEYoCc8zZRMmEW+nbv3sbHxH0cDekH6WrEbtb1X+tgaA6k FbiWW2J5zLyfWA9uMi2CyYilMp6JqRACLddKb1B7Cqi9I+sv88k2AOHAQxuAqltrxkop Ei4A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:reply-to:date:message-id:mime-version:subject :from:to:cc; bh=tUIQRP/L4Fp0gX6OhmNi7HbxcL+5uZ5JBj+c5s8Epc0=; b=7Ei6+yz3fa7bGxprI3KS/SmO9i8eRFkBL5y3CfBArXd4/puwPCEaV46JVkR3cvgYe5 A1LAO3YROMIyhHKVRv8faX4dv3B2KNJ0Ad9cdGb+tNe5aWlBWCHaH4tU8ZbvV86ijdLt 1AA1wCqybtz/0bNyOBpFtY6+FRr7gSsP0Y8RnPSYNWoNoSiJ71cG3ZBRnRRhOBKoRKRC We44/UUNaZX3+7+EZvBEwFUy6EQgHxmbnFf83jceu191F3HsM0akZdZTqczh5VCife9b FIuy7zaquomfJJ5zTR8WJus0R0znJz75lBFgnTJEYBPrSeOBwGw5EnhK02Ye2eFnQpDL lpLw== X-Gm-Message-State: AOAM532ioGIybMB8GsSMkWgI+WMgnmZdgUEKc5eF7fsNiFts5FzKKUPh gI/2AeW6TYgBZujPx5E7r/s0lrB/AMQ= X-Google-Smtp-Source: ABdhPJyLbpoo29ePfTjvBFgohxjl3NBLChAqmG4K4wYBtXh/2rWx5xqvq1BN1sRzHdfKDemaaNnkz7tBMNU= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a17:903:2004:b0:142:6344:2c08 with SMTP id s4-20020a170903200400b0014263442c08mr3739627pla.51.1636596461111; Wed, 10 Nov 2021 18:07:41 -0800 (PST) Reply-To: Sean Christopherson Date: Thu, 11 Nov 2021 02:07:21 +0000 Message-Id: <20211111020738.2512932-1-seanjc@google.com> Mime-Version: 1.0 X-Mailer: git-send-email 2.34.0.rc0.344.g81b53c2807-goog Subject: [PATCH v4 00/17] perf: KVM: Fix, optimize, and clean up callbacks From: Sean Christopherson To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Will Deacon , Mark Rutland , Russell King , Marc Zyngier , Catalin Marinas , Guo Ren , Nick Hu , Greentime Hu , Vincent Chen , Paul Walmsley , Palmer Dabbelt , Albert Ou , Thomas Gleixner , Borislav Petkov , Dave Hansen , x86@kernel.org, Paolo Bonzini , Boris Ostrovsky , Juergen Gross Cc: Alexander Shishkin , Jiri Olsa , Namhyung Kim , James Morse , Alexandru Elisei , Suzuki K Poulose , "H. Peter Anvin" , Sean Christopherson , Vitaly Kuznetsov , Wanpeng Li , Jim Mattson , Joerg Roedel , Stefano Stabellini , linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, kvmarm@lists.cs.columbia.edu, linux-csky@vger.kernel.org, linux-riscv@lists.infradead.org, kvm@vger.kernel.org, xen-devel@lists.xenproject.org, Artem Kashkanov , Like Xu , Like Xu , Zhu Lingshan Content-Type: text/plain; charset="UTF-8" Precedence: bulk List-ID: X-Mailing-List: linux-csky@vger.kernel.org This is a combination of ~2 series to fix bugs in the perf+KVM callbacks, optimize the callbacks by employing static_call, and do a variety of cleanup in both perf and KVM. For the non-perf patches, I think everything except patch 13 (Paolo) and patches 15 and 16 (Marc) has the appropriate acks. Patch 1 fixes a set of mostly-theoretical bugs by protecting the guest callbacks pointer with RCU. Patches 2 and 3 fix an Intel PT handling bug where KVM incorrectly eats PT interrupts when PT is supposed to be owned entirely by the host. Patches 4-9 clean up perf's callback infrastructure and switch to static_call for arm64 and x86 (the only survivors). Patches 10-17 clean up related KVM code and unify the arm64/x86 callbacks. Based on Linus' tree, commit cb690f5238d7 ("Merge tag 'for-5.16/drivers...). v4: - Rebase. - Collect acks and reviews. - Fully protect perf_guest_cbs with RCU. [Paolo]. - Add patch to hide arm64's kvm_arm_pmu_available behind CONFIG_HW_PERF_EVENTS=y. v3: - https://lore.kernel.org/all/20210922000533.713300-1-seanjc@google.com/ - Add wrappers for guest callbacks to that stubs can be provided when GUEST_PERF_EVENTS=n. - s/HAVE_GUEST_PERF_EVENTS/GUEST_PERF_EVENTS and select it from KVM and XEN_PV instead of from top-level arm64/x86. [Paolo] - Drop an unnecessary synchronize_rcu() when registering callbacks. [Peter] - Retain a WARN_ON_ONCE() when unregistering callbacks if the caller didn't provide the correct pointer. [Peter] - Rework the static_call patch to move it all to common perf. - Add a patch to drop the (un)register stubs, made possible after having KVM+XEN_PV select GUEST_PERF_EVENTS. - Split dropping guest callback "support" for arm, csky, etc... to a separate patch, to make introducing GUEST_PERF_EVENTS cleaner. v2 (relative to static_call v10): - Split the patch into the semantic change (multiplexed ->state) and introduction of static_call. - Don't use '0' for "not a guest RIP". - Handle unregister path. - Drop changes for architectures that can be culled entirely. v2 (relative to v1): - https://lkml.kernel.org/r/20210828003558.713983-6-seanjc@google.com - Drop per-cpu approach. [Peter] - Fix mostly-theoretical reload and use-after-free with READ_ONCE(), WRITE_ONCE(), and synchronize_rcu(). [Peter] - Avoid new exports like the plague. [Peter] v1: - https://lkml.kernel.org/r/20210827005718.585190-1-seanjc@google.com v10 static_call: - https://lkml.kernel.org/r/20210806133802.3528-2-lingshan.zhu@intel.com Like Xu (1): perf/core: Rework guest callbacks to prepare for static_call support Sean Christopherson (16): perf: Protect perf_guest_cbs with RCU KVM: x86: Register perf callbacks after calling vendor's hardware_setup() KVM: x86: Register Processor Trace interrupt hook iff PT enabled in guest perf: Stop pretending that perf can handle multiple guest callbacks perf: Drop dead and useless guest "support" from arm, csky, nds32 and riscv perf: Add wrappers for invoking guest callbacks perf: Force architectures to opt-in to guest callbacks perf/core: Use static_call to optimize perf_guest_info_callbacks KVM: x86: Drop current_vcpu for kvm_running_vcpu + kvm_arch_vcpu variable KVM: x86: More precisely identify NMI from guest when handling PMI KVM: Move x86's perf guest info callbacks to generic KVM KVM: x86: Move Intel Processor Trace interrupt handler to vmx.c KVM: arm64: Convert to the generic perf callbacks KVM: arm64: Hide kvm_arm_pmu_available behind CONFIG_HW_PERF_EVENTS=y KVM: arm64: Drop perf.c and fold its tiny bits of code into arm.c perf: Drop guest callback (un)register stubs arch/arm/kernel/perf_callchain.c | 28 ++------------ arch/arm64/include/asm/kvm_host.h | 11 +++++- arch/arm64/kernel/image-vars.h | 2 + arch/arm64/kernel/perf_callchain.c | 13 ++++--- arch/arm64/kvm/Kconfig | 1 + arch/arm64/kvm/Makefile | 2 +- arch/arm64/kvm/arm.c | 10 ++++- arch/arm64/kvm/perf.c | 59 ------------------------------ arch/arm64/kvm/pmu-emul.c | 2 + arch/csky/kernel/perf_callchain.c | 10 ----- arch/nds32/kernel/perf_event_cpu.c | 29 ++------------- arch/riscv/kernel/perf_callchain.c | 10 ----- arch/x86/events/core.c | 13 ++++--- arch/x86/events/intel/core.c | 5 +-- arch/x86/include/asm/kvm_host.h | 7 +++- arch/x86/kvm/Kconfig | 1 + arch/x86/kvm/pmu.c | 2 +- arch/x86/kvm/svm/svm.c | 2 +- arch/x86/kvm/vmx/vmx.c | 25 ++++++++++++- arch/x86/kvm/x86.c | 58 +++++------------------------ arch/x86/kvm/x86.h | 17 +++++++-- arch/x86/xen/Kconfig | 1 + arch/x86/xen/pmu.c | 32 +++++++--------- include/kvm/arm_pmu.h | 19 ++++++---- include/linux/kvm_host.h | 10 +++++ include/linux/perf_event.h | 44 ++++++++++++++++------ init/Kconfig | 4 ++ kernel/events/core.c | 41 +++++++++++++++------ virt/kvm/kvm_main.c | 44 ++++++++++++++++++++++ 29 files changed, 246 insertions(+), 256 deletions(-) delete mode 100644 arch/arm64/kvm/perf.c -- 2.34.0.rc0.344.g81b53c2807-goog From mboxrd@z Thu Jan 1 00:00:00 1970 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 mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 36CC8C433F5 for ; Thu, 11 Nov 2021 02:08:47 +0000 (UTC) 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 mail.kernel.org (Postfix) with ESMTPS id EC13161073 for ; Thu, 11 Nov 2021 02:08:46 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.1 mail.kernel.org EC13161073 Authentication-Results: mail.kernel.org; dmarc=fail (p=reject dis=none) header.from=google.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=lists.infradead.org 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:Reply-To:List-Subscribe:List-Help: List-Post:List-Archive:List-Unsubscribe:List-Id:Cc:To:From:Subject: Mime-Version:Message-Id:Date:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:In-Reply-To: References:List-Owner; bh=CCveXv+0S/nmRd5tHL2UFLj7oASccEDNXdJiAnyljjg=; b=xkm M4DVQwk/XbKwjcnLSJQpt4rZjrsNEkX4Z3+/FIysaLXn4zqW/5pHikclyF2pYvFhOn27EjHQ+K/mI lXm1MpqiuFKlRoEoV1+PZeXGU6mJsZ+2H9BY33oox+REpEar8FQnP/aG/+p+gWSkMekW1I7GwbbSg JPBGm5sbDmfrw3Armmm3LqarXPTyme1dw/BMeKb7x+xh3Ko8E7j/yK75/i/5IRnUcJECo70d5PDLl +DfLHuJs4tfjmyAULhrf54E2XYa+QwX89v9Q5vLtLBMHCFAogkBHRldLdKK06GpEkVvZE5wGNnlej ekZ1c/nkfDjn1k/s2XTMfCF502sm6Ww==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1mkzVW-006kfa-My; Thu, 11 Nov 2021 02:08:06 +0000 Received: from mail-pg1-x549.google.com ([2607:f8b0:4864:20::549]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1mkzV9-006kLp-6d for linux-riscv@lists.infradead.org; Thu, 11 Nov 2021 02:07:45 +0000 Received: by mail-pg1-x549.google.com with SMTP id j18-20020a63fc12000000b002dd2237eb1cso2507740pgi.5 for ; Wed, 10 Nov 2021 18:07:41 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=reply-to:date:message-id:mime-version:subject:from:to:cc; bh=tUIQRP/L4Fp0gX6OhmNi7HbxcL+5uZ5JBj+c5s8Epc0=; b=SHNbfqTm3J0sCYDnSCPJl2DJ6T9yOTXJQHvuHx8d04TG6gGxpzfaf/C1v4gFFxrBPV Nqw7AUHS01qZz0UD93QTZiHv9vFDhe2GdeiYEKJ4f9tX2pvUysavfJFD5gQ4gNAG6pKe lJuw7Z3tdfLgDKejGON+MO9SGmEzmVIPRzmdTSDCNpCRdZIISx15JlmN7eHU6e0hABbO ggSU2q0H1akcoFCvWhLk23HEYoCc8zZRMmEW+nbv3sbHxH0cDekH6WrEbtb1X+tgaA6k FbiWW2J5zLyfWA9uMi2CyYilMp6JqRACLddKb1B7Cqi9I+sv88k2AOHAQxuAqltrxkop Ei4A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:reply-to:date:message-id:mime-version:subject :from:to:cc; bh=tUIQRP/L4Fp0gX6OhmNi7HbxcL+5uZ5JBj+c5s8Epc0=; b=6/ChesKiolyrnAoiq69GNGfogni63aPYGSWYCaeLN7yH8+C1lfveKwt35Huv4FmHms jmyftGhNaA3EQSlPoeiLz2v2NmMTQMj0MQdV4pC91ohFEiPPfwsGnYgobLlFLWp+noF7 bTB8vZ7/jzsQbjvB6Io1jPY5vNl6OQNVFCULqK4b41LAVDpmltAWENsgVWC0ZmDMUI7p hRpSO3oyQPJ78LH21Jt3b+TGLYKw+vPUGOotnjxCsgWjGJTI55VGHNXxBkxxT04G8Bdw WzHdO+XWN6KTTWt5dsMevxYXMxH9OGR2AWrg98PQIq/wFIZmLA5fwW4HkOyLZsAWSgW2 FBXg== X-Gm-Message-State: AOAM533DpKp1KuHFiSk3yYJpOx6ejwx/EqoQ0HJgG0rh1AWTXR3sx2ip i1kP72yrZtZn+YZtLMbl+/LYuA3mATA= X-Google-Smtp-Source: ABdhPJyLbpoo29ePfTjvBFgohxjl3NBLChAqmG4K4wYBtXh/2rWx5xqvq1BN1sRzHdfKDemaaNnkz7tBMNU= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a17:903:2004:b0:142:6344:2c08 with SMTP id s4-20020a170903200400b0014263442c08mr3739627pla.51.1636596461111; Wed, 10 Nov 2021 18:07:41 -0800 (PST) Date: Thu, 11 Nov 2021 02:07:21 +0000 Message-Id: <20211111020738.2512932-1-seanjc@google.com> Mime-Version: 1.0 X-Mailer: git-send-email 2.34.0.rc0.344.g81b53c2807-goog Subject: [PATCH v4 00/17] perf: KVM: Fix, optimize, and clean up callbacks From: Sean Christopherson To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Will Deacon , Mark Rutland , Russell King , Marc Zyngier , Catalin Marinas , Guo Ren , Nick Hu , Greentime Hu , Vincent Chen , Paul Walmsley , Palmer Dabbelt , Albert Ou , Thomas Gleixner , Borislav Petkov , Dave Hansen , x86@kernel.org, Paolo Bonzini , Boris Ostrovsky , Juergen Gross Cc: Alexander Shishkin , Jiri Olsa , Namhyung Kim , James Morse , Alexandru Elisei , Suzuki K Poulose , "H. Peter Anvin" , Sean Christopherson , Vitaly Kuznetsov , Wanpeng Li , Jim Mattson , Joerg Roedel , Stefano Stabellini , linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, kvmarm@lists.cs.columbia.edu, linux-csky@vger.kernel.org, linux-riscv@lists.infradead.org, kvm@vger.kernel.org, xen-devel@lists.xenproject.org, Artem Kashkanov , Like Xu , Like Xu , Zhu Lingshan X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20211110_180743_257053_83552E19 X-CRM114-Status: GOOD ( 19.28 ) X-BeenThere: linux-riscv@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: Sean Christopherson Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: "linux-riscv" Errors-To: linux-riscv-bounces+linux-riscv=archiver.kernel.org@lists.infradead.org This is a combination of ~2 series to fix bugs in the perf+KVM callbacks, optimize the callbacks by employing static_call, and do a variety of cleanup in both perf and KVM. For the non-perf patches, I think everything except patch 13 (Paolo) and patches 15 and 16 (Marc) has the appropriate acks. Patch 1 fixes a set of mostly-theoretical bugs by protecting the guest callbacks pointer with RCU. Patches 2 and 3 fix an Intel PT handling bug where KVM incorrectly eats PT interrupts when PT is supposed to be owned entirely by the host. Patches 4-9 clean up perf's callback infrastructure and switch to static_call for arm64 and x86 (the only survivors). Patches 10-17 clean up related KVM code and unify the arm64/x86 callbacks. Based on Linus' tree, commit cb690f5238d7 ("Merge tag 'for-5.16/drivers...). v4: - Rebase. - Collect acks and reviews. - Fully protect perf_guest_cbs with RCU. [Paolo]. - Add patch to hide arm64's kvm_arm_pmu_available behind CONFIG_HW_PERF_EVENTS=y. v3: - https://lore.kernel.org/all/20210922000533.713300-1-seanjc@google.com/ - Add wrappers for guest callbacks to that stubs can be provided when GUEST_PERF_EVENTS=n. - s/HAVE_GUEST_PERF_EVENTS/GUEST_PERF_EVENTS and select it from KVM and XEN_PV instead of from top-level arm64/x86. [Paolo] - Drop an unnecessary synchronize_rcu() when registering callbacks. [Peter] - Retain a WARN_ON_ONCE() when unregistering callbacks if the caller didn't provide the correct pointer. [Peter] - Rework the static_call patch to move it all to common perf. - Add a patch to drop the (un)register stubs, made possible after having KVM+XEN_PV select GUEST_PERF_EVENTS. - Split dropping guest callback "support" for arm, csky, etc... to a separate patch, to make introducing GUEST_PERF_EVENTS cleaner. v2 (relative to static_call v10): - Split the patch into the semantic change (multiplexed ->state) and introduction of static_call. - Don't use '0' for "not a guest RIP". - Handle unregister path. - Drop changes for architectures that can be culled entirely. v2 (relative to v1): - https://lkml.kernel.org/r/20210828003558.713983-6-seanjc@google.com - Drop per-cpu approach. [Peter] - Fix mostly-theoretical reload and use-after-free with READ_ONCE(), WRITE_ONCE(), and synchronize_rcu(). [Peter] - Avoid new exports like the plague. [Peter] v1: - https://lkml.kernel.org/r/20210827005718.585190-1-seanjc@google.com v10 static_call: - https://lkml.kernel.org/r/20210806133802.3528-2-lingshan.zhu@intel.com Like Xu (1): perf/core: Rework guest callbacks to prepare for static_call support Sean Christopherson (16): perf: Protect perf_guest_cbs with RCU KVM: x86: Register perf callbacks after calling vendor's hardware_setup() KVM: x86: Register Processor Trace interrupt hook iff PT enabled in guest perf: Stop pretending that perf can handle multiple guest callbacks perf: Drop dead and useless guest "support" from arm, csky, nds32 and riscv perf: Add wrappers for invoking guest callbacks perf: Force architectures to opt-in to guest callbacks perf/core: Use static_call to optimize perf_guest_info_callbacks KVM: x86: Drop current_vcpu for kvm_running_vcpu + kvm_arch_vcpu variable KVM: x86: More precisely identify NMI from guest when handling PMI KVM: Move x86's perf guest info callbacks to generic KVM KVM: x86: Move Intel Processor Trace interrupt handler to vmx.c KVM: arm64: Convert to the generic perf callbacks KVM: arm64: Hide kvm_arm_pmu_available behind CONFIG_HW_PERF_EVENTS=y KVM: arm64: Drop perf.c and fold its tiny bits of code into arm.c perf: Drop guest callback (un)register stubs arch/arm/kernel/perf_callchain.c | 28 ++------------ arch/arm64/include/asm/kvm_host.h | 11 +++++- arch/arm64/kernel/image-vars.h | 2 + arch/arm64/kernel/perf_callchain.c | 13 ++++--- arch/arm64/kvm/Kconfig | 1 + arch/arm64/kvm/Makefile | 2 +- arch/arm64/kvm/arm.c | 10 ++++- arch/arm64/kvm/perf.c | 59 ------------------------------ arch/arm64/kvm/pmu-emul.c | 2 + arch/csky/kernel/perf_callchain.c | 10 ----- arch/nds32/kernel/perf_event_cpu.c | 29 ++------------- arch/riscv/kernel/perf_callchain.c | 10 ----- arch/x86/events/core.c | 13 ++++--- arch/x86/events/intel/core.c | 5 +-- arch/x86/include/asm/kvm_host.h | 7 +++- arch/x86/kvm/Kconfig | 1 + arch/x86/kvm/pmu.c | 2 +- arch/x86/kvm/svm/svm.c | 2 +- arch/x86/kvm/vmx/vmx.c | 25 ++++++++++++- arch/x86/kvm/x86.c | 58 +++++------------------------ arch/x86/kvm/x86.h | 17 +++++++-- arch/x86/xen/Kconfig | 1 + arch/x86/xen/pmu.c | 32 +++++++--------- include/kvm/arm_pmu.h | 19 ++++++---- include/linux/kvm_host.h | 10 +++++ include/linux/perf_event.h | 44 ++++++++++++++++------ init/Kconfig | 4 ++ kernel/events/core.c | 41 +++++++++++++++------ virt/kvm/kvm_main.c | 44 ++++++++++++++++++++++ 29 files changed, 246 insertions(+), 256 deletions(-) delete mode 100644 arch/arm64/kvm/perf.c -- 2.34.0.rc0.344.g81b53c2807-goog _______________________________________________ linux-riscv mailing list linux-riscv@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-riscv