On 24/09/20 16:57, Vitaly Kuznetsov wrote: > HV_STIMER_DIRECT_MODE_AVAILABLE is the last conditionally set feature bit > in KVM_GET_SUPPORTED_HV_CPUID but it doesn't have to be conditional: first, > this bit is only an indication to userspace VMM that direct mode stimers > are supported, it still requires manual enablement (enabling SynIC) to > work so no VMM should just blindly copy it to guest CPUIDs. Second, > lapic_in_kernel() is a must for SynIC. Expose the bit unconditionally. > > Signed-off-by: Vitaly Kuznetsov <vkuznets@xxxxxxxxxx> > --- > arch/x86/kvm/hyperv.c | 8 +------- > 1 file changed, 1 insertion(+), 7 deletions(-) > > diff --git a/arch/x86/kvm/hyperv.c b/arch/x86/kvm/hyperv.c > index 6da20f91cd59..503829f71270 100644 > --- a/arch/x86/kvm/hyperv.c > +++ b/arch/x86/kvm/hyperv.c > @@ -2028,13 +2028,7 @@ int kvm_vcpu_ioctl_get_hv_cpuid(struct kvm_vcpu *vcpu, struct kvm_cpuid2 *cpuid, > ent->ebx |= HV_DEBUGGING; > ent->edx |= HV_X64_GUEST_DEBUGGING_AVAILABLE; > ent->edx |= HV_FEATURE_DEBUG_MSRS_AVAILABLE; > - > - /* > - * Direct Synthetic timers only make sense with in-kernel > - * LAPIC > - */ > - if (lapic_in_kernel(vcpu)) > - ent->edx |= HV_STIMER_DIRECT_MODE_AVAILABLE; > + ent->edx |= HV_STIMER_DIRECT_MODE_AVAILABLE; > > break; > > Sorry for the late reply. I think this is making things worse. It's obviously okay to add a system KVM_GET_SUPPORTED_HV_CPUID, and I guess it makes sense to have bits in there that require to enable a capability. For example, KVM_GET_SUPPORTED_CPUID has a couple bits such as X2APIC, that we return even if they require in-kernel irqchip. For the vCPU version however we should be able to copy the returned leaves to KVM_SET_CPUID2, meaning that unsupported features should be masked. Paolo