• Andy Lutomirski's avatar
    x86,kvm,vmx: Preserve CR4 across VM entry · 9e793c5e
    Andy Lutomirski authored
    commit d974baa3 upstream.
    
    CR4 isn't constant; at least the TSD and PCE bits can vary.
    
    TBH, treating CR0 and CR3 as constant scares me a bit, too, but it looks
    like it's correct.
    
    This adds a branch and a read from cr4 to each vm entry.  Because it is
    extremely likely that consecutive entries into the same vcpu will have
    the same host cr4 value, this fixes up the vmcs instead of restoring cr4
    after the fact.  A subsequent patch will add a kernel-wide cr4 shadow,
    reducing the overhead in the common case to just two memory reads and a
    branch.
    Signed-off-by: default avatarAndy Lutomirski <luto@amacapital.net>
    Acked-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
    Cc: stable@vger.kernel.org
    Cc: Petr Matousek <pmatouse@redhat.com>
    Cc: Gleb Natapov <gleb@kernel.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    [bwh: Backported to 3.2:
     - Adjust context
     - Add struct vcpu_vmx *vmx parameter to vmx_set_constant_host_state(), done
       upstream in commit a547c6db ("KVM: VMX: Enable acknowledge interupt
       on vmexit")]
    Signed-off-by: default avatarBen Hutchings <ben@decadent.org.uk>
    9e793c5e
vmx.c 207 KB