lkml.org 
[lkml]   [2019]   [Jul]   [24]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.1 302/371] KVM: PPC: Book3S HV: Signed extend decrementer value if not using large decrementer
    Date
    From: Suraj Jitindar Singh <sjitindarsingh@gmail.com>

    commit 869537709ebf1dc865e75c3fc97b23f8acf37c16 upstream.

    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")
    Cc: stable@vger.kernel.org # v4.20+
    Signed-off-by: Suraj Jitindar Singh <sjitindarsingh@gmail.com>
    Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    arch/powerpc/kvm/book3s_hv.c | 2 ++
    1 file changed, 2 insertions(+)

    --- a/arch/powerpc/kvm/book3s_hv.c
    +++ b/arch/powerpc/kvm/book3s_hv.c
    @@ -3568,6 +3568,8 @@ int kvmhv_p9_guest_entry(struct kvm_vcpu

    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;

    \
     
     \ /
      Last update: 2019-07-24 22:02    [W:3.543 / U:0.040 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site