qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH v6 15/19] i386: expand Hyper-V features during CPU feature ex


From: Eduardo Habkost
Subject: Re: [PATCH v6 15/19] i386: expand Hyper-V features during CPU feature expansion time
Date: Wed, 26 May 2021 12:57:19 -0400

On Mon, May 24, 2021 at 02:13:09PM +0200, Vitaly Kuznetsov wrote:
[...]
> >> diff --git a/target/i386/kvm/kvm.c b/target/i386/kvm/kvm.c
> >> index a42263b24fca..d5551c4ab5cf 100644
> >> --- a/target/i386/kvm/kvm.c
> >> +++ b/target/i386/kvm/kvm.c
> >> @@ -1216,13 +1216,22 @@ static uint32_t hv_build_cpuid_leaf(CPUState *cs, 
> >> uint32_t func, int reg)
> >>   * of 'hv_passthrough' mode and fills the environment with all supported
> >>   * Hyper-V features.
> >>   */
> >> -static void hyperv_expand_features(CPUState *cs, Error **errp)
> >> +void kvm_hyperv_expand_features(X86CPU *cpu, Error **errp)
> >>  {
> >> -    X86CPU *cpu = X86_CPU(cs);
> >> +    CPUState *cs = CPU(cpu);
> >>  
> >>      if (!hyperv_enabled(cpu))
> >>          return;
> >>  
> >> +    /*
> >> +     * When kvm_hyperv_expand_features is called at CPU feature expansion
> >> +     * time per-CPU kvm_state is not available yet so we can only proceed
> >> +     * when KVM_CAP_SYS_HYPERV_CPUID is supported.
> >> +     */
> >> +    if (!cs->kvm_state &&
> >> +        !kvm_check_extension(kvm_state, KVM_CAP_SYS_HYPERV_CPUID))
> >> +        return;
> >> +
> >>      if (cpu->hyperv_passthrough) {
> >>          cpu->hyperv_vendor_id[0] =
> >>              hv_cpuid_get_host(cs, HV_CPUID_VENDOR_AND_MAX_FUNCTIONS, 
> >> R_EBX);
> >> @@ -1556,7 +1565,7 @@ int kvm_arch_init_vcpu(CPUState *cs)
> >>      env->apic_bus_freq = KVM_APIC_BUS_FREQUENCY;
> >>  
> >>      /* Paravirtualization CPUIDs */
> >> -    hyperv_expand_features(cs, &local_err);
> >> +    kvm_hyperv_expand_features(cpu, &local_err);
> >
> > Do we still need to call the function again here?
> >
> > If the first expansion isn't expanding everything, I'm afraid
> > this second call will hide bugs in query-cpu-model-expansion.
> >
> 
> The first expansion will do nothing if KVM_CAP_SYS_HYPERV_CPUID is not
> supported, calling it here allows us to proceed. The series makes
> 'query-cpu-model-expansion' output correct only with
> KVM_CAP_SYS_HYPERV_CPUID, without it we don't seem to be able to do much
> (unless we decide to create a 'scratch' CPU or something like that).

Oh, I see.  I suggest adding a comment explaining that.
Developers might be tempted to delete it and not notice it breaks
under older kernels.

-- 
Eduardo




reply via email to

[Prev in Thread] Current Thread [Next in Thread]