• David P. Reed's avatar
    x86/virt: Mark flags and memory as clobbered by VMXOFF · 53666664
    David P. Reed authored
    Explicitly tell the compiler that VMXOFF modifies flags (like all VMX
    instructions), and mark memory as clobbered since VMXOFF must not be
    reordered and also may have memory side effects (though the kernel
    really shouldn't be accessing the root VMCS anyways).
    
    Practically speaking, adding the clobbers is most likely a nop; the
    primary motivation is to properly document VMXOFF's behavior.
    
    For the flags clobber, both Clang and GCC automatically mark flags as
    clobbered; this is noted in commit 4b1e5478 ("KVM/x86: Use assembly
    instruction mnemonics instead of .byte streams"), which intentionally
    removed the previous clobber.  But, neither Clang nor GCC documents
    this behavior, and there's no downside to including the clobber.
    
    For the memory clobber, the RFLAGS.IF and CR4.VMXE manipulations that
    immediately follow VMXOFF have compiler barriers of their own, i.e.
    VMXOFF can't get reordered after clearing CR4.VMXE, which is really
    what's of interest.
    
    Cc: Randy Dunlap <rdunlap@infradead.org>
    Signed-off-by: default avatarDavid P. Reed <dpreed@deepplum.com>
    [sean: rewrote changelog, dropped comment adjustments]
    Signed-off-by: default avatarSean Christopherson <seanjc@google.com>
    Message-Id: <20201231002702.22237077-4-seanjc@google.com>
    Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
    53666664
virtext.h 2.96 KB