• Paul Mackerras's avatar
    KVM: PPC: Book3S HV: Better handling of exceptions that happen in real mode · 44a3add8
    Paul Mackerras authored
    When an interrupt or exception happens in the guest that comes to the
    host, the CPU goes to hypervisor real mode (MMU off) to handle the
    exception but doesn't change the MMU context.  After saving a few
    registers, we then clear the "in guest" flag.  If, for any reason,
    we get an exception in the real-mode code, that then gets handled
    by the normal kernel exception handlers, which turn the MMU on.  This
    is disastrous if the MMU is still set to the guest context, since we
    end up executing instructions from random places in the guest kernel
    with hypervisor privilege.
    
    In order to catch this situation, we define a new value for the "in guest"
    flag, KVM_GUEST_MODE_HOST_HV, to indicate that we are in hypervisor real
    mode with guest MMU context.  If the "in guest" flag is set to this value,
    we branch off to an emergency handler.  For the moment, this just does
    a branch to self to stop the CPU from doing anything further.
    
    While we're here, we define another new flag value to indicate that we
    are in a HV guest, as distinct from a PR guest.  This will be useful
    when we have a kernel that can support both PR and HV guests concurrently.
    Signed-off-by: default avatarPaul Mackerras <paulus@samba.org>
    Signed-off-by: default avatarAlexander Graf <agraf@suse.de>
    44a3add8
book3s_hv_rmhandlers.S 45.6 KB