Skip to content
  • Andy Lutomirski's avatar
    x86/mm, KVM: Teach KVM's VMX code that CR3 isn't a constant · d6e41f11
    Andy Lutomirski authored
    
    
    When PCID is enabled, CR3's PCID bits can change during context
    switches, so KVM won't be able to treat CR3 as a per-mm constant any
    more.
    
    I structured this like the existing CR4 handling.  Under ordinary
    circumstances (PCID disabled or if the current PCID and the value
    that's already in the VMCS match), then we won't do an extra VMCS
    write, and we'll never do an extra direct CR3 read.  The overhead
    should be minimal.
    
    I disallowed using the new helper in non-atomic context because
    PCID support will cause CR3 to stop being constant in non-atomic
    process context.
    
    (Frankly, it also scares me a bit that KVM ever treated CR3 as
    constant, but it looks like it was okay before.)
    
    Signed-off-by: default avatarAndy Lutomirski <luto@kernel.org>
    Cc: Andrew Morton <akpm@linux-foundation.org>
    Cc: Arjan van de Ven <arjan@linux.intel.com>
    Cc: Borislav Petkov <bpetkov@suse.de>
    Cc: Dave Hansen <dave.hansen@intel.com>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Mel Gorman <mgorman@suse.de>
    Cc: Michal Hocko <mhocko@suse.com>
    Cc: Nadav Amit <nadav.amit@gmail.com>
    Cc: Nadav Amit <namit@vmware.com>
    Cc: Paolo Bonzini <pbonzini@redhat.com>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Radim Krčmář <rkrcmar@redhat.com>
    Cc: Rik van Riel <riel@redhat.com>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: kvm@vger.kernel.org
    Cc: linux-mm@kvack.org
    Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
    d6e41f11