diff options
-rw-r--r-- | arch/powerpc/include/asm/kvm_book3s.h | 5 | ||||
-rw-r--r-- | arch/powerpc/kvm/book3s_hv.c | 6 |
2 files changed, 8 insertions, 3 deletions
diff --git a/arch/powerpc/include/asm/kvm_book3s.h b/arch/powerpc/include/asm/kvm_book3s.h index 83851aabfdc8..bb1e38a23ac7 100644 --- a/arch/powerpc/include/asm/kvm_book3s.h +++ b/arch/powerpc/include/asm/kvm_book3s.h | |||
@@ -304,6 +304,11 @@ static inline ulong kvmppc_get_fault_dar(struct kvm_vcpu *vcpu) | |||
304 | return vcpu->arch.fault_dar; | 304 | return vcpu->arch.fault_dar; |
305 | } | 305 | } |
306 | 306 | ||
307 | static inline bool is_kvmppc_resume_guest(int r) | ||
308 | { | ||
309 | return (r == RESUME_GUEST || r == RESUME_GUEST_NV); | ||
310 | } | ||
311 | |||
307 | /* Magic register values loaded into r3 and r4 before the 'sc' assembly | 312 | /* Magic register values loaded into r3 and r4 before the 'sc' assembly |
308 | * instruction for the OSI hypercalls */ | 313 | * instruction for the OSI hypercalls */ |
309 | #define OSI_SC_MAGIC_R3 0x113724FA | 314 | #define OSI_SC_MAGIC_R3 0x113724FA |
diff --git a/arch/powerpc/kvm/book3s_hv.c b/arch/powerpc/kvm/book3s_hv.c index 17fc9496b6ac..3b498d942a22 100644 --- a/arch/powerpc/kvm/book3s_hv.c +++ b/arch/powerpc/kvm/book3s_hv.c | |||
@@ -1530,7 +1530,7 @@ static void kvmppc_run_core(struct kvmppc_vcore *vc) | |||
1530 | vcpu->arch.trap = 0; | 1530 | vcpu->arch.trap = 0; |
1531 | 1531 | ||
1532 | if (vcpu->arch.ceded) { | 1532 | if (vcpu->arch.ceded) { |
1533 | if (ret != RESUME_GUEST) | 1533 | if (!is_kvmppc_resume_guest(ret)) |
1534 | kvmppc_end_cede(vcpu); | 1534 | kvmppc_end_cede(vcpu); |
1535 | else | 1535 | else |
1536 | kvmppc_set_timer(vcpu); | 1536 | kvmppc_set_timer(vcpu); |
@@ -1541,7 +1541,7 @@ static void kvmppc_run_core(struct kvmppc_vcore *vc) | |||
1541 | vc->vcore_state = VCORE_INACTIVE; | 1541 | vc->vcore_state = VCORE_INACTIVE; |
1542 | list_for_each_entry_safe(vcpu, vnext, &vc->runnable_threads, | 1542 | list_for_each_entry_safe(vcpu, vnext, &vc->runnable_threads, |
1543 | arch.run_list) { | 1543 | arch.run_list) { |
1544 | if (vcpu->arch.ret != RESUME_GUEST) { | 1544 | if (!is_kvmppc_resume_guest(vcpu->arch.ret)) { |
1545 | kvmppc_remove_runnable(vc, vcpu); | 1545 | kvmppc_remove_runnable(vc, vcpu); |
1546 | wake_up(&vcpu->arch.cpu_run); | 1546 | wake_up(&vcpu->arch.cpu_run); |
1547 | } | 1547 | } |
@@ -1731,7 +1731,7 @@ static int kvmppc_vcpu_run_hv(struct kvm_run *run, struct kvm_vcpu *vcpu) | |||
1731 | vcpu->arch.fault_dar, vcpu->arch.fault_dsisr); | 1731 | vcpu->arch.fault_dar, vcpu->arch.fault_dsisr); |
1732 | srcu_read_unlock(&vcpu->kvm->srcu, srcu_idx); | 1732 | srcu_read_unlock(&vcpu->kvm->srcu, srcu_idx); |
1733 | } | 1733 | } |
1734 | } while (r == RESUME_GUEST); | 1734 | } while (is_kvmppc_resume_guest(r)); |
1735 | 1735 | ||
1736 | out: | 1736 | out: |
1737 | vcpu->arch.state = KVMPPC_VCPU_NOTREADY; | 1737 | vcpu->arch.state = KVMPPC_VCPU_NOTREADY; |