[{"id":1676733,"web_url":"http://patchwork.ozlabs.org/comment/1676733/","msgid":"<1496298363.4414.4.camel@gmail.com>","date":"2017-06-01T06:26:03","subject":"Re: [PATCH V3 2/2] KVM: PPC: Book3S HV: Enable guests to use large\n\tdecrementer mode on POWER9","submitter":{"id":68427,"url":"http://patchwork.ozlabs.org/api/people/68427/","name":"Suraj Jitindar Singh","email":"sjitindarsingh@gmail.com"},"content":"On Mon, 2017-05-29 at 20:12 +1000, Paul Mackerras wrote:\n> This allows userspace (e.g. QEMU) to enable large decrementer mode\n> for\n> the guest when running on a POWER9 host, by setting the LPCR_LD bit\n> in\n> the guest LPCR value.  With this, the guest exit code saves 64 bits\n> of\n> the guest DEC value on exit.  Other places that use the guest DEC\n> value check the LPCR_LD bit in the guest LPCR value, and if it is\n> set,\n> omit the 32-bit sign extension that would otherwise be done.\n> \n> This doesn't change the DEC emulation used by PR KVM because PR KVM\n> is not supported on POWER9 yet.\n> \n> This is partly based on an earlier patch by Oliver O'Halloran.\n> \n> Signed-off-by: Paul Mackerras <paulus@ozlabs.org>\n\nTested with a hacked up qemu and upstream guest/host (with these\npatches).\n\nTested-by: Suraj Jitindar Singh <sjitindarsingh@gmail.com>\n\n> ---\n>  arch/powerpc/include/asm/kvm_host.h     |  2 +-\n>  arch/powerpc/kvm/book3s_hv.c            |  6 ++++++\n>  arch/powerpc/kvm/book3s_hv_rmhandlers.S | 29\n> ++++++++++++++++++++++++-----\n>  arch/powerpc/kvm/emulate.c              |  4 ++--\n>  4 files changed, 33 insertions(+), 8 deletions(-)\n> \n> diff --git a/arch/powerpc/include/asm/kvm_host.h\n> b/arch/powerpc/include/asm/kvm_host.h\n> index 9c51ac4..3f879c8 100644\n> --- a/arch/powerpc/include/asm/kvm_host.h\n> +++ b/arch/powerpc/include/asm/kvm_host.h\n> @@ -579,7 +579,7 @@ struct kvm_vcpu_arch {\n>  \tulong mcsrr0;\n>  \tulong mcsrr1;\n>  \tulong mcsr;\n> -\tu32 dec;\n> +\tulong dec;\n>  #ifdef CONFIG_BOOKE\n>  \tu32 decar;\n>  #endif\n> diff --git a/arch/powerpc/kvm/book3s_hv.c\n> b/arch/powerpc/kvm/book3s_hv.c\n> index 42b7a4f..9b2eb66 100644\n> --- a/arch/powerpc/kvm/book3s_hv.c\n> +++ b/arch/powerpc/kvm/book3s_hv.c\n> @@ -1143,6 +1143,12 @@ static void kvmppc_set_lpcr(struct kvm_vcpu\n> *vcpu, u64 new_lpcr,\n>  \tmask = LPCR_DPFD | LPCR_ILE | LPCR_TC;\n>  \tif (cpu_has_feature(CPU_FTR_ARCH_207S))\n>  \t\tmask |= LPCR_AIL;\n> +\t/*\n> +\t * On POWER9, allow userspace to enable large decrementer\n> for the\n> +\t * guest, whether or not the host has it enabled.\n> +\t */\n> +\tif (cpu_has_feature(CPU_FTR_ARCH_300))\n> +\t\tmask |= LPCR_LD;\n>  \n>  \t/* Broken 32-bit version of LPCR must not clear top bits */\n>  \tif (preserve_top32)\n> diff --git a/arch/powerpc/kvm/book3s_hv_rmhandlers.S\n> b/arch/powerpc/kvm/book3s_hv_rmhandlers.S\n> index e390b38..3c901b5 100644\n> --- a/arch/powerpc/kvm/book3s_hv_rmhandlers.S\n> +++ b/arch/powerpc/kvm/book3s_hv_rmhandlers.S\n> @@ -920,7 +920,7 @@ ALT_FTR_SECTION_END_IFCLR(CPU_FTR_ARCH_300)\n>  \tmftb\tr7\n>  \tsubf\tr3,r7,r8\n>  \tmtspr\tSPRN_DEC,r3\n> -\tstw\tr3,VCPU_DEC(r4)\n> +\tstd\tr3,VCPU_DEC(r4)\n>  \n>  \tld\tr5, VCPU_SPRG0(r4)\n>  \tld\tr6, VCPU_SPRG1(r4)\n> @@ -1032,7 +1032,13 @@ kvmppc_cede_reentry:\t\t/* r4 =\n> vcpu, r13 = paca */\n>  \tli\tr0, BOOK3S_INTERRUPT_EXTERNAL\n>  \tbne\tcr1, 12f\n>  \tmfspr\tr0, SPRN_DEC\n> -\tcmpwi\tr0, 0\n> +BEGIN_FTR_SECTION\n> +\t/* On POWER9 check whether the guest has large decrementer\n> enabled */\n> +\tandis.\tr8, r8, LPCR_LD@h\n> +\tbne\t15f\n> +END_FTR_SECTION_IFSET(CPU_FTR_ARCH_300)\n> +\textsw\tr0, r0\n> +15:\tcmpdi\tr0, 0\n>  \tli\tr0, BOOK3S_INTERRUPT_DECREMENTER\n>  \tbge\t5f\n>  \n> @@ -1459,12 +1465,18 @@ mc_cont:\n>  \tmtspr\tSPRN_SPURR,r4\n>  \n>  \t/* Save DEC */\n> +\tld\tr3, HSTATE_KVM_VCORE(r13)\n>  \tmfspr\tr5,SPRN_DEC\n>  \tmftb\tr6\n> +\t/* On P9, if the guest has large decr enabled, don't sign\n> extend */\n> +BEGIN_FTR_SECTION\n> +\tld\tr4, VCORE_LPCR(r3)\n> +\tandis.\tr4, r4, LPCR_LD@h\n> +\tbne\t16f\n> +END_FTR_SECTION_IFSET(CPU_FTR_ARCH_300)\n>  \textsw\tr5,r5\n> -\tadd\tr5,r5,r6\n> +16:\tadd\tr5,r5,r6\n>  \t/* r5 is a guest timebase value here, convert to host TB */\n> -\tld\tr3,HSTATE_KVM_VCORE(r13)\n>  \tld\tr4,VCORE_TB_OFFSET(r3)\n>  \tsubf\tr5,r4,r5\n>  \tstd\tr5,VCPU_DEC_EXPIRES(r9)\n> @@ -2376,8 +2388,15 @@ END_FTR_SECTION_IFSET(CPU_FTR_TM)\n>  \tmfspr\tr3, SPRN_DEC\n>  \tmfspr\tr4, SPRN_HDEC\n>  \tmftb\tr5\n> +BEGIN_FTR_SECTION\n> +\t/* On P9 check whether the guest has large decrementer mode\n> enabled */\n> +\tld\tr6, HSTATE_KVM_VCORE(r13)\n> +\tld\tr6, VCORE_LPCR(r6)\n> +\tandis.\tr6, r6, LPCR_LD@h\n> +\tbne\t68f\n> +END_FTR_SECTION_IFSET(CPU_FTR_ARCH_300)\n>  \textsw\tr3, r3\n> -\tEXTEND_HDEC(r4)\n> +68:\tEXTEND_HDEC(r4)\n>  \tcmpd\tr3, r4\n>  \tble\t67f\n>  \tmtspr\tSPRN_DEC, r4\n> diff --git a/arch/powerpc/kvm/emulate.c b/arch/powerpc/kvm/emulate.c\n> index c873ffe..4d8b4d6 100644\n> --- a/arch/powerpc/kvm/emulate.c\n> +++ b/arch/powerpc/kvm/emulate.c\n> @@ -39,7 +39,7 @@ void kvmppc_emulate_dec(struct kvm_vcpu *vcpu)\n>  \tunsigned long dec_nsec;\n>  \tunsigned long long dec_time;\n>  \n> -\tpr_debug(\"mtDEC: %x\\n\", vcpu->arch.dec);\n> +\tpr_debug(\"mtDEC: %lx\\n\", vcpu->arch.dec);\n>  \thrtimer_try_to_cancel(&vcpu->arch.dec_timer);\n>  \n>  #ifdef CONFIG_PPC_BOOK3S\n> @@ -109,7 +109,7 @@ static int kvmppc_emulate_mtspr(struct kvm_vcpu\n> *vcpu, int sprn, int rs)\n>  \tcase SPRN_TBWU: break;\n>  \n>  \tcase SPRN_DEC:\n> -\t\tvcpu->arch.dec = spr_val;\n> +\t\tvcpu->arch.dec = (u32) spr_val;\n>  \t\tkvmppc_emulate_dec(vcpu);\n>  \t\tbreak;\n>","headers":{"Return-Path":"<linuxppc-dev-bounces+patchwork-incoming=ozlabs.org@lists.ozlabs.org>","X-Original-To":["patchwork-incoming@ozlabs.org","linuxppc-dev@lists.ozlabs.org"],"Delivered-To":["patchwork-incoming@ozlabs.org","linuxppc-dev@lists.ozlabs.org","linuxppc-dev@ozlabs.org"],"Received":["from lists.ozlabs.org (lists.ozlabs.org [103.22.144.68])\n\t(using TLSv1.2 with cipher ADH-AES256-GCM-SHA384 (256/256 bits))\n\t(No client certificate requested)\n\tby ozlabs.org (Postfix) with ESMTPS id 3wdcp94qhGz9s8J\n\tfor <patchwork-incoming@ozlabs.org>;\n\tThu,  1 Jun 2017 16:27:29 +1000 (AEST)","from lists.ozlabs.org (lists.ozlabs.org [IPv6:2401:3900:2:1::3])\n\tby lists.ozlabs.org (Postfix) with ESMTP id 3wdcp93dwqzDqJn\n\tfor <patchwork-incoming@ozlabs.org>;\n\tThu,  1 Jun 2017 16:27:29 +1000 (AEST)","from ozlabs.org (ozlabs.org [103.22.144.67])\n\t(using TLSv1.2 with cipher ADH-AES256-GCM-SHA384 (256/256 bits))\n\t(No client certificate requested)\n\tby lists.ozlabs.org (Postfix) with ESMTPS id 3wdcmf5RKwzDq5x\n\tfor <linuxppc-dev@lists.ozlabs.org>;\n\tThu,  1 Jun 2017 16:26:10 +1000 (AEST)","from ozlabs.org (ozlabs.org [IPv6:2401:3900:2:1::2])\n\tby bilbo.ozlabs.org (Postfix) with ESMTP id 3wdcmf4bb4z8sXB\n\tfor <linuxppc-dev@lists.ozlabs.org>;\n\tThu,  1 Jun 2017 16:26:10 +1000 (AEST)","by ozlabs.org (Postfix)\n\tid 3wdcmf46L5z9sCX; Thu,  1 Jun 2017 16:26:10 +1000 (AEST)","from mail-pf0-x243.google.com (mail-pf0-x243.google.com\n\t[IPv6:2607:f8b0:400e:c00::243])\n\t(using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128\n\tbits)) (No client certificate requested)\n\tby ozlabs.org (Postfix) with ESMTPS id 3wdcmf0p6tz9s8J;\n\tThu,  1 Jun 2017 16:26:10 +1000 (AEST)","by mail-pf0-x243.google.com with SMTP id n23so6780588pfb.3;\n\tWed, 31 May 2017 23:26:10 -0700 (PDT)","from surajjs1.ozlabs.ibm.com ([122.99.82.10])\n\tby smtp.googlemail.com with ESMTPSA id\n\tp76sm32892910pfa.53.2017.05.31.23.26.04\n\t(version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256);\n\tWed, 31 May 2017 23:26:06 -0700 (PDT)"],"Authentication-Results":["ozlabs.org;\n\tdkim=fail reason=\"signature verification failed\" (2048-bit key;\n\tunprotected) header.d=gmail.com header.i=@gmail.com\n\theader.b=\"tzO5o0Yi\"; dkim-atps=neutral","lists.ozlabs.org;\n\tdkim=fail reason=\"signature verification failed\" (2048-bit key;\n\tunprotected) header.d=gmail.com header.i=@gmail.com\n\theader.b=\"tzO5o0Yi\"; dkim-atps=neutral","lists.ozlabs.org; dkim=pass (2048-bit key;\n\tunprotected) header.d=gmail.com header.i=@gmail.com\n\theader.b=\"tzO5o0Yi\"; dkim-atps=neutral","ozlabs.org; dkim=pass (2048-bit key;\n\tunprotected) header.d=gmail.com header.i=@gmail.com\n\theader.b=\"tzO5o0Yi\"; dkim-atps=neutral"],"DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025;\n\th=message-id:subject:from:to:cc:date:in-reply-to:references\n\t:mime-version:content-transfer-encoding;\n\tbh=lRxOFyU4j8A7Jbuxw8hnurRKuPSKgbhGxwdqFPcC7CA=;\n\tb=tzO5o0YiyKC+vSMF6Wkm+MCYZ6CeYGtay//9HziYl3dnF/e7H0QzimdxH8hGTdtCLf\n\tkJJQFxFeoChf/zZVjT70DgB8cD9qeW/lrD8FDQyfX8knPTZwP1QMYAcq/CIZuVWjfF2g\n\t1ECsSuxjigU0kIUxW12ih7f70/7vTbjeKpv7QkVwHITuSC/c5p5E6vBf3g/kjt4cj0gK\n\tkaEComuMH4Qd0g4H4sE0DdI2jCZQsgtXmWbvp3fn+rfHd06X8uswdysuFTC/uz2Cys/v\n\tjvPTshMte63eALg0QQV3xtRNxqImbnd6X3WYit73GAfSj+7GtUmBuuW2GptHHFgNfKrF\n\tQagw==","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20161025;\n\th=x-gm-message-state:message-id:subject:from:to:cc:date:in-reply-to\n\t:references:mime-version:content-transfer-encoding;\n\tbh=lRxOFyU4j8A7Jbuxw8hnurRKuPSKgbhGxwdqFPcC7CA=;\n\tb=ZzWJ2BUmOYx91qPH5hK25C/+uRvb/1VrlEKQ49J42uoAkhEHNPHF0z/jMJMmys31JN\n\trTtx1QapkAt1HoiiuMT6tg5v7odrbdVv8/yLYLZCG4x4yuVX0Ozd9xH8YxCccjk4Uov9\n\t+PZo6JEpMdekkKOK2NhsNXdXaeZ7C3+7Ly7JA8ntPF2e8obtNDCd33ZnlqZlxvS9b7mX\n\tvc7relCPh+dXRGOMwPBQXP/VddRAD2afZW9N4pHRIrmB57jFO0/iXXhrRMPaWd/BqTBp\n\tHKwC/ddzYmYqWe5Cmbs0ZVkxaE5CaJD7c7Hhy1gYDYORVHyJmxj0YN8Z8qJ0K07h9ADX\n\tITIg==","X-Gm-Message-State":"AODbwcChsCGxu0r+2aXRprNhKIFc1xRJyA+dhF9rJ9fOjtjrWOWon5F/\n\tccYI0sNkmail4jmX35s=","X-Received":"by 10.99.100.65 with SMTP id y62mr3127608pgb.217.1496298367338; \n\tWed, 31 May 2017 23:26:07 -0700 (PDT)","Message-ID":"<1496298363.4414.4.camel@gmail.com>","Subject":"Re: [PATCH V3 2/2] KVM: PPC: Book3S HV: Enable guests to use large\n\tdecrementer mode on POWER9","From":"Suraj Jitindar Singh <sjitindarsingh@gmail.com>","To":"Paul Mackerras <paulus@ozlabs.org>, kvm@vger.kernel.org","Date":"Thu, 01 Jun 2017 16:26:03 +1000","In-Reply-To":"<20170529101218.GC13938@fergus.ozlabs.ibm.com>","References":"<20170529101113.GA13938@fergus.ozlabs.ibm.com>\n\t<20170529101218.GC13938@fergus.ozlabs.ibm.com>","Content-Type":"text/plain; charset=\"UTF-8\"","X-Mailer":"Evolution 3.22.6 (3.22.6-2.fc25) ","Mime-Version":"1.0","Content-Transfer-Encoding":"8bit","X-BeenThere":"linuxppc-dev@lists.ozlabs.org","X-Mailman-Version":"2.1.23","Precedence":"list","List-Id":"Linux on PowerPC Developers Mail List\n\t<linuxppc-dev.lists.ozlabs.org>","List-Unsubscribe":"<https://lists.ozlabs.org/options/linuxppc-dev>,\n\t<mailto:linuxppc-dev-request@lists.ozlabs.org?subject=unsubscribe>","List-Archive":"<http://lists.ozlabs.org/pipermail/linuxppc-dev/>","List-Post":"<mailto:linuxppc-dev@lists.ozlabs.org>","List-Help":"<mailto:linuxppc-dev-request@lists.ozlabs.org?subject=help>","List-Subscribe":"<https://lists.ozlabs.org/listinfo/linuxppc-dev>,\n\t<mailto:linuxppc-dev-request@lists.ozlabs.org?subject=subscribe>","Cc":"linuxppc-dev@ozlabs.org, kvm-ppc@vger.kernel.org","Errors-To":"linuxppc-dev-bounces+patchwork-incoming=ozlabs.org@lists.ozlabs.org","Sender":"\"Linuxppc-dev\"\n\t<linuxppc-dev-bounces+patchwork-incoming=ozlabs.org@lists.ozlabs.org>"}}]