KVM: PPC: booke: deliver program int on emulation failure
authorAlexander Graf <agraf@suse.de>
Thu, 16 Feb 2012 13:24:03 +0000 (13:24 +0000)
committerAvi Kivity <avi@redhat.com>
Sun, 8 Apr 2012 09:55:03 +0000 (12:55 +0300)
When we fail to emulate an instruction for the guest, we better go in and
tell it that we failed to emulate it, by throwing an illegal instruction
exception.

Please beware that we basically never get around to telling the guest that
we failed thanks to the debugging code right above it. If user space however
decides that it wants to ignore the debug, we would at least do "the right
thing" afterwards.

Signed-off-by: Alexander Graf <agraf@suse.de>
Signed-off-by: Avi Kivity <avi@redhat.com>
arch/powerpc/kvm/booke.c

index 17d5318e6e4fde880e08cfcd6490a9cd56254eb5..9979be1d7ff2661258b511113c5de93895d7a366 100644 (file)
@@ -545,13 +545,13 @@ static int emulation_exit(struct kvm_run *run, struct kvm_vcpu *vcpu)
                return RESUME_HOST;
 
        case EMULATE_FAIL:
-               /* XXX Deliver Program interrupt to guest. */
                printk(KERN_CRIT "%s: emulation at %lx failed (%08x)\n",
                       __func__, vcpu->arch.pc, vcpu->arch.last_inst);
                /* For debugging, encode the failing instruction and
                 * report it to userspace. */
                run->hw.hardware_exit_reason = ~0ULL << 32;
                run->hw.hardware_exit_reason |= vcpu->arch.last_inst;
+               kvmppc_core_queue_program(vcpu, ESR_PIL);
                return RESUME_HOST;
 
        default: