Kindly ping.

I think we may need this patch, as we limit the maximum vPMU version to 2:
    eax.split.version_id = min(cap.version, 2);

Thanks,
Like Xu

On 2020/6/24 9:59, Like Xu wrote:
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...@linux.intel.com>
---
  arch/x86/kvm/cpuid.c | 2 +-
  arch/x86/kvm/pmu.h   | 2 ++
  2 files changed, 3 insertions(+), 1 deletion(-)

diff --git a/arch/x86/kvm/cpuid.c b/arch/x86/kvm/cpuid.c
index 8a294f9747aa..0a2c6d2b4650 100644
--- a/arch/x86/kvm/cpuid.c
+++ b/arch/x86/kvm/cpuid.c
@@ -604,7 +604,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;
diff --git a/arch/x86/kvm/pmu.h b/arch/x86/kvm/pmu.h
index ab85eed8a6cc..067fef51760c 100644
--- a/arch/x86/kvm/pmu.h
+++ b/arch/x86/kvm/pmu.h
@@ -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;

Reply via email to