• Reiji Watanabe's avatar
    KVM: arm64: Clear PSTATE.SS when the Software Step state was Active-pending · 370531d1
    Reiji Watanabe authored
    While userspace enables single-step, if the Software Step state at the
    last guest exit was "Active-pending", clear PSTATE.SS on guest entry
    to restore the state.
    
    Currently, KVM sets PSTATE.SS to 1 on every guest entry while userspace
    enables single-step for the vCPU (with KVM_GUESTDBG_SINGLESTEP).
    It means KVM always makes the vCPU's Software Step state
    "Active-not-pending" on the guest entry, which lets the VCPU perform
    single-step (then Software Step exception is taken). This could cause
    extra single-step (without returning to userspace) if the Software Step
    state at the last guest exit was "Active-pending" (i.e. the last
    exit was triggered by an asynchronous exception after the single-step
    is performed, but before the Software Step exception is taken.
    See "Figure D2-3 Software step state machine" and "D2.12.7 Behavior
    in the active-pending state" in ARM DDI 0487I.a for more info about
    this behavior).
    
    Fix this by clearing PSTATE.SS on guest entry if the Software Step state
    at the last exit was "Active-pending" so that KVM restore the state (and
    the exception is taken before further single-step is performed).
    
    Fixes: 337b99bf ("KVM: arm64: guest debug, add support for single-step")
    Signed-off-by: default avatarReiji Watanabe <reijiw@google.com>
    Signed-off-by: default avatarMarc Zyngier <maz@kernel.org>
    Link: https://lore.kernel.org/r/20220917010600.532642-3-reijiw@google.com
    370531d1
guest.c 26.4 KB