• Kristina Martsenko's avatar
    KVM: arm64: Add handler for MOPS exceptions · 2de451a3
    Kristina Martsenko authored
    An Armv8.8 FEAT_MOPS main or epilogue instruction will take an exception
    if executed on a CPU with a different MOPS implementation option (A or
    B) than the CPU where the preceding prologue instruction ran. In this
    case the OS exception handler is expected to reset the registers and
    restart execution from the prologue instruction.
    
    A KVM guest may use the instructions at EL1 at times when the guest is
    not able to handle the exception, expecting that the instructions will
    only run on one CPU (e.g. when running UEFI boot services in the guest).
    As KVM may reschedule the guest between different types of CPUs at any
    time (on an asymmetric system), it needs to also handle the resulting
    exception itself in case the guest is not able to. A similar situation
    will also occur in the future when live migrating a guest from one type
    of CPU to another.
    
    Add handling for the MOPS exception to KVM. The handling can be shared
    with the EL0 exception handler, as the logic and register layouts are
    the same. The exception can be handled right after exiting a guest,
    which avoids the cost of returning to the host exit handler.
    
    Similarly to the EL0 exception handler, in case the main or epilogue
    instruction is being single stepped, it makes sense to finish the step
    before executing the prologue instruction, so advance the single step
    state machine.
    Signed-off-by: default avatarKristina Martsenko <kristina.martsenko@arm.com>
    Reviewed-by: default avatarMarc Zyngier <maz@kernel.org>
    Link: https://lore.kernel.org/r/20230922112508.1774352-2-kristina.martsenko@arm.comSigned-off-by: default avatarOliver Upton <oliver.upton@linux.dev>
    2de451a3
traps.c 28.2 KB