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=-8.1 required=3.0 tests=DKIM_INVALID,DKIM_SIGNED, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_PASS,URIBL_BLOCKED,USER_AGENT_MUTT autolearn=ham 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 97CDFC43143 for ; Tue, 2 Oct 2018 07:25:13 +0000 (UTC) Received: from lists.ozlabs.org (lists.ozlabs.org [203.11.71.2]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id C2BAE2089A for ; Tue, 2 Oct 2018 07:25:12 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=gibson.dropbear.id.au header.i=@gibson.dropbear.id.au header.b="guVCGtDF" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org C2BAE2089A Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=gibson.dropbear.id.au Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=linuxppc-dev-bounces+linuxppc-dev=archiver.kernel.org@lists.ozlabs.org Received: from lists.ozlabs.org (lists.ozlabs.org [IPv6:2401:3900:2:1::3]) by lists.ozlabs.org (Postfix) with ESMTP id 42PVzV6CJpzF3Cd for ; Tue, 2 Oct 2018 17:25:10 +1000 (AEST) Authentication-Results: lists.ozlabs.org; dmarc=none (p=none dis=none) header.from=gibson.dropbear.id.au Authentication-Results: lists.ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=gibson.dropbear.id.au header.i=@gibson.dropbear.id.au header.b="guVCGtDF"; dkim-atps=neutral Received: from ozlabs.org (bilbo.ozlabs.org [203.11.71.1]) (using TLSv1.2 with cipher ADH-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by lists.ozlabs.org (Postfix) with ESMTPS id 42PVwx5sNRzF0Pl for ; Tue, 2 Oct 2018 17:22:57 +1000 (AEST) Authentication-Results: lists.ozlabs.org; dmarc=none (p=none dis=none) header.from=gibson.dropbear.id.au Authentication-Results: lists.ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=gibson.dropbear.id.au header.i=@gibson.dropbear.id.au header.b="guVCGtDF"; dkim-atps=neutral Received: by ozlabs.org (Postfix) id 42PVwx5CVfz9sBq; Tue, 2 Oct 2018 17:22:57 +1000 (AEST) Received: by ozlabs.org (Postfix, from userid 1007) id 42PVwx4d3Xz9sCq; Tue, 2 Oct 2018 17:22:57 +1000 (AEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gibson.dropbear.id.au; s=201602; t=1538464977; bh=xOywA+th4Z60DexvInMKVRU2d4gWASkLmQC0r467cTE=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=guVCGtDFgJkYRjmaleMq3OVyucNWN9/MlukdboBhad0QLiB38C//yA/y6mOvRCbTR ItvBDAC56ZcPewHPRLQtGviHGicaNIatec7wD2FnxSJoLDRPjbLY07elPdM4k+DR0t m2msPwOQgXTdNCnMg8V2XJrQHJP9Jp9GFLwGCKWg= Date: Tue, 2 Oct 2018 17:02:07 +1000 From: David Gibson To: Paul Mackerras Subject: Re: [PATCH v2 20/33] KVM: PPC: Book3S HV: Use XICS hypercalls when running as a nested hypervisor Message-ID: <20181002070207.GK1886@umbus.fritz.box> References: <1538127963-15645-1-git-send-email-paulus@ozlabs.org> <1538127963-15645-21-git-send-email-paulus@ozlabs.org> MIME-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha256; protocol="application/pgp-signature"; boundary="SLauP2uySp+9cKYP" Content-Disposition: inline In-Reply-To: <1538127963-15645-21-git-send-email-paulus@ozlabs.org> User-Agent: Mutt/1.10.1 (2018-07-13) X-BeenThere: linuxppc-dev@lists.ozlabs.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Linux on PowerPC Developers Mail List List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: linuxppc-dev@ozlabs.org, kvm-ppc@vger.kernel.org, kvm@vger.kernel.org Errors-To: linuxppc-dev-bounces+linuxppc-dev=archiver.kernel.org@lists.ozlabs.org Sender: "Linuxppc-dev" --SLauP2uySp+9cKYP Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable On Fri, Sep 28, 2018 at 07:45:50PM +1000, Paul Mackerras wrote: > This adds code to call the H_IPI and H_EOI hypercalls when we are > running as a nested hypervisor (i.e. without the CPU_FTR_HVMODE cpu > feature) and we would otherwise access the XICS interrupt controller > directly or via an OPAL call. >=20 > Signed-off-by: Paul Mackerras Reviewed-by: David Gibson > --- > arch/powerpc/kvm/book3s_hv.c | 7 +++++- > arch/powerpc/kvm/book3s_hv_builtin.c | 44 +++++++++++++++++++++++++++++-= ------ > arch/powerpc/kvm/book3s_hv_rm_xics.c | 8 +++++++ > 3 files changed, 50 insertions(+), 9 deletions(-) >=20 > diff --git a/arch/powerpc/kvm/book3s_hv.c b/arch/powerpc/kvm/book3s_hv.c > index 60adf47..8d2f91f 100644 > --- a/arch/powerpc/kvm/book3s_hv.c > +++ b/arch/powerpc/kvm/book3s_hv.c > @@ -173,6 +173,10 @@ static bool kvmppc_ipi_thread(int cpu) > { > unsigned long msg =3D PPC_DBELL_TYPE(PPC_DBELL_SERVER); > =20 > + /* If we're a nested hypervisor, fall back to ordinary IPIs for now */ > + if (kvmhv_on_pseries()) > + return false; > + > /* On POWER9 we can use msgsnd to IPI any cpu */ > if (cpu_has_feature(CPU_FTR_ARCH_300)) { > msg |=3D get_hard_smp_processor_id(cpu); > @@ -5164,7 +5168,8 @@ static int kvmppc_book3s_init_hv(void) > * indirectly, via OPAL. > */ > #ifdef CONFIG_SMP > - if (!xive_enabled() && !local_paca->kvm_hstate.xics_phys) { > + if (!xive_enabled() && !kvmhv_on_pseries() && > + !local_paca->kvm_hstate.xics_phys) { > struct device_node *np; > =20 > np =3D of_find_compatible_node(NULL, NULL, "ibm,opal-intc"); > diff --git a/arch/powerpc/kvm/book3s_hv_builtin.c b/arch/powerpc/kvm/book= 3s_hv_builtin.c > index ccfea5b..a71e2fc 100644 > --- a/arch/powerpc/kvm/book3s_hv_builtin.c > +++ b/arch/powerpc/kvm/book3s_hv_builtin.c > @@ -231,6 +231,15 @@ void kvmhv_rm_send_ipi(int cpu) > void __iomem *xics_phys; > unsigned long msg =3D PPC_DBELL_TYPE(PPC_DBELL_SERVER); > =20 > + /* For a nested hypervisor, use the XICS via hcall */ > + if (kvmhv_on_pseries()) { > + unsigned long retbuf[PLPAR_HCALL_BUFSIZE]; > + > + plpar_hcall_raw(H_IPI, retbuf, get_hard_smp_processor_id(cpu), > + IPI_PRIORITY); > + return; > + } > + > /* On POWER9 we can use msgsnd for any destination cpu. */ > if (cpu_has_feature(CPU_FTR_ARCH_300)) { > msg |=3D get_hard_smp_processor_id(cpu); > @@ -460,12 +469,19 @@ static long kvmppc_read_one_intr(bool *again) > return 1; > =20 > /* Now read the interrupt from the ICP */ > - xics_phys =3D local_paca->kvm_hstate.xics_phys; > - rc =3D 0; > - if (!xics_phys) > - rc =3D opal_int_get_xirr(&xirr, false); > - else > - xirr =3D __raw_rm_readl(xics_phys + XICS_XIRR); > + if (kvmhv_on_pseries()) { > + unsigned long retbuf[PLPAR_HCALL_BUFSIZE]; > + > + rc =3D plpar_hcall_raw(H_XIRR, retbuf, 0xFF); > + xirr =3D cpu_to_be32(retbuf[0]); > + } else { > + xics_phys =3D local_paca->kvm_hstate.xics_phys; > + rc =3D 0; > + if (!xics_phys) > + rc =3D opal_int_get_xirr(&xirr, false); > + else > + xirr =3D __raw_rm_readl(xics_phys + XICS_XIRR); > + } > if (rc < 0) > return 1; > =20 > @@ -494,7 +510,13 @@ static long kvmppc_read_one_intr(bool *again) > */ > if (xisr =3D=3D XICS_IPI) { > rc =3D 0; > - if (xics_phys) { > + if (kvmhv_on_pseries()) { > + unsigned long retbuf[PLPAR_HCALL_BUFSIZE]; > + > + plpar_hcall_raw(H_IPI, retbuf, > + hard_smp_processor_id(), 0xff); > + plpar_hcall_raw(H_EOI, retbuf, h_xirr); > + } else if (xics_phys) { > __raw_rm_writeb(0xff, xics_phys + XICS_MFRR); > __raw_rm_writel(xirr, xics_phys + XICS_XIRR); > } else { > @@ -520,7 +542,13 @@ static long kvmppc_read_one_intr(bool *again) > /* We raced with the host, > * we need to resend that IPI, bummer > */ > - if (xics_phys) > + if (kvmhv_on_pseries()) { > + unsigned long retbuf[PLPAR_HCALL_BUFSIZE]; > + > + plpar_hcall_raw(H_IPI, retbuf, > + hard_smp_processor_id(), > + IPI_PRIORITY); > + } else if (xics_phys) > __raw_rm_writeb(IPI_PRIORITY, > xics_phys + XICS_MFRR); > else > diff --git a/arch/powerpc/kvm/book3s_hv_rm_xics.c b/arch/powerpc/kvm/book= 3s_hv_rm_xics.c > index 8b9f356..b3f5786 100644 > --- a/arch/powerpc/kvm/book3s_hv_rm_xics.c > +++ b/arch/powerpc/kvm/book3s_hv_rm_xics.c > @@ -767,6 +767,14 @@ static void icp_eoi(struct irq_chip *c, u32 hwirq, _= _be32 xirr, bool *again) > void __iomem *xics_phys; > int64_t rc; > =20 > + if (kvmhv_on_pseries()) { > + unsigned long retbuf[PLPAR_HCALL_BUFSIZE]; > + > + iosync(); > + plpar_hcall_raw(H_EOI, retbuf, hwirq); > + return; > + } > + > rc =3D pnv_opal_pci_msi_eoi(c, hwirq); > =20 > if (rc) --=20 David Gibson | I'll have my music baroque, and my code david AT gibson.dropbear.id.au | minimalist, thank you. NOT _the_ _other_ | _way_ _around_! http://www.ozlabs.org/~dgibson --SLauP2uySp+9cKYP Content-Type: application/pgp-signature; name="signature.asc" -----BEGIN PGP SIGNATURE----- iQIzBAEBCAAdFiEEdfRlhq5hpmzETofcbDjKyiDZs5IFAluzF+8ACgkQbDjKyiDZ s5KPAQ//UdPQJCMSNFwV9utUu1k9mT+6gHQ5fmL5maD6v6JfDzYCNiBRT0aKMUkf /6vdPP2cIPJa6dnsaQyrOLN4KVW9K7AX0eHLgMZx1OgTSwFqx3UsDEOQQCXF7j1n 57+TuhAJh+etFT/8eatJBgs1seTHso7vIFab63HCkf+wvPTKaKTn8wpS7V3ZXD9a kOWN/4EtKsCYuuDRcRFNy4duFdVd/KOu6nyGITA2x2BJvr188a9GQ3Okk7j/b39K PBRwbGT2Lob+k0dgCoCB22sQLCQ7DNlVJvpVL7VLgnzkSSI8d0hvupprx+IzG270 v6rTKTM2Macvc+W06vEHgW3bK9mlLq7z1tpAgrjgCDQG97ZViL2RXjkR4c7eL59s kWe8GwUbqpmIs9vI0SK4YjdCEG7vXxP8kE6XZjINCg2kJHQImLAkilqaFSSKY8Yn P/rftIQAhHWxt7xVHHy+ZnWhSrXtTxFkb6mFCfGKOBn69BIJOMCopZDJfQBCqBaX oLKlFjrqFK/FT7aEc6e72IbOFrv/8xRKBWXfMSMAfQ0DJeMMJREq4mJ+XLQcQDzZ O4J1qYq3i8AEL0+7ezGjkDXCayaRlndHI+8qCBmWJ401+U7iILNnKOK7tzOAZVoY MTCjFD741HG0oqQgWNffPGfnrpS6TK3Wm8M3NYPb7BzVzIht15c= =P2Yk -----END PGP SIGNATURE----- --SLauP2uySp+9cKYP--