On Tue, 2022-07-12 at 15:50 +0200, Vitaly Kuznetsov wrote: > Windows 10/11 guests with Hyper-V role (WSL2) enabled are observed to > hang upon boot or shortly after when a non-default TSC frequency was > set for L1. The issue is observed on a host where TSC scaling is > supported. The problem appears to be that Windows doesn't use TSC > frequency for its guests even when the feature is advertised and KVM > filters SECONDARY_EXEC_TSC_SCALING out when creating L2 controls from > L1's. This leads to L2 running with the default frequency (matching > host's) while L1 is running with an altered one. Ouch. I guess that needs a Fixes tag? Fixes: d041b5ea93352b ("KVM: nVMX: Enable nested TSC scaling") Also this is thankfully Intel specific, because in AMD you can't enable TSC scaling - there is just an MSR with default value of 1.0, which one can change if TSC scaling is supported in CPUID. Reviewed-by: Maxim Levitsky <mlevitsk@xxxxxxxxxx> Best regards, Maxim Levitsky > > Keep SECONDARY_EXEC_TSC_SCALING in secondary exec controls for L2 when > it was set for L1. TSC_MULTIPLIER is already correctly computed and > written by prepare_vmcs02(). > > Signed-off-by: Vitaly Kuznetsov <vkuznets@xxxxxxxxxx> > --- > arch/x86/kvm/vmx/nested.c | 1 - > 1 file changed, 1 deletion(-) > > diff --git a/arch/x86/kvm/vmx/nested.c b/arch/x86/kvm/vmx/nested.c > index 778f82015f03..bfa366938c49 100644 > --- a/arch/x86/kvm/vmx/nested.c > +++ b/arch/x86/kvm/vmx/nested.c > @@ -2284,7 +2284,6 @@ static void prepare_vmcs02_early(struct vcpu_vmx *vmx, struct loaded_vmcs *vmcs0 > SECONDARY_EXEC_VIRTUAL_INTR_DELIVERY | > SECONDARY_EXEC_APIC_REGISTER_VIRT | > SECONDARY_EXEC_ENABLE_VMFUNC | > - SECONDARY_EXEC_TSC_SCALING | > SECONDARY_EXEC_DESC); > > if (nested_cpu_has(vmcs12,