• Sean Christopherson's avatar
    KVM: x86: Invoke kvm_smm_changed() immediately after clearing SMM flag · fa75e08b
    Sean Christopherson authored
    Move RSM emulation's call to kvm_smm_changed() from .post_leave_smm() to
    .exiting_smm(), leaving behind the MMU context reset.  The primary
    motivation is to allow for future cleanup, but this also fixes a bug of
    sorts by queueing KVM_REQ_EVENT even if RSM causes shutdown, e.g. to let
    an INIT wake the vCPU from shutdown.  Of course, KVM doesn't properly
    emulate a shutdown state, e.g. KVM doesn't block SMIs after shutdown, and
    immediately exits to userspace, so the event request is a moot point in
    practice.
    
    Moving kvm_smm_changed() also moves the RSM tracepoint.  This isn't
    strictly necessary, but will allow consolidating the SMI and RSM
    tracepoints in a future commit (by also moving the SMI tracepoint).
    Invoking the tracepoint before loading SMRAM state also means the SMBASE
    that reported in the tracepoint will point that the state that will be
    used for RSM, as opposed to the SMBASE _after_ RSM completes, which is
    arguably a good thing if the tracepoint is being used to debug a RSM/SMM
    issue.
    Signed-off-by: default avatarSean Christopherson <seanjc@google.com>
    Message-Id: <20210609185619.992058-5-seanjc@google.com>
    Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
    fa75e08b
x86.c 316 KB