From: Vitaly Kuznetsov <vkuznets@redhat.com>
To: Jim Mattson <jmattson@google.com>
Cc: Marc Orr <marcorr@google.com>,
kvm@vger.kernel.org,
Sean Christopherson <sean.j.christopherson@intel.com>,
Paolo Bonzini <pbonzini@redhat.com>
Subject: Re: [PATCH] kvm: vmx: Limit guest PMCs to those supported on the host
Date: Tue, 01 Oct 2019 13:32:32 +0200 [thread overview]
Message-ID: <87blv03dm7.fsf@vitty.brq.redhat.com> (raw)
In-Reply-To: <20190930233854.158117-1-jmattson@google.com>
Jim Mattson <jmattson@google.com> writes:
> KVM can only virtualize as many PMCs as the host supports.
>
> Limit the number of generic counters and fixed counters to the number
> of corresponding counters supported on the host, rather than to
> INTEL_PMC_MAX_GENERIC and INTEL_PMC_MAX_FIXED, respectively.
>
> Note that INTEL_PMC_MAX_GENERIC is currently 32, which exceeds the 18
> contiguous MSR indices reserved by Intel for event selectors. Since
> the existing code relies on a contiguous range of MSR indices for
> event selectors, it can't possibly work for more than 18 general
> purpose counters.
Should we also trim msrs_to_save[] by removing impossible entries
(18-31) then?
>
> Fixes: f5132b01386b5a ("KVM: Expose a version 2 architectural PMU to a guests")
> Signed-off-by: Jim Mattson <jmattson@google.com>
> Reviewed-by: Marc Orr <marcorr@google.com>
> ---
> arch/x86/kvm/vmx/pmu_intel.c | 7 +++++--
> 1 file changed, 5 insertions(+), 2 deletions(-)
>
> diff --git a/arch/x86/kvm/vmx/pmu_intel.c b/arch/x86/kvm/vmx/pmu_intel.c
> index 4dea0e0e7e392..3e9c059099e94 100644
> --- a/arch/x86/kvm/vmx/pmu_intel.c
> +++ b/arch/x86/kvm/vmx/pmu_intel.c
> @@ -262,6 +262,7 @@ static int intel_pmu_set_msr(struct kvm_vcpu *vcpu, struct msr_data *msr_info)
> static void intel_pmu_refresh(struct kvm_vcpu *vcpu)
> {
> struct kvm_pmu *pmu = vcpu_to_pmu(vcpu);
> + struct x86_pmu_capability x86_pmu;
> struct kvm_cpuid_entry2 *entry;
> union cpuid10_eax eax;
> union cpuid10_edx edx;
> @@ -283,8 +284,10 @@ static void intel_pmu_refresh(struct kvm_vcpu *vcpu)
> if (!pmu->version)
> return;
>
> + perf_get_x86_pmu_capability(&x86_pmu);
> +
> pmu->nr_arch_gp_counters = min_t(int, eax.split.num_counters,
> - INTEL_PMC_MAX_GENERIC);
> + x86_pmu.num_counters_gp);
This is a theoretical fix which is orthogonal to the issue with
state_test I reported on Friday, right? Because in my case
'eax.split.num_counters' is already 8.
> pmu->counter_bitmask[KVM_PMC_GP] = ((u64)1 << eax.split.bit_width) - 1;
> pmu->available_event_types = ~entry->ebx &
> ((1ull << eax.split.mask_length) - 1);
> @@ -294,7 +297,7 @@ static void intel_pmu_refresh(struct kvm_vcpu *vcpu)
> } else {
> pmu->nr_arch_fixed_counters =
> min_t(int, edx.split.num_counters_fixed,
> - INTEL_PMC_MAX_FIXED);
> + x86_pmu.num_counters_fixed);
> pmu->counter_bitmask[KVM_PMC_FIXED] =
> ((u64)1 << edx.split.bit_width_fixed) - 1;
> }
--
Vitaly
next prev parent reply other threads:[~2019-10-01 11:32 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-09-30 23:38 [PATCH] kvm: vmx: Limit guest PMCs to those supported on the host Jim Mattson
2019-10-01 11:32 ` Vitaly Kuznetsov [this message]
2019-10-01 13:28 ` Paolo Bonzini
2019-10-01 14:07 ` Jim Mattson
2019-10-01 14:24 ` Paolo Bonzini
2019-10-01 14:30 ` Jim Mattson
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87blv03dm7.fsf@vitty.brq.redhat.com \
--to=vkuznets@redhat.com \
--cc=jmattson@google.com \
--cc=kvm@vger.kernel.org \
--cc=marcorr@google.com \
--cc=pbonzini@redhat.com \
--cc=sean.j.christopherson@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.