1. 19 Sep, 2022 2 commits
    • 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
    • Reiji Watanabe's avatar
      KVM: arm64: Preserve PSTATE.SS for the guest while single-step is enabled · 34fbdee0
      Reiji Watanabe authored
      Preserve the PSTATE.SS value for the guest while userspace enables
      single-step (i.e. while KVM manipulates the PSTATE.SS) for the vCPU.
      
      Currently, while userspace enables single-step for the vCPU
      (with KVM_GUESTDBG_SINGLESTEP), KVM sets PSTATE.SS to 1 on every
      guest entry, not saving its original value.
      When userspace disables single-step, KVM doesn't restore the original
      value for the subsequent guest entry (use the current value instead).
      Exception return instructions copy PSTATE.SS from SPSR_ELx.SS
      only in certain cases when single-step is enabled (and set it to 0
      in other cases). So, the value matters only when the guest enables
      single-step (and when the guest's Software step state isn't affected
      by single-step enabled by userspace, practically), though.
      
      Fix this by preserving the original PSTATE.SS value while userspace
      enables single-step, and restoring the value once it is disabled.
      
      This fix modifies the behavior of GET_ONE_REG/SET_ONE_REG for the
      PSTATE.SS while single-step is enabled by userspace.
      Presently, GET_ONE_REG/SET_ONE_REG gets/sets the current PSTATE.SS
      value, which KVM will override on the next guest entry (i.e. the
      value userspace gets/sets is not used for the next guest entry).
      With this patch, GET_ONE_REG/SET_ONE_REG will get/set the guest's
      preserved value, which KVM will preserve and try to restore after
      single-step is disabled.
      
      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-2-reijiw@google.com
      34fbdee0
  2. 28 Aug, 2022 25 commits
  3. 27 Aug, 2022 13 commits