From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.8 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 349AAC76191 for ; Wed, 24 Jul 2019 20:10:00 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 014BF20665 for ; Wed, 24 Jul 2019 20:10:00 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1563999000; bh=Tzp+ZhRiVS9bYdseA5JBs/kN+fpV3dzKZZHB5idK+4U=; h=From:To:Cc:Subject:Date:In-Reply-To:References:List-ID:From; b=YprQKfXbQh/Jp+LMut0irPJ4uvel2QUdUx+sYMAcbBSL2zDk25j0dJXzd7Evfqsar GxRk/nbS3t3anDm4fvX/mtRUvC2S+7XiCR3ACj5X9nAm536WntDw5C6XbReTJ2vx1o wdJVJW3oQFp7taKTg5S/rle0IGXYY1JNDn7MTUKY= Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2404982AbfGXT7i (ORCPT ); Wed, 24 Jul 2019 15:59:38 -0400 Received: from mail.kernel.org ([198.145.29.99]:46892 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2404966AbfGXT7f (ORCPT ); Wed, 24 Jul 2019 15:59:35 -0400 Received: from localhost (83-86-89-107.cable.dynamic.v4.ziggo.nl [83.86.89.107]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 4534F206BA; Wed, 24 Jul 2019 19:59:34 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1563998374; bh=Tzp+ZhRiVS9bYdseA5JBs/kN+fpV3dzKZZHB5idK+4U=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=sPv1jLWo551D0hhHoL+BoswJZd1ewBdRfZeyfpj70Zs2u9t9dCk1Y/dcwloPDA5AK s0qJATI+GcPV+Sopl6QjV3T5FGMkKdEVO/uH9MhVOpWczcegTDnDHIh3IsUTEiZZbg pnmxR5anc0Fu/DIBVlyRZzqDg7cW0vQHVR7Tqt+w= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Suraj Jitindar Singh , Michael Ellerman Subject: [PATCH 5.1 302/371] KVM: PPC: Book3S HV: Signed extend decrementer value if not using large decrementer Date: Wed, 24 Jul 2019 21:20:54 +0200 Message-Id: <20190724191746.982481949@linuxfoundation.org> X-Mailer: git-send-email 2.22.0 In-Reply-To: <20190724191724.382593077@linuxfoundation.org> References: <20190724191724.382593077@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Suraj Jitindar Singh 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 Signed-off-by: Michael Ellerman Signed-off-by: Greg Kroah-Hartman --- 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;