Skip to content

Commit 27bfc6c

Browse files
Marcelo Tosattimatosatti
authored andcommitted
Merge tag 'signed-for-4.0' of git://github.com/agraf/linux-2.6
Patch queue for 4.0 - 2015-03-25 A few bug fixes for Book3S HV KVM: - Fix spinlock ordering - Fix idle guests on LE hosts - Fix instruction emulation
2 parents c875f42 + 2bf2760 commit 27bfc6c

File tree

2 files changed

+5
-4
lines changed

2 files changed

+5
-4
lines changed

arch/powerpc/kvm/book3s_hv.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -636,7 +636,7 @@ static int kvmppc_get_yield_count(struct kvm_vcpu *vcpu)
636636
spin_lock(&vcpu->arch.vpa_update_lock);
637637
lppaca = (struct lppaca *)vcpu->arch.vpa.pinned_addr;
638638
if (lppaca)
639-
yield_count = lppaca->yield_count;
639+
yield_count = be32_to_cpu(lppaca->yield_count);
640640
spin_unlock(&vcpu->arch.vpa_update_lock);
641641
return yield_count;
642642
}
@@ -942,20 +942,20 @@ static int kvm_arch_vcpu_ioctl_set_sregs_hv(struct kvm_vcpu *vcpu,
942942
static void kvmppc_set_lpcr(struct kvm_vcpu *vcpu, u64 new_lpcr,
943943
bool preserve_top32)
944944
{
945+
struct kvm *kvm = vcpu->kvm;
945946
struct kvmppc_vcore *vc = vcpu->arch.vcore;
946947
u64 mask;
947948

949+
mutex_lock(&kvm->lock);
948950
spin_lock(&vc->lock);
949951
/*
950952
* If ILE (interrupt little-endian) has changed, update the
951953
* MSR_LE bit in the intr_msr for each vcpu in this vcore.
952954
*/
953955
if ((new_lpcr & LPCR_ILE) != (vc->lpcr & LPCR_ILE)) {
954-
struct kvm *kvm = vcpu->kvm;
955956
struct kvm_vcpu *vcpu;
956957
int i;
957958

958-
mutex_lock(&kvm->lock);
959959
kvm_for_each_vcpu(i, vcpu, kvm) {
960960
if (vcpu->arch.vcore != vc)
961961
continue;
@@ -964,7 +964,6 @@ static void kvmppc_set_lpcr(struct kvm_vcpu *vcpu, u64 new_lpcr,
964964
else
965965
vcpu->arch.intr_msr &= ~MSR_LE;
966966
}
967-
mutex_unlock(&kvm->lock);
968967
}
969968

970969
/*
@@ -981,6 +980,7 @@ static void kvmppc_set_lpcr(struct kvm_vcpu *vcpu, u64 new_lpcr,
981980
mask &= 0xFFFFFFFF;
982981
vc->lpcr = (vc->lpcr & ~mask) | (new_lpcr & mask);
983982
spin_unlock(&vc->lock);
983+
mutex_unlock(&kvm->lock);
984984
}
985985

986986
static int kvmppc_get_one_reg_hv(struct kvm_vcpu *vcpu, u64 id,

arch/powerpc/kvm/book3s_hv_rmhandlers.S

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1005,6 +1005,7 @@ END_FTR_SECTION_IFSET(CPU_FTR_HAS_PPR)
10051005
/* Save HEIR (HV emulation assist reg) in emul_inst
10061006
if this is an HEI (HV emulation interrupt, e40) */
10071007
li r3,KVM_INST_FETCH_FAILED
1008+
stw r3,VCPU_LAST_INST(r9)
10081009
cmpwi r12,BOOK3S_INTERRUPT_H_EMUL_ASSIST
10091010
bne 11f
10101011
mfspr r3,SPRN_HEIR

0 commit comments

Comments
 (0)