summaryrefslogtreecommitdiff
path: root/arch/powerpc/kvm/book3s_64_mmu_hv.c
diff options
context:
space:
mode:
authorPaul Mackerras <paulus@samba.org>2013-08-06 08:15:19 +0400
committerAlexander Graf <agraf@suse.de>2013-08-28 18:47:49 +0400
commit8b23de29489fd63fce753db9d53055e4bbf8f616 (patch)
tree94e266d8d7029bbb411568454d0c4df56b52d5fd /arch/powerpc/kvm/book3s_64_mmu_hv.c
parent9d1ffdd8f34b1f89264effd10e75ea4d6272690e (diff)
downloadlinux-8b23de29489fd63fce753db9d53055e4bbf8f616.tar.xz
KVM: PPC: Book3S PR: Make instruction fetch fallback work for system calls
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: Paul Mackerras <paulus@samba.org> Signed-off-by: Alexander Graf <agraf@suse.de>
Diffstat (limited to 'arch/powerpc/kvm/book3s_64_mmu_hv.c')
0 files changed, 0 insertions, 0 deletions