diff options
author | Paolo Bonzini <pbonzini@redhat.com> | 2015-09-22 16:01:46 -0400 |
---|---|---|
committer | Paolo Bonzini <pbonzini@redhat.com> | 2015-09-22 16:01:46 -0400 |
commit | 5b6a7175bfe570857a85b5570857e7555eff2c3a (patch) | |
tree | 10e569e0a9b8f883baf67bd421ba67b11b38ab6d | |
parent | 3afb1121800128aae9f5722e50097fcf1a9d4d88 (diff) | |
parent | 3eb4ee68254235e4f47bc0410538fcdaede39589 (diff) |
Merge branch 'kvm-ppc-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/paulus/powerpc into kvm-master
-rw-r--r-- | arch/powerpc/kvm/book3s.c | 6 | ||||
-rw-r--r-- | arch/powerpc/kvm/book3s_hv.c | 6 | ||||
-rw-r--r-- | arch/powerpc/kvm/book3s_hv_rmhandlers.S | 1 |
3 files changed, 12 insertions, 1 deletions
diff --git a/arch/powerpc/kvm/book3s.c b/arch/powerpc/kvm/book3s.c index cf009167d208..099c79d8c160 100644 --- a/arch/powerpc/kvm/book3s.c +++ b/arch/powerpc/kvm/book3s.c | |||
@@ -829,12 +829,15 @@ int kvmppc_h_logical_ci_load(struct kvm_vcpu *vcpu) | |||
829 | unsigned long size = kvmppc_get_gpr(vcpu, 4); | 829 | unsigned long size = kvmppc_get_gpr(vcpu, 4); |
830 | unsigned long addr = kvmppc_get_gpr(vcpu, 5); | 830 | unsigned long addr = kvmppc_get_gpr(vcpu, 5); |
831 | u64 buf; | 831 | u64 buf; |
832 | int srcu_idx; | ||
832 | int ret; | 833 | int ret; |
833 | 834 | ||
834 | if (!is_power_of_2(size) || (size > sizeof(buf))) | 835 | if (!is_power_of_2(size) || (size > sizeof(buf))) |
835 | return H_TOO_HARD; | 836 | return H_TOO_HARD; |
836 | 837 | ||
838 | srcu_idx = srcu_read_lock(&vcpu->kvm->srcu); | ||
837 | ret = kvm_io_bus_read(vcpu, KVM_MMIO_BUS, addr, size, &buf); | 839 | ret = kvm_io_bus_read(vcpu, KVM_MMIO_BUS, addr, size, &buf); |
840 | srcu_read_unlock(&vcpu->kvm->srcu, srcu_idx); | ||
838 | if (ret != 0) | 841 | if (ret != 0) |
839 | return H_TOO_HARD; | 842 | return H_TOO_HARD; |
840 | 843 | ||
@@ -869,6 +872,7 @@ int kvmppc_h_logical_ci_store(struct kvm_vcpu *vcpu) | |||
869 | unsigned long addr = kvmppc_get_gpr(vcpu, 5); | 872 | unsigned long addr = kvmppc_get_gpr(vcpu, 5); |
870 | unsigned long val = kvmppc_get_gpr(vcpu, 6); | 873 | unsigned long val = kvmppc_get_gpr(vcpu, 6); |
871 | u64 buf; | 874 | u64 buf; |
875 | int srcu_idx; | ||
872 | int ret; | 876 | int ret; |
873 | 877 | ||
874 | switch (size) { | 878 | switch (size) { |
@@ -892,7 +896,9 @@ int kvmppc_h_logical_ci_store(struct kvm_vcpu *vcpu) | |||
892 | return H_TOO_HARD; | 896 | return H_TOO_HARD; |
893 | } | 897 | } |
894 | 898 | ||
899 | srcu_idx = srcu_read_lock(&vcpu->kvm->srcu); | ||
895 | ret = kvm_io_bus_write(vcpu, KVM_MMIO_BUS, addr, size, &buf); | 900 | ret = kvm_io_bus_write(vcpu, KVM_MMIO_BUS, addr, size, &buf); |
901 | srcu_read_unlock(&vcpu->kvm->srcu, srcu_idx); | ||
896 | if (ret != 0) | 902 | if (ret != 0) |
897 | return H_TOO_HARD; | 903 | return H_TOO_HARD; |
898 | 904 | ||
diff --git a/arch/powerpc/kvm/book3s_hv.c b/arch/powerpc/kvm/book3s_hv.c index 9754e6815e52..228049786888 100644 --- a/arch/powerpc/kvm/book3s_hv.c +++ b/arch/powerpc/kvm/book3s_hv.c | |||
@@ -2692,9 +2692,13 @@ static int kvmppc_run_vcpu(struct kvm_run *kvm_run, struct kvm_vcpu *vcpu) | |||
2692 | 2692 | ||
2693 | while (vcpu->arch.state == KVMPPC_VCPU_RUNNABLE && | 2693 | while (vcpu->arch.state == KVMPPC_VCPU_RUNNABLE && |
2694 | (vc->vcore_state == VCORE_RUNNING || | 2694 | (vc->vcore_state == VCORE_RUNNING || |
2695 | vc->vcore_state == VCORE_EXITING)) | 2695 | vc->vcore_state == VCORE_EXITING || |
2696 | vc->vcore_state == VCORE_PIGGYBACK)) | ||
2696 | kvmppc_wait_for_exec(vc, vcpu, TASK_UNINTERRUPTIBLE); | 2697 | kvmppc_wait_for_exec(vc, vcpu, TASK_UNINTERRUPTIBLE); |
2697 | 2698 | ||
2699 | if (vc->vcore_state == VCORE_PREEMPT && vc->runner == NULL) | ||
2700 | kvmppc_vcore_end_preempt(vc); | ||
2701 | |||
2698 | if (vcpu->arch.state == KVMPPC_VCPU_RUNNABLE) { | 2702 | if (vcpu->arch.state == KVMPPC_VCPU_RUNNABLE) { |
2699 | kvmppc_remove_runnable(vc, vcpu); | 2703 | kvmppc_remove_runnable(vc, vcpu); |
2700 | vcpu->stat.signal_exits++; | 2704 | vcpu->stat.signal_exits++; |
diff --git a/arch/powerpc/kvm/book3s_hv_rmhandlers.S b/arch/powerpc/kvm/book3s_hv_rmhandlers.S index 2273dcacef39..b98889e9851d 100644 --- a/arch/powerpc/kvm/book3s_hv_rmhandlers.S +++ b/arch/powerpc/kvm/book3s_hv_rmhandlers.S | |||
@@ -1257,6 +1257,7 @@ mc_cont: | |||
1257 | bl kvmhv_accumulate_time | 1257 | bl kvmhv_accumulate_time |
1258 | #endif | 1258 | #endif |
1259 | 1259 | ||
1260 | mr r3, r12 | ||
1260 | /* Increment exit count, poke other threads to exit */ | 1261 | /* Increment exit count, poke other threads to exit */ |
1261 | bl kvmhv_commence_exit | 1262 | bl kvmhv_commence_exit |
1262 | nop | 1263 | nop |