From patchwork Tue Jan 24 23:49:00 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Christopherson X-Patchwork-Id: 47968 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:eb09:0:0:0:0:0 with SMTP id s9csp219wrn; Tue, 24 Jan 2023 16:00:27 -0800 (PST) X-Google-Smtp-Source: AMrXdXsK07hulDQCUHEtN0MmbInjV2bwgysz5cI7hzK68mAzYlwQsGxhvFVejdxRDh78wyH74Ytv X-Received: by 2002:a05:6a21:398d:b0:b9:19b0:d58a with SMTP id ad13-20020a056a21398d00b000b919b0d58amr26849322pzc.31.1674604826686; Tue, 24 Jan 2023 16:00:26 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1674604826; cv=none; d=google.com; s=arc-20160816; b=WfwhGPY0Ewem/B+xlhhF0m60aDMczSFMwJHZVSS/RyzsBBBBGtpXadKI8L2bsLfN2O APIBatMpNUELKhWpMhbGVlePaIOM5ITGP1CAcKUWgksWA5Y35ZUJxYVb/n416aB0uIZ1 NmJW6CM9KkiyRTRvOvPyvTwupRHP15FeQL0rYPYOriogosZHw7nls4IanV8TpOwPs6ug p2OsJg3D7lTsUiCJV8rRCHvF1WA3YDb81xTfpseJNMnwS2sbOiFERHMUmYlNH4D6pAw0 PNKbJX62v0BTEsT4zgmSzRqDhO+y37O2l4jirw3TUZawRmpzP9CoCbbAOBuELvnyeLJR 7aaQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:from:subject:message-id:references :mime-version:in-reply-to:date:reply-to:dkim-signature; bh=xHI4355sZtl+nMxSrviADFAGPhVPX2cjlZsacGsw9pI=; b=yJFhJ1v4ANhBA6MO81JsDPetdLS04cy9jG0eDymyOQSJiv5u2PVEdVdy2VE/3/oyJk w2WnloZdI41d8CIDbZU4EpYg0j7SxODcVXvVwFyuf7cZttbi7CHxseJx4tYmGHHb2xmv 6eUEJx52Ms/q4dHe8FguOwVaTkFcCSvpA87EU+/lgH96y3ZJ1QlUWs5PMAfoGHQ8oFit BSKGEa4GVVP3hJhPb1s/ivtqD6pdDySJ8o7b4Z6+fy/UVqBgNP6alezwD1M09a6utTcB dO1FmO+0I7W3zuLdVm8kT92uCS9xxFXCSxlj2eu3eNLbt1S23B9DwCC//F6EDPj+EBms VteA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=RAAd1Iu4; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id e7-20020a63aa07000000b004cf5e2fd7d6si3612415pgf.34.2023.01.24.16.00.09; Tue, 24 Jan 2023 16:00:26 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=RAAd1Iu4; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234327AbjAXXtS (ORCPT + 99 others); Tue, 24 Jan 2023 18:49:18 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48748 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234273AbjAXXtQ (ORCPT ); Tue, 24 Jan 2023 18:49:16 -0500 Received: from mail-pf1-x449.google.com (mail-pf1-x449.google.com [IPv6:2607:f8b0:4864:20::449]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 8C7A2D3 for ; Tue, 24 Jan 2023 15:49:15 -0800 (PST) Received: by mail-pf1-x449.google.com with SMTP id a18-20020a62bd12000000b0056e7b61ec78so7396912pff.17 for ; Tue, 24 Jan 2023 15:49:15 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:from:to:cc:subject:date:message-id:reply-to; bh=xHI4355sZtl+nMxSrviADFAGPhVPX2cjlZsacGsw9pI=; b=RAAd1Iu4UYOh1XsF8Cfe52BTlzhxuWODb0kKCcvoM9rqv0AU2jMW7496Q3aayEBvSQ neTdVSs7NeBj8zQJoFhhPzVm4joC8mZ8YbsOFxm5lNQKU799j0EnbwviVogAmKs8Ab1c fqS18Q9i6Nn0gHXXGy/B2LkZR7WW+r80VpeFpfcDNbJXHe2wRky4HEb6hHsxiUCk0P8u h9rY0X2k6Jt+brsvgb/OoozZLc/VmyA2i597RiNFtjRGBnXywLqsLHtWIG4FkJethTsc V9zGA5ufPSq/AnK4LrkicqQCJOeYOFd7ga8eRDs+oArYI8rhs6ln+HkHH/9o+/AxO0cD hAXA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=xHI4355sZtl+nMxSrviADFAGPhVPX2cjlZsacGsw9pI=; b=AJg6svjFMMOtXIiVK8Cj/VEAogytnq8jBA9zjDIPO03wlZTwdQ6+PwCtKZAZiWX8AW eTp8ILvz9xy7DoOyboSgRO1HrHXCudydzi05X061zjNz9SpGLrsfCOaiz0+qZfAUctJw q3iOVAwLwH2TpULEtgfsc0szB1acDK2KpY7orbriZV3Qqkee+fS5e/UF28FC8GqdIdfR PSIe9MqRC/8ikO9W4Vl/ju4Pwom8qWnlVcP0G1YHnZE7wjfQEQ5hQhxvUduyTdj22C/u UYKnTmhg81uf+ew9Bl4XVfuGFUYFm1ZlL1E2mutiOsp/Xj9re824MtWqadU9ohKydwG1 nKLA== X-Gm-Message-State: AFqh2kp+hhWqTi2MaB3imB2BlVyTUaY0Sg0cWD0lX0qZBTNuySEOVC0n ZhHR2nZGVDNm1dZZT8jTDTUrKVt7ozo= X-Received: from zagreus.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:5c37]) (user=seanjc job=sendgmr) by 2002:aa7:972c:0:b0:579:6402:5b39 with SMTP id k12-20020aa7972c000000b0057964025b39mr3200002pfg.11.1674604155069; Tue, 24 Jan 2023 15:49:15 -0800 (PST) Reply-To: Sean Christopherson Date: Tue, 24 Jan 2023 23:49:00 +0000 In-Reply-To: <20230124234905.3774678-1-seanjc@google.com> Mime-Version: 1.0 References: <20230124234905.3774678-1-seanjc@google.com> X-Mailer: git-send-email 2.39.1.456.gfc5497dd1b-goog Message-ID: <20230124234905.3774678-2-seanjc@google.com> Subject: [PATCH 1/6] KVM: x86/pmu: Cap kvm_pmu_cap.num_counters_gp at KVM's internal max From: Sean Christopherson To: Sean Christopherson , Paolo Bonzini , Vitaly Kuznetsov Cc: kvm@vger.kernel.org, linux-kernel@vger.kernel.org, Aaron Lewis , Weijiang Yang , Like Xu X-Spam-Status: No, score=-9.6 required=5.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE,SPF_PASS,USER_IN_DEF_DKIM_WL autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1755950431004245392?= X-GMAIL-MSGID: =?utf-8?q?1755950431004245392?= Limit kvm_pmu_cap.num_counters_gp during kvm_init_pmu_capability() based on the vendor PMU capabilities so that consuming num_counters_gp naturally does the right thing. This fixes a mostly theoretical bug where KVM could over-report its PMU support in KVM_GET_SUPPORTED_CPUID for leaf 0xA, e.g. if the number of counters reported by perf is greater than KVM's hardcoded internal limit. Incorporating input from the AMD PMU also avoids over-reporting MSRs to save when running on AMD. Signed-off-by: Sean Christopherson --- arch/x86/kvm/pmu.h | 5 ++++- arch/x86/kvm/svm/pmu.c | 1 + arch/x86/kvm/vmx/pmu_intel.c | 1 + arch/x86/kvm/x86.c | 6 +++--- 4 files changed, 9 insertions(+), 4 deletions(-) diff --git a/arch/x86/kvm/pmu.h b/arch/x86/kvm/pmu.h index 30bfccc6df60..8c04e9109db0 100644 --- a/arch/x86/kvm/pmu.h +++ b/arch/x86/kvm/pmu.h @@ -42,6 +42,7 @@ struct kvm_pmu_ops { void (*cleanup)(struct kvm_vcpu *vcpu); const u64 EVENTSEL_EVENT; + const int MAX_NR_GP_COUNTERS; }; void kvm_pmu_ops_update(const struct kvm_pmu_ops *pmu_ops); @@ -163,7 +164,7 @@ static inline bool pmc_speculative_in_use(struct kvm_pmc *pmc) extern struct x86_pmu_capability kvm_pmu_cap; -static inline void kvm_init_pmu_capability(void) +static inline void kvm_init_pmu_capability(const struct kvm_pmu_ops *pmu_ops) { bool is_intel = boot_cpu_data.x86_vendor == X86_VENDOR_INTEL; @@ -182,6 +183,8 @@ static inline void kvm_init_pmu_capability(void) } kvm_pmu_cap.version = min(kvm_pmu_cap.version, 2); + kvm_pmu_cap.num_counters_gp = min(kvm_pmu_cap.num_counters_gp, + pmu_ops->MAX_NR_GP_COUNTERS); kvm_pmu_cap.num_counters_fixed = min(kvm_pmu_cap.num_counters_fixed, KVM_PMC_MAX_FIXED); } diff --git a/arch/x86/kvm/svm/pmu.c b/arch/x86/kvm/svm/pmu.c index 5da8c292e3e3..cc77a0681800 100644 --- a/arch/x86/kvm/svm/pmu.c +++ b/arch/x86/kvm/svm/pmu.c @@ -232,4 +232,5 @@ struct kvm_pmu_ops amd_pmu_ops __initdata = { .init = amd_pmu_init, .reset = amd_pmu_reset, .EVENTSEL_EVENT = AMD64_EVENTSEL_EVENT, + .MAX_NR_GP_COUNTERS = KVM_AMD_PMC_MAX_GENERIC, }; diff --git a/arch/x86/kvm/vmx/pmu_intel.c b/arch/x86/kvm/vmx/pmu_intel.c index 7980fda3978d..5d525d677967 100644 --- a/arch/x86/kvm/vmx/pmu_intel.c +++ b/arch/x86/kvm/vmx/pmu_intel.c @@ -812,4 +812,5 @@ struct kvm_pmu_ops intel_pmu_ops __initdata = { .deliver_pmi = intel_pmu_deliver_pmi, .cleanup = intel_pmu_cleanup, .EVENTSEL_EVENT = ARCH_PERFMON_EVENTSEL_EVENT, + .MAX_NR_GP_COUNTERS = KVM_INTEL_PMC_MAX_GENERIC, }; diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c index da02a08e21b5..ad95ce92a154 100644 --- a/arch/x86/kvm/x86.c +++ b/arch/x86/kvm/x86.c @@ -7061,12 +7061,12 @@ static void kvm_init_msr_list(void) break; case MSR_ARCH_PERFMON_PERFCTR0 ... MSR_ARCH_PERFMON_PERFCTR_MAX: if (msrs_to_save_all[i] - MSR_ARCH_PERFMON_PERFCTR0 >= - min(KVM_INTEL_PMC_MAX_GENERIC, kvm_pmu_cap.num_counters_gp)) + kvm_pmu_cap.num_counters_gp) continue; break; case MSR_ARCH_PERFMON_EVENTSEL0 ... MSR_ARCH_PERFMON_EVENTSEL_MAX: if (msrs_to_save_all[i] - MSR_ARCH_PERFMON_EVENTSEL0 >= - min(KVM_INTEL_PMC_MAX_GENERIC, kvm_pmu_cap.num_counters_gp)) + kvm_pmu_cap.num_counters_gp) continue; break; case MSR_IA32_XFD: @@ -9386,7 +9386,7 @@ static int __kvm_x86_vendor_init(struct kvm_x86_init_ops *ops) if (boot_cpu_has(X86_FEATURE_XSAVES)) rdmsrl(MSR_IA32_XSS, host_xss); - kvm_init_pmu_capability(); + kvm_init_pmu_capability(ops->pmu_ops); r = ops->hardware_setup(); if (r != 0) From patchwork Tue Jan 24 23:49:01 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Christopherson X-Patchwork-Id: 47969 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:eb09:0:0:0:0:0 with SMTP id s9csp2332wrn; Tue, 24 Jan 2023 16:04:38 -0800 (PST) X-Google-Smtp-Source: AMrXdXuE8O4mLOycyGOVdqcgvgx+EIVRxCSmYn91Dr7boyIFxa4s38lfxSwdpy5T2UZ8MkKkV0Bw X-Received: by 2002:a05:6a00:4c91:b0:580:ea08:5277 with SMTP id eb17-20020a056a004c9100b00580ea085277mr31801698pfb.16.1674605078009; Tue, 24 Jan 2023 16:04:38 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1674605077; cv=none; d=google.com; s=arc-20160816; b=RMkgWijMbmv0i6nQI7TpXZ90J5PAX+Bt1IL990dUCF+dxSkhZMlW8o8/kpPGNT6W1o hOBE3Dkyq/qdB6MB23yeDYd1EcMcLL+6EyUbp/3Og6rklEY0MNsxtc269l+sYfVVXFbC JHHDQoj3PZGVf8Kwn+GpLhQ0OuZAeNUS6osmMlceMF/IgXx8n6MPtCB54pUZQxJAvGRY NE1XgkRorx5I9G1ebZESXWZoi18FhBP/6zFsZ2UD3W3yI9ySHPqYBncnEgX30Co4Zkhe Lo85bZtkt1Sa0QaxJNquiIFWCVH06TA1viBaaUnrlJ07xPgsPrzOZNOQ/SdSZnP3zQuR Dzrg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:from:subject:message-id:references :mime-version:in-reply-to:date:reply-to:dkim-signature; bh=ezITNigk0nCUK1P2pm1bMFWUxaZdj3btWqkAvgj3Ekg=; b=SiOLus0m1pe/6vS017Q0z8k7AlAPwNp/mLeEoaYT8ypm42fK/u7AsOrXMjoBJ/bBj/ wWYjlNpVSW8waVZXJXUQO0MLEzu2sgAR7UeK+lZA/REnKQQ4OdywLlL0HamJu3FAQoBs cks3RzLk69P5easDSV66RRZzcACxnulbFeHN28XEYhs7YdX5oLab1auIglO3dXLiN11M 6z47AHyzdfV4kuShiwYW+7SlcfM/e14xXrYqyDpaZOqmiN75M0ZwLNRfPAh8MnxGyMHJ P2KkP1uSQNUCuQ5ye176n4DEHxGoPsdU+iNLExdm70LtQAtBQOHTcLnqM+S+iFqhfUZB CSwA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=M8JljCyr; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id c15-20020a056a00008f00b0058bc7462962si3748074pfj.80.2023.01.24.16.04.18; Tue, 24 Jan 2023 16:04:37 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=M8JljCyr; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234421AbjAXXtY (ORCPT + 99 others); Tue, 24 Jan 2023 18:49:24 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48836 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234326AbjAXXtS (ORCPT ); Tue, 24 Jan 2023 18:49:18 -0500 Received: from mail-pf1-x44a.google.com (mail-pf1-x44a.google.com [IPv6:2607:f8b0:4864:20::44a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 3B29EB46A for ; Tue, 24 Jan 2023 15:49:17 -0800 (PST) Received: by mail-pf1-x44a.google.com with SMTP id bt23-20020a056a00439700b0058e23ca109fso4910013pfb.19 for ; Tue, 24 Jan 2023 15:49:17 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:from:to:cc:subject:date:message-id:reply-to; bh=ezITNigk0nCUK1P2pm1bMFWUxaZdj3btWqkAvgj3Ekg=; b=M8JljCyrd+ISLaFzsLrzmO6ZC+OOlCGhA7o8j565gCVFoFVY8UKbeS77PE6odaXGPw 0Ol3Eqrkp1yeW03OupoRu8c9851edOve1tk88KY8YHup2IqmC1PWm7iNeYSx6eVr6YkS fqILlYYFSjcPQVyxmmUg2wO9MldKEwf9sMMhucAw/qGPE9rTJZOm5udFoet906siuU/n 7MBJ+rlOtbS8+sgw8Wbk2eMmhB2BIpCWejjRxz6SoxXm98I9LXiIh4UqaAnuxElH47oz Ku+/pznQ6+O0BIVbv684KV5jtnOsFr4GNP6O6e13eTrG1crEcttKHsOhDs3Izy1h2P2M iF9Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=ezITNigk0nCUK1P2pm1bMFWUxaZdj3btWqkAvgj3Ekg=; b=shEVz/NTZaagAUGUG+s5O7cs41KDJbZDU4da+Al/QEonP68ewTo7vYhRPewOzDd9Qb 8Q2u1hZ0sfcXIYL8umPwTVyh+0h8hyJEmHZQaa10gXETW3Fx27yx8Y516AS8P3kFDpxj f0g7GqVHnNVBzmBVS9rU8T/VXLg3CjOwFM5mVXgFTizWRSdn0AVMIiXfsws+ei2zRqv+ oXP732SoYUUk/Ob+FW5OHnSpItXlk/U3Qa6fI576aC5OWbvknaMpu2l3YvjoSH9uBoPT aJ6pbVrP5RZ1WPWg4ZXESJc7jz86PnoL5/+u5h6XwgtPQasLo00QSBfSjiJpkhQ72X/K HE8w== X-Gm-Message-State: AFqh2kpegchc8uTPzT1rXeA/QsR02KPqkpLTb7LuLtqq2RNqiqMRtcmR yCXvTHtmTRFSPnh7gyiKGuRDU83MlaA= X-Received: from zagreus.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:5c37]) (user=seanjc job=sendgmr) by 2002:a05:6a00:b96:b0:58d:b8f6:6f6d with SMTP id g22-20020a056a000b9600b0058db8f66f6dmr3046704pfj.32.1674604156683; Tue, 24 Jan 2023 15:49:16 -0800 (PST) Reply-To: Sean Christopherson Date: Tue, 24 Jan 2023 23:49:01 +0000 In-Reply-To: <20230124234905.3774678-1-seanjc@google.com> Mime-Version: 1.0 References: <20230124234905.3774678-1-seanjc@google.com> X-Mailer: git-send-email 2.39.1.456.gfc5497dd1b-goog Message-ID: <20230124234905.3774678-3-seanjc@google.com> Subject: [PATCH 2/6] KVM: x86/pmu: Gate all "unimplemented MSR" prints on report_ignored_msrs From: Sean Christopherson To: Sean Christopherson , Paolo Bonzini , Vitaly Kuznetsov Cc: kvm@vger.kernel.org, linux-kernel@vger.kernel.org, Aaron Lewis , Weijiang Yang , Like Xu X-Spam-Status: No, score=-9.6 required=5.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE,SPF_PASS,USER_IN_DEF_DKIM_WL autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1755950694249865173?= X-GMAIL-MSGID: =?utf-8?q?1755950694249865173?= Add helpers to print unimplemented MSR accesses and condition all such prints on report_ignored_msrs, i.e. honor userspace's request to not print unimplemented MSRs. Even though vcpu_unimpl() is ratelimited, printing can still be problematic, e.g. if a print gets stalled when host userspace is writing MSRs during live migration, an effective stall can result in very noticeable disruption in the guest. E.g. the profile below was taken while calling KVM_SET_MSRS on the PMU counters while the PMU was disabled in KVM. - 99.75% 0.00% [.] __ioctl - __ioctl - 99.74% entry_SYSCALL_64_after_hwframe do_syscall_64 sys_ioctl - do_vfs_ioctl - 92.48% kvm_vcpu_ioctl - kvm_arch_vcpu_ioctl - 85.12% kvm_set_msr_ignored_check svm_set_msr kvm_set_msr_common printk vprintk_func vprintk_default vprintk_emit console_unlock call_console_drivers univ8250_console_write serial8250_console_write uart_console_write Reported-by: Aaron Lewis Signed-off-by: Sean Christopherson Reviewed-by: Vitaly Kuznetsov --- arch/x86/kvm/hyperv.c | 10 ++++------ arch/x86/kvm/svm/svm.c | 5 ++--- arch/x86/kvm/vmx/vmx.c | 4 +--- arch/x86/kvm/x86.c | 18 +++++------------- arch/x86/kvm/x86.h | 12 ++++++++++++ 5 files changed, 24 insertions(+), 25 deletions(-) diff --git a/arch/x86/kvm/hyperv.c b/arch/x86/kvm/hyperv.c index 71aff0edc0ed..3eb8caf87ee4 100644 --- a/arch/x86/kvm/hyperv.c +++ b/arch/x86/kvm/hyperv.c @@ -1430,8 +1430,7 @@ static int kvm_hv_set_msr_pw(struct kvm_vcpu *vcpu, u32 msr, u64 data, case HV_X64_MSR_SYNDBG_CONTROL ... HV_X64_MSR_SYNDBG_PENDING_BUFFER: return syndbg_set_msr(vcpu, msr, data, host); default: - vcpu_unimpl(vcpu, "Hyper-V unhandled wrmsr: 0x%x data 0x%llx\n", - msr, data); + kvm_pr_unimpl_wrmsr(vcpu, msr, data); return 1; } return 0; @@ -1552,8 +1551,7 @@ static int kvm_hv_set_msr(struct kvm_vcpu *vcpu, u32 msr, u64 data, bool host) return 1; break; default: - vcpu_unimpl(vcpu, "Hyper-V unhandled wrmsr: 0x%x data 0x%llx\n", - msr, data); + kvm_pr_unimpl_wrmsr(vcpu, msr, data); return 1; } @@ -1608,7 +1606,7 @@ static int kvm_hv_get_msr_pw(struct kvm_vcpu *vcpu, u32 msr, u64 *pdata, case HV_X64_MSR_SYNDBG_CONTROL ... HV_X64_MSR_SYNDBG_PENDING_BUFFER: return syndbg_get_msr(vcpu, msr, pdata, host); default: - vcpu_unimpl(vcpu, "Hyper-V unhandled rdmsr: 0x%x\n", msr); + kvm_pr_unimpl_rdmsr(vcpu, msr); return 1; } @@ -1673,7 +1671,7 @@ static int kvm_hv_get_msr(struct kvm_vcpu *vcpu, u32 msr, u64 *pdata, data = APIC_BUS_FREQUENCY; break; default: - vcpu_unimpl(vcpu, "Hyper-V unhandled rdmsr: 0x%x\n", msr); + kvm_pr_unimpl_rdmsr(vcpu, msr); return 1; } *pdata = data; diff --git a/arch/x86/kvm/svm/svm.c b/arch/x86/kvm/svm/svm.c index d13cf53e7390..dd21e8b1a259 100644 --- a/arch/x86/kvm/svm/svm.c +++ b/arch/x86/kvm/svm/svm.c @@ -3015,8 +3015,7 @@ static int svm_set_msr(struct kvm_vcpu *vcpu, struct msr_data *msr) break; case MSR_IA32_DEBUGCTLMSR: if (!lbrv) { - vcpu_unimpl(vcpu, "%s: MSR_IA32_DEBUGCTL 0x%llx, nop\n", - __func__, data); + kvm_pr_unimpl_wrmsr(vcpu, ecx, data); break; } if (data & DEBUGCTL_RESERVED_BITS) @@ -3045,7 +3044,7 @@ static int svm_set_msr(struct kvm_vcpu *vcpu, struct msr_data *msr) case MSR_VM_CR: return svm_set_vm_cr(vcpu, data); case MSR_VM_IGNNE: - vcpu_unimpl(vcpu, "unimplemented wrmsr: 0x%x data 0x%llx\n", ecx, data); + kvm_pr_unimpl_wrmsr(vcpu, ecx, data); break; case MSR_AMD64_DE_CFG: { struct kvm_msr_entry msr_entry; diff --git a/arch/x86/kvm/vmx/vmx.c b/arch/x86/kvm/vmx/vmx.c index c788aa382611..8f0f67c75f35 100644 --- a/arch/x86/kvm/vmx/vmx.c +++ b/arch/x86/kvm/vmx/vmx.c @@ -2206,9 +2206,7 @@ static int vmx_set_msr(struct kvm_vcpu *vcpu, struct msr_data *msr_info) invalid = data & ~vmx_get_supported_debugctl(vcpu, msr_info->host_initiated); if (invalid & (DEBUGCTLMSR_BTF|DEBUGCTLMSR_LBR)) { - if (report_ignored_msrs) - vcpu_unimpl(vcpu, "%s: BTF|LBR in IA32_DEBUGCTLMSR 0x%llx, nop\n", - __func__, data); + kvm_pr_unimpl_wrmsr(vcpu, msr_index, data); data &= ~(DEBUGCTLMSR_BTF|DEBUGCTLMSR_LBR); invalid &= ~(DEBUGCTLMSR_BTF|DEBUGCTLMSR_LBR); } diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c index ad95ce92a154..d4a610ffe2b8 100644 --- a/arch/x86/kvm/x86.c +++ b/arch/x86/kvm/x86.c @@ -3560,7 +3560,6 @@ static void record_steal_time(struct kvm_vcpu *vcpu) int kvm_set_msr_common(struct kvm_vcpu *vcpu, struct msr_data *msr_info) { - bool pr = false; u32 msr = msr_info->index; u64 data = msr_info->data; @@ -3606,15 +3605,13 @@ int kvm_set_msr_common(struct kvm_vcpu *vcpu, struct msr_data *msr_info) if (data == BIT_ULL(18)) { vcpu->arch.msr_hwcr = data; } else if (data != 0) { - vcpu_unimpl(vcpu, "unimplemented HWCR wrmsr: 0x%llx\n", - data); + kvm_pr_unimpl_wrmsr(vcpu, msr, data); return 1; } break; case MSR_FAM10H_MMIO_CONF_BASE: if (data != 0) { - vcpu_unimpl(vcpu, "unimplemented MMIO_CONF_BASE wrmsr: " - "0x%llx\n", data); + kvm_pr_unimpl_wrmsr(vcpu, msr, data); return 1; } break; @@ -3794,16 +3791,13 @@ int kvm_set_msr_common(struct kvm_vcpu *vcpu, struct msr_data *msr_info) case MSR_K7_PERFCTR0 ... MSR_K7_PERFCTR3: case MSR_P6_PERFCTR0 ... MSR_P6_PERFCTR1: - pr = true; - fallthrough; case MSR_K7_EVNTSEL0 ... MSR_K7_EVNTSEL3: case MSR_P6_EVNTSEL0 ... MSR_P6_EVNTSEL1: if (kvm_pmu_is_valid_msr(vcpu, msr)) return kvm_pmu_set_msr(vcpu, msr_info); - if (pr || data != 0) - vcpu_unimpl(vcpu, "disabled perfctr wrmsr: " - "0x%x data 0x%llx\n", msr, data); + if (data) + kvm_pr_unimpl_wrmsr(vcpu, msr, data); break; case MSR_K7_CLK_CTL: /* @@ -3831,9 +3825,7 @@ int kvm_set_msr_common(struct kvm_vcpu *vcpu, struct msr_data *msr_info) /* Drop writes to this legacy MSR -- see rdmsr * counterpart for further detail. */ - if (report_ignored_msrs) - vcpu_unimpl(vcpu, "ignored wrmsr: 0x%x data 0x%llx\n", - msr, data); + kvm_pr_unimpl_wrmsr(vcpu, msr, data); break; case MSR_AMD64_OSVW_ID_LENGTH: if (!guest_cpuid_has(vcpu, X86_FEATURE_OSVW)) diff --git a/arch/x86/kvm/x86.h b/arch/x86/kvm/x86.h index 9de72586f406..f3554bf05201 100644 --- a/arch/x86/kvm/x86.h +++ b/arch/x86/kvm/x86.h @@ -331,6 +331,18 @@ extern bool report_ignored_msrs; extern bool eager_page_split; +static inline void kvm_pr_unimpl_wrmsr(struct kvm_vcpu *vcpu, u32 msr, u64 data) +{ + if (report_ignored_msrs) + vcpu_unimpl(vcpu, "Unhandled WRMSR(0x%x) = 0x%llx\n", msr, data); +} + +static inline void kvm_pr_unimpl_rdmsr(struct kvm_vcpu *vcpu, u32 msr) +{ + if (report_ignored_msrs) + vcpu_unimpl(vcpu, "Unhandled RDMSR(0x%x)\n", msr); +} + static inline u64 nsec_to_cycles(struct kvm_vcpu *vcpu, u64 nsec) { return pvclock_scale_delta(nsec, vcpu->arch.virtual_tsc_mult, From patchwork Tue Jan 24 23:49:02 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Christopherson X-Patchwork-Id: 47970 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:eb09:0:0:0:0:0 with SMTP id s9csp5619wrn; Tue, 24 Jan 2023 16:12:27 -0800 (PST) X-Google-Smtp-Source: AMrXdXt7OvAow/vLnvK6hwEa4tMtB4Hucwh598W2f1dDXsndYq8HlxvNyylVaOZ+T+Q+gx1w0u+z X-Received: by 2002:a17:906:848e:b0:818:3ef8:f2fc with SMTP id m14-20020a170906848e00b008183ef8f2fcmr29657961ejx.5.1674605547003; Tue, 24 Jan 2023 16:12:27 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1674605546; cv=none; d=google.com; s=arc-20160816; b=G4bctfqSJvbJc6LOqtQ1P3gIT+LunfIuuHDOhk3aIQeGQBsXC43FDpQ+oYFxYc8IJG jrpmxZsd7dY2NHrP1r69IJCUfjSLTMtLPumQphz37mIxsX3f1sxrGwtiArV9rl7LrvxR LkqdAxLSputBeCSwqLdmSOM1V660tlNFzj8kqNdhhIsjHT2cor5/XdYS93ocOqVoftA8 u0HtC78sJP9xh82I7XIfYhhOYNlUbBPq7cQzaBTW8S8R2UKLgJwPwW3lwScLY2WuaqIE uHJgRnrrDBCVClx3gQaY2/jKOhj30oVUJATRve3JtOjJ5ijHrZDCxdMtLDReZOE6hiiR +tPg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:from:subject:message-id:references :mime-version:in-reply-to:date:reply-to:dkim-signature; bh=PCuRaPACRckOLmMloMboeg+q3NxGqmxKSfZdPmlSu+Y=; b=gaF20SqvApi0v01LaHllw0RWZohzxaBs0zuepaIeTWkXAlKHmkRCkptnBl6HSw674o g822RSJhOAXCtODfrzfkPRKhjf77dPWREvFc3NiOmiRUTrghK+RZq+4gTUyFe51HxicW IQP8wlqGOqa1X7Cuip0Uz0YKz+i5Knw6a7YlrwAAdKVTlsKCkdqL8aReCDG+VDMIDLMO GunNG0/BZZScvK4AcEQEvRdkPSOHwohkR+Boz3Cta8l2iNGyE1lvYf9tdQByprUxGih3 ArAyTyMT9wIazkBcik6cdHPqh/AxWW0y+ekY7eMXU49Smv4NvqD7gcIEwnNidK3D97b2 KAtw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=lQgVxYI7; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id cj18-20020a17090715d200b0087073de5aa3si4088253ejc.371.2023.01.24.16.11.58; Tue, 24 Jan 2023 16:12:26 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=lQgVxYI7; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234420AbjAXXt1 (ORCPT + 99 others); Tue, 24 Jan 2023 18:49:27 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:49092 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234345AbjAXXtW (ORCPT ); Tue, 24 Jan 2023 18:49:22 -0500 Received: from mail-pg1-x54a.google.com (mail-pg1-x54a.google.com [IPv6:2607:f8b0:4864:20::54a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 16FD87A90 for ; Tue, 24 Jan 2023 15:49:18 -0800 (PST) Received: by mail-pg1-x54a.google.com with SMTP id h69-20020a638348000000b004d08330e922so7501807pge.5 for ; Tue, 24 Jan 2023 15:49:18 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:from:to:cc:subject:date:message-id:reply-to; bh=PCuRaPACRckOLmMloMboeg+q3NxGqmxKSfZdPmlSu+Y=; b=lQgVxYI7Exbz/lKh6x84rMBA9rVOW4Lup6GD4ApHB6oURXKeNhSWfzSzS36TaNiAeB HpNwQsE/GD2SSSG1me6iMgqx+5OU7pErcewwwbJfYjRkua0LE6tZqv3RRg78k5MGiLY9 hAqhOa9PPiZTpHHRL391qNjCWrU1/eGinF1girUo0rpUAG95vrGjsAkCO3ykM41H9Ay8 pmix913ZqE5rdz5+Nt9AUnUF/PkDDB5bB8Hz2sMjjC6J4caP/KAA4uctFs0jiVZbpZMN HPlzJn6AzD/QW6eh3/7AA3o+9kAzAIZTWG1WaPAxLh5gyM+qbFTDz9iQOKQU30zpEnhi oRmQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=PCuRaPACRckOLmMloMboeg+q3NxGqmxKSfZdPmlSu+Y=; b=1pK/6WpXeQq7smiTxT02xe0TsGNeUUmIwUL+dOg9NPREYaz0cU2l5DaawtZ6iXzVxh l3dah0nxOJaSn5uFU4h0AKX5p97ECyITAsOJbEbKWEBTaLJx/8zeHdpiZgqqKETfC+ir 4x7NJQDLLcDulxW2v/JRcvgDi23iqOcCaG4Vw0fVrcMqtfh7x3ZYbb3qQYluL/RqPiyg Rwv3iBw6qK54Tzp4xkh6arT8YU8qZJ9+ksN4gZ55BcY3cBlCuAsm8Yw1xNUj4isYGT65 KxAEY4lGZikvmaWyf+u0Ftq44y098EIOQrhllNPCShz+4TNX5fSrjQ4OsFYmRErrwj65 nGrQ== X-Gm-Message-State: AFqh2kpeM9qW7atLtkD6JiThIR4FfkBwWXLF6SttcZCHr7uZCjrLLbW6 JerSdY5E/z1469EctbmNuSErvlsPreU= X-Received: from zagreus.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:5c37]) (user=seanjc job=sendgmr) by 2002:a17:90a:65cb:b0:227:4d5:6d64 with SMTP id i11-20020a17090a65cb00b0022704d56d64mr3937714pjs.29.1674604158365; Tue, 24 Jan 2023 15:49:18 -0800 (PST) Reply-To: Sean Christopherson Date: Tue, 24 Jan 2023 23:49:02 +0000 In-Reply-To: <20230124234905.3774678-1-seanjc@google.com> Mime-Version: 1.0 References: <20230124234905.3774678-1-seanjc@google.com> X-Mailer: git-send-email 2.39.1.456.gfc5497dd1b-goog Message-ID: <20230124234905.3774678-4-seanjc@google.com> Subject: [PATCH 3/6] KVM: x86/pmu: Use separate array for defining "PMU MSRs to save" From: Sean Christopherson To: Sean Christopherson , Paolo Bonzini , Vitaly Kuznetsov Cc: kvm@vger.kernel.org, linux-kernel@vger.kernel.org, Aaron Lewis , Weijiang Yang , Like Xu X-Spam-Status: No, score=-9.6 required=5.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE,SPF_PASS,USER_IN_DEF_DKIM_WL autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1755951185996404742?= X-GMAIL-MSGID: =?utf-8?q?1755951185996404742?= Move all potential to-be-saved PMU MSRs into a separate array so that a future patch can easily omit all PMU MSRs from the list when the PMU is disabled. No functional change intended. Signed-off-by: Sean Christopherson --- arch/x86/kvm/x86.c | 153 ++++++++++++++++++++++++--------------------- 1 file changed, 82 insertions(+), 71 deletions(-) diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c index d4a610ffe2b8..9b6e1af63531 100644 --- a/arch/x86/kvm/x86.c +++ b/arch/x86/kvm/x86.c @@ -1419,7 +1419,7 @@ EXPORT_SYMBOL_GPL(kvm_emulate_rdpmc); * may depend on host virtualization features rather than host cpu features. */ -static const u32 msrs_to_save_all[] = { +static const u32 msrs_to_save_base[] = { MSR_IA32_SYSENTER_CS, MSR_IA32_SYSENTER_ESP, MSR_IA32_SYSENTER_EIP, MSR_STAR, #ifdef CONFIG_X86_64 @@ -1436,6 +1436,10 @@ static const u32 msrs_to_save_all[] = { MSR_IA32_RTIT_ADDR3_A, MSR_IA32_RTIT_ADDR3_B, MSR_IA32_UMWAIT_CONTROL, + MSR_IA32_XFD, MSR_IA32_XFD_ERR, +}; + +static const u32 msrs_to_save_pmu[] = { MSR_ARCH_PERFMON_FIXED_CTR0, MSR_ARCH_PERFMON_FIXED_CTR1, MSR_ARCH_PERFMON_FIXED_CTR0 + 2, MSR_CORE_PERF_FIXED_CTR_CTRL, MSR_CORE_PERF_GLOBAL_STATUS, @@ -1460,11 +1464,10 @@ static const u32 msrs_to_save_all[] = { MSR_F15H_PERF_CTL3, MSR_F15H_PERF_CTL4, MSR_F15H_PERF_CTL5, MSR_F15H_PERF_CTR0, MSR_F15H_PERF_CTR1, MSR_F15H_PERF_CTR2, MSR_F15H_PERF_CTR3, MSR_F15H_PERF_CTR4, MSR_F15H_PERF_CTR5, - - MSR_IA32_XFD, MSR_IA32_XFD_ERR, }; -static u32 msrs_to_save[ARRAY_SIZE(msrs_to_save_all)]; +static u32 msrs_to_save[ARRAY_SIZE(msrs_to_save_base) + + ARRAY_SIZE(msrs_to_save_pmu)]; static unsigned num_msrs_to_save; static const u32 emulated_msrs_all[] = { @@ -6994,84 +6997,92 @@ long kvm_arch_vm_ioctl(struct file *filp, return r; } -static void kvm_init_msr_list(void) +static void kvm_probe_msr_to_save(u32 msr_index) { u32 dummy[2]; + + if (rdmsr_safe(msr_index, &dummy[0], &dummy[1])) + return; + + /* + * Even MSRs that are valid in the host may not be exposed to guests in + * some cases. + */ + switch (msr_index) { + case MSR_IA32_BNDCFGS: + if (!kvm_mpx_supported()) + return; + break; + case MSR_TSC_AUX: + if (!kvm_cpu_cap_has(X86_FEATURE_RDTSCP) && + !kvm_cpu_cap_has(X86_FEATURE_RDPID)) + return; + break; + case MSR_IA32_UMWAIT_CONTROL: + if (!kvm_cpu_cap_has(X86_FEATURE_WAITPKG)) + return; + break; + case MSR_IA32_RTIT_CTL: + case MSR_IA32_RTIT_STATUS: + if (!kvm_cpu_cap_has(X86_FEATURE_INTEL_PT)) + return; + break; + case MSR_IA32_RTIT_CR3_MATCH: + if (!kvm_cpu_cap_has(X86_FEATURE_INTEL_PT) || + !intel_pt_validate_hw_cap(PT_CAP_cr3_filtering)) + return; + break; + case MSR_IA32_RTIT_OUTPUT_BASE: + case MSR_IA32_RTIT_OUTPUT_MASK: + if (!kvm_cpu_cap_has(X86_FEATURE_INTEL_PT) || + (!intel_pt_validate_hw_cap(PT_CAP_topa_output) && + !intel_pt_validate_hw_cap(PT_CAP_single_range_output))) + return; + break; + case MSR_IA32_RTIT_ADDR0_A ... MSR_IA32_RTIT_ADDR3_B: + if (!kvm_cpu_cap_has(X86_FEATURE_INTEL_PT) || + (msr_index - MSR_IA32_RTIT_ADDR0_A >= + intel_pt_validate_hw_cap(PT_CAP_num_address_ranges) * 2)) + return; + break; + case MSR_ARCH_PERFMON_PERFCTR0 ... MSR_ARCH_PERFMON_PERFCTR_MAX: + if (msr_index - MSR_ARCH_PERFMON_PERFCTR0 >= + kvm_pmu_cap.num_counters_gp) + return; + break; + case MSR_ARCH_PERFMON_EVENTSEL0 ... MSR_ARCH_PERFMON_EVENTSEL_MAX: + if (msr_index - MSR_ARCH_PERFMON_EVENTSEL0 >= + kvm_pmu_cap.num_counters_gp) + return; + break; + case MSR_IA32_XFD: + case MSR_IA32_XFD_ERR: + if (!kvm_cpu_cap_has(X86_FEATURE_XFD)) + return; + break; + default: + break; + } + + msrs_to_save[num_msrs_to_save++] = msr_index; +} + +static void kvm_init_msr_list(void) +{ unsigned i; BUILD_BUG_ON_MSG(KVM_PMC_MAX_FIXED != 3, - "Please update the fixed PMCs in msrs_to_saved_all[]"); + "Please update the fixed PMCs in msrs_to_save_pmu[]"); num_msrs_to_save = 0; num_emulated_msrs = 0; num_msr_based_features = 0; - for (i = 0; i < ARRAY_SIZE(msrs_to_save_all); i++) { - if (rdmsr_safe(msrs_to_save_all[i], &dummy[0], &dummy[1]) < 0) - continue; + for (i = 0; i < ARRAY_SIZE(msrs_to_save_base); i++) + kvm_probe_msr_to_save(msrs_to_save_base[i]); - /* - * Even MSRs that are valid in the host may not be exposed - * to the guests in some cases. - */ - switch (msrs_to_save_all[i]) { - case MSR_IA32_BNDCFGS: - if (!kvm_mpx_supported()) - continue; - break; - case MSR_TSC_AUX: - if (!kvm_cpu_cap_has(X86_FEATURE_RDTSCP) && - !kvm_cpu_cap_has(X86_FEATURE_RDPID)) - continue; - break; - case MSR_IA32_UMWAIT_CONTROL: - if (!kvm_cpu_cap_has(X86_FEATURE_WAITPKG)) - continue; - break; - case MSR_IA32_RTIT_CTL: - case MSR_IA32_RTIT_STATUS: - if (!kvm_cpu_cap_has(X86_FEATURE_INTEL_PT)) - continue; - break; - case MSR_IA32_RTIT_CR3_MATCH: - if (!kvm_cpu_cap_has(X86_FEATURE_INTEL_PT) || - !intel_pt_validate_hw_cap(PT_CAP_cr3_filtering)) - continue; - break; - case MSR_IA32_RTIT_OUTPUT_BASE: - case MSR_IA32_RTIT_OUTPUT_MASK: - if (!kvm_cpu_cap_has(X86_FEATURE_INTEL_PT) || - (!intel_pt_validate_hw_cap(PT_CAP_topa_output) && - !intel_pt_validate_hw_cap(PT_CAP_single_range_output))) - continue; - break; - case MSR_IA32_RTIT_ADDR0_A ... MSR_IA32_RTIT_ADDR3_B: - if (!kvm_cpu_cap_has(X86_FEATURE_INTEL_PT) || - msrs_to_save_all[i] - MSR_IA32_RTIT_ADDR0_A >= - intel_pt_validate_hw_cap(PT_CAP_num_address_ranges) * 2) - continue; - break; - case MSR_ARCH_PERFMON_PERFCTR0 ... MSR_ARCH_PERFMON_PERFCTR_MAX: - if (msrs_to_save_all[i] - MSR_ARCH_PERFMON_PERFCTR0 >= - kvm_pmu_cap.num_counters_gp) - continue; - break; - case MSR_ARCH_PERFMON_EVENTSEL0 ... MSR_ARCH_PERFMON_EVENTSEL_MAX: - if (msrs_to_save_all[i] - MSR_ARCH_PERFMON_EVENTSEL0 >= - kvm_pmu_cap.num_counters_gp) - continue; - break; - case MSR_IA32_XFD: - case MSR_IA32_XFD_ERR: - if (!kvm_cpu_cap_has(X86_FEATURE_XFD)) - continue; - break; - default: - break; - } - - msrs_to_save[num_msrs_to_save++] = msrs_to_save_all[i]; - } + for (i = 0; i < ARRAY_SIZE(msrs_to_save_pmu); i++) + kvm_probe_msr_to_save(msrs_to_save_pmu[i]); for (i = 0; i < ARRAY_SIZE(emulated_msrs_all); i++) { if (!static_call(kvm_x86_has_emulated_msr)(NULL, emulated_msrs_all[i])) From patchwork Tue Jan 24 23:49:03 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Christopherson X-Patchwork-Id: 47971 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:eb09:0:0:0:0:0 with SMTP id s9csp7464wrn; Tue, 24 Jan 2023 16:17:01 -0800 (PST) X-Google-Smtp-Source: AMrXdXssEU19m1bQh7VK+2KAGQvMBqb6cOZVDdhqyatC51oOC2p8manI9GpTNUKrPIsidtExAVb+ X-Received: by 2002:a05:6a20:e608:b0:b6:64f8:4c8b with SMTP id my8-20020a056a20e60800b000b664f84c8bmr27986804pzb.54.1674605820771; Tue, 24 Jan 2023 16:17:00 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1674605820; cv=none; d=google.com; s=arc-20160816; b=Vk1pOSZv2b/MS9qm0VAhqe9B03Gg1ikHOdgzUC0QFMA+zxrUSTgRPXlrMA6FZc9ZaG Qhn8LewKHSva1cqJrcHkcvqr4UfYNmsmsA2slFwgVCamPIwnAbiC7L2kk9SfXttYhf84 VHG4KasIlDlT4l3snBPpJzMvLFhIlFxYcG5UnUB65Gc9I1Q4Ejy8oa7Q+S+T+5/g3cxq m/WAi2neRYfB9QFcLWmf6AeX/ylT7ac5Oka63Ytk7nAXfT6jqT2G+MnGVtpHZ/PTHQLN glaGQl9P66/1BrVtsH88e39dZJwZXdellHW7WNTH2V8rEEoKCTXZkbQEMLJ7hEmUbLar B2OA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:from:subject:message-id:references :mime-version:in-reply-to:date:reply-to:dkim-signature; bh=cSFedQsv7Wc1M6mfIq8Uerd1CseDG+3+LjpR3/a1jI4=; b=bIKQY0UZQYSeDrLv/tFmBI4/IBIuzNU9vUz1iKlITk7XTzm5I/VrF+b2fe5tnoN90k uDCaM31Ypj6hX5BSOEOEL0VsJgfqvOLY9USFqdQm7pWcLVlxJ3+n7JeI0qTsFARU7g1q S6MPit2LvJ2qqz8I9092yokF12hqbMLhK6+UBLgaKeiMO2kgO2JucA4aypKPxq99tyU5 tuOLLfJqkn0JcQV/6xok3iAi5e4dsru6ZIYFe2Q+Na1K/Tq2qkfM2WFNWhpL1g8jhBO/ BSDTKxaeBJYJo7QvOGb+VIog03WOOeaKrW2UK05eE/3sy8e/pCz1pms9aYmRArrtG7Bl Stgw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=Vp+bCCyR; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id k68-20020a633d47000000b004acdd4a8240si3680771pga.193.2023.01.24.16.16.28; Tue, 24 Jan 2023 16:17:00 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=Vp+bCCyR; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234484AbjAXXth (ORCPT + 99 others); Tue, 24 Jan 2023 18:49:37 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:49146 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234400AbjAXXtX (ORCPT ); Tue, 24 Jan 2023 18:49:23 -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 8AD9D49022 for ; Tue, 24 Jan 2023 15:49:20 -0800 (PST) Received: by mail-pg1-x549.google.com with SMTP id e184-20020a6369c1000000b0049de6cfcc40so7519180pgc.19 for ; Tue, 24 Jan 2023 15:49:20 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:from:to:cc:subject:date:message-id:reply-to; bh=cSFedQsv7Wc1M6mfIq8Uerd1CseDG+3+LjpR3/a1jI4=; b=Vp+bCCyRCOzXxx9AZRk/kLf2yoM9R2H7MV3TG8iO4ixZfrmXyu3VH5OT9URCnFT6Ao SnOE2UHK2AnZMfppSvxPBExJYZ4Fxe9T9DFqELJjMzTPwm3THgO6m/pOUi4AULV2sZ1b 5BNeuoAAa7KPpu6EiXS3gy8WFApTYM5YBCvJTG6h76zjPe9l+cRD0Zp1KCyUns7fe6nX VX1PrSIkSYQxk0xiGxVaWwC1UOgh09tR1C/pu6yybMIHQDasONsVEtBIkxqac5Q4XQoh QATfefxt08qKbI42PfLX9jDT1Nf1BnuHKNDKAqU040eTQcTdnTjdSThoIhCikZ1drvSv bb7w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=cSFedQsv7Wc1M6mfIq8Uerd1CseDG+3+LjpR3/a1jI4=; b=fUQLB5PwoVt4kkBGvUmTTcDZIMWjCx1l4ys+ntLOvMnQ3wEfQAgM+oeZyLgMsu0QTv gsaFrLiyzjTa/TuGAsrgTKgmEVVW79kAXiz1eJS8xH/O1vSIGUsJ02BzleRNwGymLI40 bI7qn91jR4U9W+vuFl3Ir9rixBoXWr1GIwnJhZFtu8s8kwmzJXwS4V/UEGCqJS8ObLlc T+EvUCD9n9/IJewza4Vk6MWYqf3MJcbvbBMpk87W9cvUYF3npOI1gklYSU5PyZ1ixFbB RcRRqv1Xr4dTSMfWyzTVfLTycbTWjHh2sAX8JHoNQ4Oy2sjd38WUu6QE2EoajobsXM8Y x98g== X-Gm-Message-State: AFqh2ko3NQjkk49Q7KScQ4gVZweJ4XZfzK4wnwNlR/KvbyxHHqHHBtN0 nlTxumFP7vNoK8KrRgqgVjAjYZs4ELs= X-Received: from zagreus.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:5c37]) (user=seanjc job=sendgmr) by 2002:a17:902:bd97:b0:192:9e63:e2bc with SMTP id q23-20020a170902bd9700b001929e63e2bcmr3138979pls.11.1674604159781; Tue, 24 Jan 2023 15:49:19 -0800 (PST) Reply-To: Sean Christopherson Date: Tue, 24 Jan 2023 23:49:03 +0000 In-Reply-To: <20230124234905.3774678-1-seanjc@google.com> Mime-Version: 1.0 References: <20230124234905.3774678-1-seanjc@google.com> X-Mailer: git-send-email 2.39.1.456.gfc5497dd1b-goog Message-ID: <20230124234905.3774678-5-seanjc@google.com> Subject: [PATCH 4/6] KVM: x86/pmu: Don't tell userspace to save PMU MSRs if PMU is disabled From: Sean Christopherson To: Sean Christopherson , Paolo Bonzini , Vitaly Kuznetsov Cc: kvm@vger.kernel.org, linux-kernel@vger.kernel.org, Aaron Lewis , Weijiang Yang , Like Xu X-Spam-Status: No, score=-9.6 required=5.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE,SPF_PASS,USER_IN_DEF_DKIM_WL autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1755951472941907189?= X-GMAIL-MSGID: =?utf-8?q?1755951472941907189?= Omit all PMU MSRs from the "MSRs to save" list if the PMU is disabled so that userspace doesn't waste time saving and restoring dummy values. KVM provides "error" semantics (read zeros, drop writes) for such known-but- unsupported MSRs, i.e. has fudged around this issue for quite some time. Keep the "error" semantics as-is for now, the logic will be cleaned up in a separate patch. Cc: Aaron Lewis Cc: Weijiang Yang Signed-off-by: Sean Christopherson --- arch/x86/kvm/x86.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c index 9b6e1af63531..25da2cc09e55 100644 --- a/arch/x86/kvm/x86.c +++ b/arch/x86/kvm/x86.c @@ -7081,8 +7081,10 @@ static void kvm_init_msr_list(void) for (i = 0; i < ARRAY_SIZE(msrs_to_save_base); i++) kvm_probe_msr_to_save(msrs_to_save_base[i]); - for (i = 0; i < ARRAY_SIZE(msrs_to_save_pmu); i++) - kvm_probe_msr_to_save(msrs_to_save_pmu[i]); + if (enable_pmu) { + for (i = 0; i < ARRAY_SIZE(msrs_to_save_pmu); i++) + kvm_probe_msr_to_save(msrs_to_save_pmu[i]); + } for (i = 0; i < ARRAY_SIZE(emulated_msrs_all); i++) { if (!static_call(kvm_x86_has_emulated_msr)(NULL, emulated_msrs_all[i])) From patchwork Tue Jan 24 23:49:04 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Christopherson X-Patchwork-Id: 47972 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:eb09:0:0:0:0:0 with SMTP id s9csp7487wrn; Tue, 24 Jan 2023 16:17:05 -0800 (PST) X-Google-Smtp-Source: AMrXdXupP0oKHX3uU9IWfTJmp0dxDbZf6vrpSlo1AoslDJe6/LFY0H9ralQw8gfKHEIwAbCkUAiU X-Received: by 2002:a17:907:7f14:b0:84d:3e5b:7c02 with SMTP id qf20-20020a1709077f1400b0084d3e5b7c02mr36230697ejc.22.1674605825321; Tue, 24 Jan 2023 16:17:05 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1674605825; cv=none; d=google.com; s=arc-20160816; b=uEWMrUX+OqN/wGciiKj5mGxydd0FR2SL+6Ms93j8+V435PTdQWvAUONBQUm73m5/vN +osF0+RkWI47HJJ0fHSan8EKAxrton7RUxxYQmWbBK9rRN6jU5jPiqBpOZV4JFHB71pf x0+lrIkQUaPeVKi2lTo5BHOLuZLebmxVaLg8qUaRoCSLXT48eey+R1VRAUSW2pQJLBQr jhG/hiDiarQJ9erZYJFKYujdGl1XaJ6gKqyrnBYbibtNaZml2yyspK47a/ipwFVft1ZZ N8Ckzj5MebeDN0FoYG7EQprXkdQCFqvDNd+jgkYrhFOj8zw/HC04w4frZY+VpKpDHACU yKIw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:from:subject:message-id:references :mime-version:in-reply-to:date:reply-to:dkim-signature; bh=etFpX/482XpVxpk8+X7x9LZK6GHklrmOWmBG2Y9l9JY=; b=c/F++6pMSEPZvEf7i/q16hi64NANw9gXhzqtbzwSJhqsJT7Ai0KiLzuvNmEXqaNIJ2 tXA79C0EhvAV1q6RqPhehKAxH5bvjcFBpUD0vnd6kmHoZ+cXCZ/BzADdpFeZ8bEgwKnV 2W54Oc+hdzDJj4idmIrTZ1xRP7qTISDmzwymTYbCGu/zM6GzJXNvBgessDb1/3Z/41WM BORHNhtZWFtkN7hIILa2HX3+rI54ACOXyAXpavPuw0F15xtPHki8bHJLSZwDrGFx4axZ zd9UmvoPDS3jkelDy/i0C9UN57eww12oMvuxuH6n9nI6IpAfIScyIvAW/Rz+Brq6ANsD B5RA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=PaPFcjkY; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id 25-20020a170906005900b0084d3360e59csi4032403ejg.601.2023.01.24.16.16.20; Tue, 24 Jan 2023 16:17:05 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=PaPFcjkY; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234623AbjAXXte (ORCPT + 99 others); Tue, 24 Jan 2023 18:49:34 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:49214 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234493AbjAXXtZ (ORCPT ); Tue, 24 Jan 2023 18:49:25 -0500 Received: from mail-pj1-x104a.google.com (mail-pj1-x104a.google.com [IPv6:2607:f8b0:4864:20::104a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 2E01A518E0 for ; Tue, 24 Jan 2023 15:49:21 -0800 (PST) Received: by mail-pj1-x104a.google.com with SMTP id x12-20020a17090abc8c00b0022bfadb3a4dso149669pjr.0 for ; Tue, 24 Jan 2023 15:49:21 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:from:to:cc:subject:date:message-id:reply-to; bh=etFpX/482XpVxpk8+X7x9LZK6GHklrmOWmBG2Y9l9JY=; b=PaPFcjkY84c1BKENp3ubJyva/NBLjPo7sEgZagcT9qRPJXepm8n4k89Wf8MPHqwKV2 xL2OgFZmaF2JpR1nfmxlaWEWDb0SwBh4jQ84r9tWNS3F4rOTph2CtS2Ud0rtf2oY/pk+ 65GpkRiNS+I9N4JGjXmB5WmUJe4XN0xc9GAjoJiJNVAMjRnWDoc2gK7HW6T6w8zwXL3O 553HY1KeSy3AINSbZpAOVOFSwHpc2Tin9dHIK7KsOMQXnKKLDahp8tBeTiCMoPoChrwY 5GpuYETk271PwyEYZ7xzfyOBnY6mgTYC88yDxdYQTM2LFZt6YibyDdBDND7jAHi3UFpA p4mA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=etFpX/482XpVxpk8+X7x9LZK6GHklrmOWmBG2Y9l9JY=; b=N3zeGFocWjhtczuFdwKNzGUFNHUJG/VjAeG3ZJ915KNdtBE9Kqlgy5vvuaIQLX5/i1 ag9NWSdLuwO26HvDqlbHg4yuD0TxVn6r0sj/K74F0DtR6Em/CByQCdmDGQkCxMIuG0Sy DagUYkjbPvQF1c8XA/UOzfT1KJwvhds18CJFbZLdO2uceZ2Z8igLn3GQOj75egKekGep GjhYsYy7FdxocS7ch+x+8m+QTcjM7n4gOjQiGg23eC8WrYdUL0wrDFSQ2OKpvfSUPqTI 5Nmv0aUAUsq/w2zENF0drlnJ0C8x3uSwxftTsPO/dLMb5VLyjYEPTFu9f0Wv9WR4vPb8 vNvg== X-Gm-Message-State: AO0yUKXGSfATNSIv9E+DkbHe2O2U8jxIPm8fUHsz0BamL6oNhmPUKq1g /ocCtTQGjqfj9Tleo9DndXC5ebzQ5BE= X-Received: from zagreus.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:5c37]) (user=seanjc job=sendgmr) by 2002:a63:131e:0:b0:4d9:ed5e:5e99 with SMTP id i30-20020a63131e000000b004d9ed5e5e99mr11422pgl.69.1674604161397; Tue, 24 Jan 2023 15:49:21 -0800 (PST) Reply-To: Sean Christopherson Date: Tue, 24 Jan 2023 23:49:04 +0000 In-Reply-To: <20230124234905.3774678-1-seanjc@google.com> Mime-Version: 1.0 References: <20230124234905.3774678-1-seanjc@google.com> X-Mailer: git-send-email 2.39.1.456.gfc5497dd1b-goog Message-ID: <20230124234905.3774678-6-seanjc@google.com> Subject: [PATCH 5/6] KVM: x86/pmu: Don't tell userspace to save MSRs for non-existent fixed PMCs From: Sean Christopherson To: Sean Christopherson , Paolo Bonzini , Vitaly Kuznetsov Cc: kvm@vger.kernel.org, linux-kernel@vger.kernel.org, Aaron Lewis , Weijiang Yang , Like Xu X-Spam-Status: No, score=-9.6 required=5.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE,SPF_PASS,USER_IN_DEF_DKIM_WL autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1755951478078921447?= X-GMAIL-MSGID: =?utf-8?q?1755951478078921447?= From: Like Xu Limit the set of MSRs for fixed PMU counters based on the number of fixed counters actually supported by the host so that userspace doesn't waste time saving and restoring dummy values. Signed-off-by: Like Xu [sean: split for !enable_pmu logic, drop min(), write changelog] Signed-off-by: Sean Christopherson --- arch/x86/include/asm/kvm_host.h | 1 + arch/x86/kvm/x86.c | 5 +++++ 2 files changed, 6 insertions(+) diff --git a/arch/x86/include/asm/kvm_host.h b/arch/x86/include/asm/kvm_host.h index cd0151e6af62..adb92fc4d7c9 100644 --- a/arch/x86/include/asm/kvm_host.h +++ b/arch/x86/include/asm/kvm_host.h @@ -514,6 +514,7 @@ struct kvm_pmc { #define MSR_ARCH_PERFMON_PERFCTR_MAX (MSR_ARCH_PERFMON_PERFCTR0 + KVM_INTEL_PMC_MAX_GENERIC - 1) #define MSR_ARCH_PERFMON_EVENTSEL_MAX (MSR_ARCH_PERFMON_EVENTSEL0 + KVM_INTEL_PMC_MAX_GENERIC - 1) #define KVM_PMC_MAX_FIXED 3 +#define MSR_ARCH_PERFMON_FIXED_CTR_MAX (MSR_ARCH_PERFMON_FIXED_CTR0 + KVM_PMC_MAX_FIXED - 1) #define KVM_AMD_PMC_MAX_GENERIC 6 struct kvm_pmu { unsigned nr_arch_gp_counters; diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c index 25da2cc09e55..3c49c86b973d 100644 --- a/arch/x86/kvm/x86.c +++ b/arch/x86/kvm/x86.c @@ -7055,6 +7055,11 @@ static void kvm_probe_msr_to_save(u32 msr_index) kvm_pmu_cap.num_counters_gp) return; break; + case MSR_ARCH_PERFMON_FIXED_CTR0 ... MSR_ARCH_PERFMON_FIXED_CTR_MAX: + if (msr_index - MSR_ARCH_PERFMON_FIXED_CTR0 >= + kvm_pmu_cap.num_counters_fixed) + return; + break; case MSR_IA32_XFD: case MSR_IA32_XFD_ERR: if (!kvm_cpu_cap_has(X86_FEATURE_XFD)) From patchwork Tue Jan 24 23:49:05 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Christopherson X-Patchwork-Id: 47973 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:eb09:0:0:0:0:0 with SMTP id s9csp7719wrn; Tue, 24 Jan 2023 16:17:45 -0800 (PST) X-Google-Smtp-Source: AMrXdXtu9pWVoxtgtuG33skrRiFk4mmMLacs5/XL0bDPMnJJxQVQltDBSkpqkYONPvA/7H+UkUpi X-Received: by 2002:a05:6a21:910a:b0:b9:46a1:7f14 with SMTP id tn10-20020a056a21910a00b000b946a17f14mr19394055pzb.56.1674605864871; Tue, 24 Jan 2023 16:17:44 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1674605864; cv=none; d=google.com; s=arc-20160816; b=k7binPt/z40++uATFnDbTWBUjgjOzkN07f3GfnTepCILaOsXeY8VMaX54G7jNhis21 u41D88YZzXj8c0aKPI0ZyWApQz+GcY5R4qeT81z4uIld7bBtxmEhCZvm2p/7OFQA6XWu 9i7Z3jQukkxA4VOsxdQJE1KckPlnQccFvQqo6IrL1slhltFlu/8QWxTUQTVlHb1rAnCS bGLjzfa+UZp9T+hWEuRL5+B1ybyqOUUDmh5aGtpKwIHecRcrEXaPk0oTr0IvQBGUv0gM A7Jd5brAaZQUvdZ5ppNgAdh1Gvbubh4wuMFp1nk9Um7USGun5xwBXk9pBv65iWNuKJ7Z 5x0g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:from:subject:message-id:references :mime-version:in-reply-to:date:reply-to:dkim-signature; bh=UzMRX5SFUfOVkL2DhNd2WmgacyEPpUxAyESmr0cYTPo=; b=ZrZDOT/8D+NaXHrgLTbh1G+7T0tRzTltq92uP8NnrY/ATs9GzjbhAlOowQy4yH0po9 kNEfLSTL9Z+I57jGoExrrl+G1uRqHnHpxA74PYpZRdhb8eY/spjas3jH5MANAaaJKWnw Tv2Q7x9kcBNgtZKPhH6UAO9QSE/R5Hnzg6fcUQ/Iy/epJvV0YWwj8vCGXj/9o797W1AB eYDmyRuRRUWFawforlPgPdvzvKV2AxZwzQZh3nLGrcooVSlju6oKQPxVVhOtXubpJ0wc aapO2Azc6W3VHIGOJKU8rbGWt9Qro7B3q2QGJwRTjR+Oe4foGvZQ/w+Cs5EYSeOYswQs 1xHQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=U+2hjRjw; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id i18-20020a17090332d200b00189947bda10si4122878plr.127.2023.01.24.16.17.06; Tue, 24 Jan 2023 16:17:44 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=U+2hjRjw; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234466AbjAXXtb (ORCPT + 99 others); Tue, 24 Jan 2023 18:49:31 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:49242 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234527AbjAXXtZ (ORCPT ); Tue, 24 Jan 2023 18:49:25 -0500 Received: from mail-pf1-x449.google.com (mail-pf1-x449.google.com [IPv6:2607:f8b0:4864:20::449]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 9AA2E49404 for ; Tue, 24 Jan 2023 15:49:23 -0800 (PST) Received: by mail-pf1-x449.google.com with SMTP id f15-20020a62380f000000b0058db55a8d7aso7457649pfa.21 for ; Tue, 24 Jan 2023 15:49:23 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:from:to:cc:subject:date:message-id:reply-to; bh=UzMRX5SFUfOVkL2DhNd2WmgacyEPpUxAyESmr0cYTPo=; b=U+2hjRjwdAw4rgSwJT4rTLx+XWZ6VA8xRr9CDH5MmtQ0DMC6I8AZu0utxcCMToxUt0 qEvmcAkPf0Z2PX0nGGVKoNQUWR9l3i/D88vwPrfs8FLHGmwsaNXkyQ4SaZ0wNIo8qhJZ R8B0xXP4sv2OG4APlw8RdWx2ZdMWW2NUv5HfnHJ7M+2LhRT5WIz/p0YGDe3qGGVS8kRc WcwkOSYbpY2N7QzFWXEuHkLkmO9KTO0XKtPlZ+kjdrEluzgZ2iPKY0u7rrxc+5NhusWx XxSaFjfe7ss8AqeFDPdA+yjfi8DZ9I7MtXqYDCSNAlrfv5iKsocGtMA8YD6lzk6vGcYX foLQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=UzMRX5SFUfOVkL2DhNd2WmgacyEPpUxAyESmr0cYTPo=; b=UC8ZjWm8pnHVhI4umI9O/qEFpAKw4fVvjzS2/+SYERUlDDuWTpDnDQIgAQpoGy0rag UC3Kc9mh5e1+FWbwaE5LFgl5KQcYMhItE7d92gUZQceNLfXMxc2VJyu5m+ozghN2IbX9 SQ08/8v7Lur17yir0L+CZ8BIEFFI4rbv8mfo+P4sZVYLYGguv7hTNlJxvlv+GuSs1E3G u4JI4mUvRRf5JSUNcBq3DYHBborQpWknl3Giv0lo0KYAeKTd8ppBa4gTmvF/mLC2rvFz 6DcSqd9xpkmUWOlf2/VXSg+FlLaFZxw0mz4NUjVcpbq1eic6CXQdJSAYJEcazbSMEK7H DqIQ== X-Gm-Message-State: AFqh2kplOvdjSXGiIX0StWx3/IvgkYEgNm6X/BpkfRGsTo83lSwednlS D7wJLEuP/c0MM8mXQSujUz/FGd9NSwk= X-Received: from zagreus.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:5c37]) (user=seanjc job=sendgmr) by 2002:a05:6a00:4088:b0:576:cc71:b8e4 with SMTP id bw8-20020a056a00408800b00576cc71b8e4mr3170694pfb.20.1674604163135; Tue, 24 Jan 2023 15:49:23 -0800 (PST) Reply-To: Sean Christopherson Date: Tue, 24 Jan 2023 23:49:05 +0000 In-Reply-To: <20230124234905.3774678-1-seanjc@google.com> Mime-Version: 1.0 References: <20230124234905.3774678-1-seanjc@google.com> X-Mailer: git-send-email 2.39.1.456.gfc5497dd1b-goog Message-ID: <20230124234905.3774678-7-seanjc@google.com> Subject: [PATCH 6/6] KVM: x86/pmu: Provide "error" semantics for unsupported-but-known PMU MSRs From: Sean Christopherson To: Sean Christopherson , Paolo Bonzini , Vitaly Kuznetsov Cc: kvm@vger.kernel.org, linux-kernel@vger.kernel.org, Aaron Lewis , Weijiang Yang , Like Xu X-Spam-Status: No, score=-9.6 required=5.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE,SPF_PASS,USER_IN_DEF_DKIM_WL autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1755951519423277910?= X-GMAIL-MSGID: =?utf-8?q?1755951519423277910?= Provide "error" semantics (read zeros, drop writes) for userspace accesses to MSRs that are ultimately unsupported for whatever reason, but for which KVM told userspace to save and restore the MSR, i.e. for MSRs that KVM included in KVM_GET_MSR_INDEX_LIST. Previously, KVM special cased a few PMU MSRs that were problematic at one point or another. Extend the treatment to all PMU MSRs, e.g. to avoid spurious unsupported accesses. Note, the logic can also be used for non-PMU MSRs, but as of today only PMU MSRs can end up being unsupported after KVM told userspace to save and restore them. Signed-off-by: Sean Christopherson --- arch/x86/kvm/x86.c | 51 ++++++++++++++++++++++++++-------------------- 1 file changed, 29 insertions(+), 22 deletions(-) diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c index 3c49c86b973d..64c567a1b32b 100644 --- a/arch/x86/kvm/x86.c +++ b/arch/x86/kvm/x86.c @@ -3561,6 +3561,18 @@ static void record_steal_time(struct kvm_vcpu *vcpu) mark_page_dirty_in_slot(vcpu->kvm, ghc->memslot, gpa_to_gfn(ghc->gpa)); } +static bool kvm_is_msr_to_save(u32 msr_index) +{ + unsigned int i; + + for (i = 0; i < num_msrs_to_save; i++) { + if (msrs_to_save[i] == msr_index) + return true; + } + + return false; +} + int kvm_set_msr_common(struct kvm_vcpu *vcpu, struct msr_data *msr_info) { u32 msr = msr_info->index; @@ -3876,20 +3888,18 @@ int kvm_set_msr_common(struct kvm_vcpu *vcpu, struct msr_data *msr_info) vcpu->arch.guest_fpu.xfd_err = data; break; #endif - case MSR_IA32_PEBS_ENABLE: - case MSR_IA32_DS_AREA: - case MSR_PEBS_DATA_CFG: - case MSR_F15H_PERF_CTL0 ... MSR_F15H_PERF_CTR5: + default: if (kvm_pmu_is_valid_msr(vcpu, msr)) return kvm_pmu_set_msr(vcpu, msr_info); + /* * Userspace is allowed to write '0' to MSRs that KVM reports * as to-be-saved, even if an MSRs isn't fully supported. */ - return !msr_info->host_initiated || data; - default: - if (kvm_pmu_is_valid_msr(vcpu, msr)) - return kvm_pmu_set_msr(vcpu, msr_info); + if (msr_info->host_initiated && !data && + kvm_is_msr_to_save(msr)) + break; + return KVM_MSR_RET_INVALID; } return 0; @@ -3979,20 +3989,6 @@ int kvm_get_msr_common(struct kvm_vcpu *vcpu, struct msr_data *msr_info) case MSR_DRAM_ENERGY_STATUS: /* DRAM controller */ msr_info->data = 0; break; - case MSR_IA32_PEBS_ENABLE: - case MSR_IA32_DS_AREA: - case MSR_PEBS_DATA_CFG: - case MSR_F15H_PERF_CTL0 ... MSR_F15H_PERF_CTR5: - if (kvm_pmu_is_valid_msr(vcpu, msr_info->index)) - return kvm_pmu_get_msr(vcpu, msr_info); - /* - * Userspace is allowed to read MSRs that KVM reports as - * to-be-saved, even if an MSR isn't fully supported. - */ - if (!msr_info->host_initiated) - return 1; - msr_info->data = 0; - break; case MSR_K7_EVNTSEL0 ... MSR_K7_EVNTSEL3: case MSR_K7_PERFCTR0 ... MSR_K7_PERFCTR3: case MSR_P6_PERFCTR0 ... MSR_P6_PERFCTR1: @@ -4248,6 +4244,17 @@ int kvm_get_msr_common(struct kvm_vcpu *vcpu, struct msr_data *msr_info) default: if (kvm_pmu_is_valid_msr(vcpu, msr_info->index)) return kvm_pmu_get_msr(vcpu, msr_info); + + /* + * Userspace is allowed to read MSRs that KVM reports as + * to-be-saved, even if an MSR isn't fully supported. + */ + if (msr_info->host_initiated && + kvm_is_msr_to_save(msr_info->index)) { + msr_info->data = 0; + break; + } + return KVM_MSR_RET_INVALID; } return 0;