• P
    KVM: PPC: Book3S PR: Make instruction fetch fallback work for system calls · 8b23de29
    Paul Mackerras 提交于
    It turns out that if we exit the guest due to a hcall instruction (sc 1),
    and the loading of the instruction in the guest exit path fails for any
    reason, the call to kvmppc_ld() in kvmppc_get_last_inst() fetches the
    instruction after the hcall instruction rather than the hcall itself.
    This in turn means that the instruction doesn't get recognized as an
    hcall in kvmppc_handle_exit_pr() but gets passed to the guest kernel
    as a sc instruction.  That usually results in the guest kernel getting
    a return code of 38 (ENOSYS) from an hcall, which often triggers a
    BUG_ON() or other failure.
    
    This fixes the problem by adding a new variant of kvmppc_get_last_inst()
    called kvmppc_get_last_sc(), which fetches the instruction if necessary
    from pc - 4 rather than pc.
    Signed-off-by: NPaul Mackerras <paulus@samba.org>
    Signed-off-by: NAlexander Graf <agraf@suse.de>
    8b23de29
kvm_book3s.h 14.0 KB