Patch "KVM: nVMX: Properly expose ENABLE_USR_WAIT_PAUSE control to L1" has been added to the 5.4-stable tree

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

 



This is a note to let you know that I've just added the patch titled

    KVM: nVMX: Properly expose ENABLE_USR_WAIT_PAUSE control to L1

to the 5.4-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     kvm-nvmx-properly-expose-enable_usr_wait_pause-contr.patch
and it can be found in the queue-5.4 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit de47e33cc38f2766203fc065a3323b800c7d59ee
Author: Sean Christopherson <seanjc@xxxxxxxxxx>
Date:   Tue Dec 13 06:23:03 2022 +0000

    KVM: nVMX: Properly expose ENABLE_USR_WAIT_PAUSE control to L1
    
    [ Upstream commit 31de69f4eea77b28a9724b3fa55aae104fc91fc7 ]
    
    Set ENABLE_USR_WAIT_PAUSE in KVM's supported VMX MSR configuration if the
    feature is supported in hardware and enabled in KVM's base, non-nested
    configuration, i.e. expose ENABLE_USR_WAIT_PAUSE to L1 if it's supported.
    This fixes a bug where saving/restoring, i.e. migrating, a vCPU will fail
    if WAITPKG (the associated CPUID feature) is enabled for the vCPU, and
    obviously allows L1 to enable the feature for L2.
    
    KVM already effectively exposes ENABLE_USR_WAIT_PAUSE to L1 by stuffing
    the allowed-1 control ina vCPU's virtual MSR_IA32_VMX_PROCBASED_CTLS2 when
    updating secondary controls in response to KVM_SET_CPUID(2), but (a) that
    depends on flawed code (KVM shouldn't touch VMX MSRs in response to CPUID
    updates) and (b) runs afoul of vmx_restore_control_msr()'s restriction
    that the guest value must be a strict subset of the supported host value.
    
    Although no past commit explicitly enabled nested support for WAITPKG,
    doing so is safe and functionally correct from an architectural
    perspective as no additional KVM support is needed to virtualize TPAUSE,
    UMONITOR, and UMWAIT for L2 relative to L1, and KVM already forwards
    VM-Exits to L1 as necessary (commit bf653b78f960, "KVM: vmx: Introduce
    handle_unexpected_vmexit and handle WAITPKG vmexit").
    
    Note, KVM always keeps the hosts MSR_IA32_UMWAIT_CONTROL resident in
    hardware, i.e. always runs both L1 and L2 with the host's power management
    settings for TPAUSE and UMWAIT.  See commit bf09fb6cba4f ("KVM: VMX: Stop
    context switching MSR_IA32_UMWAIT_CONTROL") for more details.
    
    Fixes: e69e72faa3a0 ("KVM: x86: Add support for user wait instructions")
    Cc: stable@xxxxxxxxxxxxxxx
    Reported-by: Aaron Lewis <aaronlewis@xxxxxxxxxx>
    Reported-by: Yu Zhang <yu.c.zhang@xxxxxxxxxxxxxxx>
    Signed-off-by: Sean Christopherson <seanjc@xxxxxxxxxx>
    Reviewed-by: Jim Mattson <jmattson@xxxxxxxxxx>
    Message-Id: <20221213062306.667649-2-seanjc@xxxxxxxxxx>
    Signed-off-by: Paolo Bonzini <pbonzini@xxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/arch/x86/kvm/vmx/nested.c b/arch/x86/kvm/vmx/nested.c
index 1dd693d18395..00f3336194a9 100644
--- a/arch/x86/kvm/vmx/nested.c
+++ b/arch/x86/kvm/vmx/nested.c
@@ -5916,7 +5916,8 @@ void nested_vmx_setup_ctls_msrs(struct nested_vmx_msrs *msrs, u32 ept_caps)
 		SECONDARY_EXEC_RDRAND_EXITING |
 		SECONDARY_EXEC_ENABLE_INVPCID |
 		SECONDARY_EXEC_RDSEED_EXITING |
-		SECONDARY_EXEC_XSAVES;
+		SECONDARY_EXEC_XSAVES |
+		SECONDARY_EXEC_ENABLE_USR_WAIT_PAUSE;
 
 	/*
 	 * We can emulate "VMCS shadowing," even if the hardware



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux