diff options
Diffstat (limited to 'arch/powerpc/kvm')
-rw-r--r-- | arch/powerpc/kvm/book3s.c | 3 | ||||
-rw-r--r-- | arch/powerpc/kvm/emulate.c | 4 |
2 files changed, 6 insertions, 1 deletions
diff --git a/arch/powerpc/kvm/book3s.c b/arch/powerpc/kvm/book3s.c index 604af29b71ed..6416f227d345 100644 --- a/arch/powerpc/kvm/book3s.c +++ b/arch/powerpc/kvm/book3s.c | |||
@@ -789,6 +789,9 @@ int kvmppc_handle_exit(struct kvm_run *run, struct kvm_vcpu *vcpu, | |||
789 | case EMULATE_DONE: | 789 | case EMULATE_DONE: |
790 | r = RESUME_GUEST_NV; | 790 | r = RESUME_GUEST_NV; |
791 | break; | 791 | break; |
792 | case EMULATE_AGAIN: | ||
793 | r = RESUME_GUEST; | ||
794 | break; | ||
792 | case EMULATE_FAIL: | 795 | case EMULATE_FAIL: |
793 | printk(KERN_CRIT "%s: emulation at %lx failed (%08x)\n", | 796 | printk(KERN_CRIT "%s: emulation at %lx failed (%08x)\n", |
794 | __func__, vcpu->arch.pc, vcpu->arch.last_inst); | 797 | __func__, vcpu->arch.pc, vcpu->arch.last_inst); |
diff --git a/arch/powerpc/kvm/emulate.c b/arch/powerpc/kvm/emulate.c index 11789dd33a13..2410ec2a756a 100644 --- a/arch/powerpc/kvm/emulate.c +++ b/arch/powerpc/kvm/emulate.c | |||
@@ -486,7 +486,9 @@ int kvmppc_emulate_instruction(struct kvm_run *run, struct kvm_vcpu *vcpu) | |||
486 | 486 | ||
487 | if (emulated == EMULATE_FAIL) { | 487 | if (emulated == EMULATE_FAIL) { |
488 | emulated = kvmppc_core_emulate_op(run, vcpu, inst, &advance); | 488 | emulated = kvmppc_core_emulate_op(run, vcpu, inst, &advance); |
489 | if (emulated == EMULATE_FAIL) { | 489 | if (emulated == EMULATE_AGAIN) { |
490 | advance = 0; | ||
491 | } else if (emulated == EMULATE_FAIL) { | ||
490 | advance = 0; | 492 | advance = 0; |
491 | printk(KERN_ERR "Couldn't emulate instruction 0x%08x " | 493 | printk(KERN_ERR "Couldn't emulate instruction 0x%08x " |
492 | "(op %d xop %d)\n", inst, get_op(inst), get_xop(inst)); | 494 | "(op %d xop %d)\n", inst, get_op(inst), get_xop(inst)); |