|
@@ -131,7 +131,7 @@ int kvmhv_p9_tm_emulation(struct kvm_vcpu *vcpu)
|
|
|
}
|
|
}
|
|
|
/* Set CR0 to indicate previous transactional state */
|
|
/* Set CR0 to indicate previous transactional state */
|
|
|
vcpu->arch.regs.ccr = (vcpu->arch.regs.ccr & 0x0fffffff) |
|
|
vcpu->arch.regs.ccr = (vcpu->arch.regs.ccr & 0x0fffffff) |
|
|
|
- (((msr & MSR_TS_MASK) >> MSR_TS_S_LG) << 28);
|
|
|
|
|
|
|
+ (((msr & MSR_TS_MASK) >> MSR_TS_S_LG) << 29);
|
|
|
/* L=1 => tresume, L=0 => tsuspend */
|
|
/* L=1 => tresume, L=0 => tsuspend */
|
|
|
if (instr & (1 << 21)) {
|
|
if (instr & (1 << 21)) {
|
|
|
if (MSR_TM_SUSPENDED(msr))
|
|
if (MSR_TM_SUSPENDED(msr))
|
|
@@ -175,7 +175,7 @@ int kvmhv_p9_tm_emulation(struct kvm_vcpu *vcpu)
|
|
|
|
|
|
|
|
/* Set CR0 to indicate previous transactional state */
|
|
/* Set CR0 to indicate previous transactional state */
|
|
|
vcpu->arch.regs.ccr = (vcpu->arch.regs.ccr & 0x0fffffff) |
|
|
vcpu->arch.regs.ccr = (vcpu->arch.regs.ccr & 0x0fffffff) |
|
|
|
- (((msr & MSR_TS_MASK) >> MSR_TS_S_LG) << 28);
|
|
|
|
|
|
|
+ (((msr & MSR_TS_MASK) >> MSR_TS_S_LG) << 29);
|
|
|
vcpu->arch.shregs.msr &= ~MSR_TS_MASK;
|
|
vcpu->arch.shregs.msr &= ~MSR_TS_MASK;
|
|
|
return RESUME_GUEST;
|
|
return RESUME_GUEST;
|
|
|
|
|
|
|
@@ -205,7 +205,7 @@ int kvmhv_p9_tm_emulation(struct kvm_vcpu *vcpu)
|
|
|
|
|
|
|
|
/* Set CR0 to indicate previous transactional state */
|
|
/* Set CR0 to indicate previous transactional state */
|
|
|
vcpu->arch.regs.ccr = (vcpu->arch.regs.ccr & 0x0fffffff) |
|
|
vcpu->arch.regs.ccr = (vcpu->arch.regs.ccr & 0x0fffffff) |
|
|
|
- (((msr & MSR_TS_MASK) >> MSR_TS_S_LG) << 28);
|
|
|
|
|
|
|
+ (((msr & MSR_TS_MASK) >> MSR_TS_S_LG) << 29);
|
|
|
vcpu->arch.shregs.msr = msr | MSR_TS_S;
|
|
vcpu->arch.shregs.msr = msr | MSR_TS_S;
|
|
|
return RESUME_GUEST;
|
|
return RESUME_GUEST;
|
|
|
}
|
|
}
|