On 20/06/2019 03:46, Suraj Jitindar Singh wrote: > On POWER9 the decrementer can operate in large decrementer mode where > the decrementer is 56 bits and signed extended to 64 bits. When not > operating in this mode the decrementer behaves as a 32 bit decrementer > which is NOT signed extended (as on POWER8). > > Currently when reading a guest decrementer value we don't take into > account whether the large decrementer is enabled or not, and this means > the value will be incorrect when the guest is not using the large > decrementer. Fix this by sign extending the value read when the guest > isn't using the large decrementer. > > Fixes: 95a6432ce903 "KVM: PPC: Book3S HV: Streamlined guest entry/exit path on P9 for radix guests" > > Signed-off-by: Suraj Jitindar Singh <sjitindarsingh@xxxxxxxxx> > --- > arch/powerpc/kvm/book3s_hv.c | 2 ++ > 1 file changed, 2 insertions(+) > > diff --git a/arch/powerpc/kvm/book3s_hv.c b/arch/powerpc/kvm/book3s_hv.c > index d3684509da35..719fd2529eec 100644 > --- a/arch/powerpc/kvm/book3s_hv.c > +++ b/arch/powerpc/kvm/book3s_hv.c > @@ -3607,6 +3607,8 @@ int kvmhv_p9_guest_entry(struct kvm_vcpu *vcpu, u64 time_limit, > > vcpu->arch.slb_max = 0; > dec = mfspr(SPRN_DEC); > + if (!(lpcr & LPCR_LD)) /* Sign extend if not using large decrementer */ > + dec = (s32) dec; > tb = mftb(); > vcpu->arch.dec_expires = dec + tb; > vcpu->cpu = -1; > Patches 2 and 3: tested I can boot and run an L2 nested guest with qemu v4.0.0 and caps-large-decr=on in the case we have had a hang previously. Tested-by: Laurent Vivier <lvivier@xxxxxxxxxx>