KVM: PMU emulation: GLOBAL_CTRL MSR should be enabled on reset.
PATCH 1/1 KVM: PMU emulation: GLOBAL_CTRL MSR should be enabled on reset.
On reset all MPU counters should be enabled in GLOBAL_CTRL MSR.
Signed-off-by Gleb Natapov <[email protected]>
arch/x86/kvm/pmu.c +9 -9
@@ -459,17 +459,17 @@ void kvm_pmu_cpuid_update(struct kvm_vcpu *vcpu) pmu->available_event_types = ~entry->ebx & ((1ull << bitmap_len) -1 );if (pmu->version ==1 ) { - pmu->global_ctrl = (1 << pmu->nr_arch_gp_counters) -1 ; -return ; + pmu->nr_arch_fixed_counters =0 ; + }else { + pmu->nr_arch_fixed_counters =min ((int )(entry->edx &0x1f ), +X86_PMC_MAX_FIXED ); + pmu->counter_bitmask[KVM_PMC_FIXED ] = + ((u64 )1 << ((entry->edx >>5 ) &0xff )) -1 ; } - pmu->nr_arch_fixed_counters =min ((int )(entry->edx &0x1f ), -X86_PMC_MAX_FIXED ); - pmu->counter_bitmask[KVM_PMC_FIXED ] = - ((u64 )1 << ((entry->edx >>5 ) &0xff )) -1 ; - pmu->global_ctrl_mask = ~(((1 << pmu->nr_arch_gp_counters) -1 ) - | (((1ull << pmu->nr_arch_fixed_counters) -1 ) - <<X86_PMC_IDX_FIXED )); + pmu->global_ctrl = ((1 << pmu->nr_arch_gp_counters) -1 ) | + (((1ull << pmu->nr_arch_fixed_counters) -1 ) <<X86_PMC_IDX_FIXED ); + pmu->global_ctrl_mask = ~pmu->global_ctrl; }void kvm_pmu_init (struct kvm_vcpu *vcpu)
--
Gleb.
Quoted 24 lines · Gleb Natapov
On reset all MPU counters should be enabled in
GLOBAL_CTRLMSR.Signed-off-by Gleb Natapov <[email protected]>arch/x86/kvm/pmu.c +6
-5@@ -459,17 +459,17 @@ void kvm_pmu_cpuid_update(struct kvm_vcpu *vcpu) pmu->available_event_types = ~entry->ebx & ((1ull << bitmap_len) -1 );if (pmu->version ==1 ) { - pmu->global_ctrl = (1 << pmu->nr_arch_gp_counters) -1 ; -return ; + pmu->nr_arch_fixed_counters =0 ; + }else { + pmu->nr_arch_fixed_counters =min ((int )(entry->edx &0x1f ), +X86_PMC_MAX_FIXED ); + pmu->counter_bitmask[KVM_PMC_FIXED ] = + ((u64 )1 << ((entry->edx >>5 ) &0xff )) -1 ; } - pmu->nr_arch_fixed_counters =min ((int )(entry->edx &0x1f ), -X86_PMC_MAX_FIXED ); - pmu->counter_bitmask[KVM_PMC_FIXED] =
arch/x86/kvm/pmu.c void kvm_pmu_cpuid_update(struct kvm_vcpu *vcpu) · line 475
Quoted 10 lines
arch/x86/kvm/pmu.c +3
-4- ((u64 )1 << ((entry->edx >>5 ) &0xff )) -1 ; - pmu->global_ctrl_mask = ~(((1 << pmu->nr_arch_gp_counters) -1 ) - | (((1ull << pmu->nr_arch_fixed_counters) -1 ) - <<X86_PMC_IDX_FIXED )); + pmu->global_ctrl = ((1 << pmu->nr_arch_gp_counters) -1 ) | + (((1ull << pmu->nr_arch_fixed_counters) -1 ) <<X86_PMC_IDX_FIXED ); + pmu->global_ctrl_mask = ~pmu->global_ctrl; }
This is not called on INIT (not sure it should be). On the other hand update_cpuid() is not the best place to initialize stuff.
Oh well, this can be fixed later (not sure its possible), I'll apply this to master.
Signature · 1 line
error compiling committee.c: too many arguments to function