On 2025-03-02 at 22:00, Dongli Zhang wrote: > +static bool is_same_vendor(CPUX86State *env) > +{ > + static uint32_t host_cpuid_vendor1; > + static uint32_t host_cpuid_vendor2; > + static uint32_t host_cpuid_vendor3; What's the purpose of making these variables static? > + host_cpuid(0x0, 0, NULL, &host_cpuid_vendor1, > &host_cpuid_vendor3, > + &host_cpuid_vendor2); > + > + return env->cpuid_vendor1 == host_cpuid_vendor1 && > + env->cpuid_vendor2 == host_cpuid_vendor2 && > + env->cpuid_vendor3 == host_cpuid_vendor3; > +} > + > +static void kvm_init_pmu_info(CPUState *cs) > +{ > + X86CPU *cpu = X86_CPU(cs); > + CPUX86State *env = &cpu->env; > + > + /* > + * The PMU virtualization is disabled by kvm.enable_pmu=N. > + */ > + if (kvm_pmu_disabled) { > + return; > + } > + > + /* > + * It is not supported to virtualize AMD PMU registers on Intel > + * processors, nor to virtualize Intel PMU registers on AMD > processors. > + */ > + if (!is_same_vendor(env)) { > + return; > + } > + > + /* > + * If KVM_CAP_PMU_CAPABILITY is not supported, there is no way > to > + * disable the AMD pmu virtualization. s/pmu/PMU/