On 21/10/19 18:06, Like Xu wrote:
>  
> +             __set_bit(INTEL_PMC_IDX_FIXED + i, pmu->pmc_in_use);
>               reprogram_fixed_counter(pmc, new_ctrl, i);
>       }
>  
> @@ -329,6 +330,11 @@ static void intel_pmu_refresh(struct kvm_vcpu *vcpu)
>           (boot_cpu_has(X86_FEATURE_HLE) || boot_cpu_has(X86_FEATURE_RTM)) &&
>           (entry->ebx & (X86_FEATURE_HLE|X86_FEATURE_RTM)))
>               pmu->reserved_bits ^= HSW_IN_TX|HSW_IN_TX_CHECKPOINTED;
> +
> +     bitmap_set(pmu->all_valid_pmc_idx,
> +             0, pmu->nr_arch_gp_counters);
> +     bitmap_set(pmu->all_valid_pmc_idx,
> +             INTEL_PMC_MAX_GENERIC, pmu->nr_arch_fixed_counters);

The offset needs to be INTEL_PMC_IDX_FIXED for GP counters, and 0 for
fixed counters, otherwise pmc_in_use and all_valid_pmc_idx are not in sync.

Paolo

Reply via email to