OSDN Git Service

kvm: x86: limit the maximum number of vPMU fixed counters to 3
authorLike Xu <like.xu@linux.intel.com>
Wed, 24 Jun 2020 01:59:28 +0000 (09:59 +0800)
committerPaolo Bonzini <pbonzini@redhat.com>
Wed, 8 Jul 2020 20:21:59 +0000 (16:21 -0400)
Some new Intel platforms (such as TGL) already have the
fourth fixed counter TOPDOWN.SLOTS, but it has not been
fully enabled on KVM and the host.

Therefore, we limit edx.split.num_counters_fixed to 3,
so that it does not break the kvm-unit-tests PMU test
case and bad-handled userspace.

Signed-off-by: Like Xu <like.xu@linux.intel.com>
Message-Id: <20200624015928.118614-1-like.xu@linux.intel.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
arch/x86/kvm/cpuid.c
arch/x86/kvm/pmu.h

index 5bec182..6f2b6e9 100644 (file)
@@ -606,7 +606,7 @@ static inline int __do_cpuid_func(struct kvm_cpuid_array *array, u32 function)
                eax.split.bit_width = cap.bit_width_gp;
                eax.split.mask_length = cap.events_mask_len;
 
-               edx.split.num_counters_fixed = cap.num_counters_fixed;
+               edx.split.num_counters_fixed = min(cap.num_counters_fixed, MAX_FIXED_COUNTERS);
                edx.split.bit_width_fixed = cap.bit_width_fixed;
                edx.split.reserved = 0;
 
index ab85eed..067fef5 100644 (file)
@@ -15,6 +15,8 @@
 #define VMWARE_BACKDOOR_PMC_REAL_TIME          0x10001
 #define VMWARE_BACKDOOR_PMC_APPARENT_TIME      0x10002
 
+#define MAX_FIXED_COUNTERS     3
+
 struct kvm_event_hw_type_mapping {
        u8 eventsel;
        u8 unit_mask;