Maxim Levitsky <mlevitsk@xxxxxxxxxx> writes: > 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 ^^^ scaling ^^^ >> 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") > I dismissed that because prior to d041b5ea93352b SECONDARY_EXEC_TSC_SCALING was filtered out in nested_vmx_setup_ctls_msrs() but now I think I was wrong, SECONDARY_EXEC_TSC_SCALING was likely kept in VMCS02 regardless of that. Will add in v2. > 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> Thanks! > 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, > > -- Vitaly