From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:41544) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bpQ3B-0002yU-W3 for qemu-devel@nongnu.org; Wed, 28 Sep 2016 21:22:15 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1bpQ3A-0006Oo-HG for qemu-devel@nongnu.org; Wed, 28 Sep 2016 21:22:13 -0400 Date: Thu, 29 Sep 2016 11:21:58 +1000 From: David Gibson Message-ID: <20160929012158.GM18880@umbus> References: <1475061390-17644-1-git-send-email-thuth@redhat.com> <1475061390-17644-4-git-send-email-thuth@redhat.com> MIME-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha256; protocol="application/pgp-signature"; boundary="iUV/lbBrmPtUT9dM" Content-Disposition: inline In-Reply-To: <1475061390-17644-4-git-send-email-thuth@redhat.com> Subject: Re: [Qemu-devel] [PATCH 3/3] ppc: Check the availability of transactional memory List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Thomas Huth Cc: qemu-ppc@nongnu.org, Alexander Graf , qemu-devel@nongnu.org, =?iso-8859-1?Q?C=E9dric?= Le Goater , Anton Blanchard --iUV/lbBrmPtUT9dM Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable On Wed, Sep 28, 2016 at 01:16:30PM +0200, Thomas Huth wrote: > KVM-PR currently does not support transactional memory, and the > implementation in TCG is just a fake. We should not announce TM > support in the ibm,pa-features property when running on such a > system, so disable it by default and only enable it if the KVM > implementation supports it (i.e. recent versions of KVM-HV). > These changes are based on some earlier work from Anton Blanchard > (thanks!). >=20 > Signed-off-by: Thomas Huth So, I've applied this, but I do have one concern. KVM HV has, IIUC, supported TM in guests since basically forever, but the KVM_CAP_PPC_HTM tag is pretty new. So this change will break TM for guests on KVM HV older than the capability flag. So, I think we want a fallback which will set cap_htm if we detect KVM HV using the usual KVM_CAP_PPC_GET_PVINFO hack. I think we can do that as a follow up patch, but we definitely should implement it before 2.8 is released. > --- > hw/ppc/spapr.c | 5 ++++- > target-ppc/kvm.c | 7 +++++++ > target-ppc/kvm_ppc.h | 6 ++++++ > 3 files changed, 17 insertions(+), 1 deletion(-) >=20 > diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c > index 46d6b90..0bdea5b 100644 > --- a/hw/ppc/spapr.c > +++ b/hw/ppc/spapr.c > @@ -555,7 +555,7 @@ static void spapr_populate_pa_features(CPUPPCState *e= nv, void *fdt, int offset) > 0xf6, 0x1f, 0xc7, 0xc0, 0x80, 0xf0, > 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, > 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, > - 0x80, 0x00, 0x80, 0x00, 0x80, 0x00 }; > + 0x80, 0x00, 0x80, 0x00, 0x00, 0x00 }; > uint8_t *pa_features; > size_t pa_size; > =20 > @@ -584,6 +584,9 @@ static void spapr_populate_pa_features(CPUPPCState *e= nv, void *fdt, int offset) > */ > pa_features[3] |=3D 0x20; > } > + if (kvmppc_has_cap_htm()) { > + pa_features[24] |=3D 0x80; /* Transactional memory support */ > + } > =20 > _FDT((fdt_setprop(fdt, offset, "ibm,pa-features", pa_features, pa_si= ze))); > } > diff --git a/target-ppc/kvm.c b/target-ppc/kvm.c > index a18d4d5..e9a9faf 100644 > --- a/target-ppc/kvm.c > +++ b/target-ppc/kvm.c > @@ -80,6 +80,7 @@ static int cap_ppc_watchdog; > static int cap_papr; > static int cap_htab_fd; > static int cap_fixup_hcalls; > +static int cap_htm; /* Hardware transactional memory support= */ > =20 > static uint32_t debug_inst_opcode; > =20 > @@ -122,6 +123,7 @@ int kvm_arch_init(MachineState *ms, KVMState *s) > * only activated after this by kvmppc_set_papr() */ > cap_htab_fd =3D kvm_check_extension(s, KVM_CAP_PPC_HTAB_FD); > cap_fixup_hcalls =3D kvm_check_extension(s, KVM_CAP_PPC_FIXUP_HCALL); > + cap_htm =3D kvm_vm_check_extension(s, KVM_CAP_PPC_HTM); > =20 > if (!cap_interrupt_level) { > fprintf(stderr, "KVM: Couldn't find level irq capability. Expect= the " > @@ -2353,6 +2355,11 @@ bool kvmppc_has_cap_fixup_hcalls(void) > return cap_fixup_hcalls; > } > =20 > +bool kvmppc_has_cap_htm(void) > +{ > + return cap_htm; > +} > + > static PowerPCCPUClass *ppc_cpu_get_family_class(PowerPCCPUClass *pcc) > { > ObjectClass *oc =3D OBJECT_CLASS(pcc); > diff --git a/target-ppc/kvm_ppc.h b/target-ppc/kvm_ppc.h > index a778184..bd1d78b 100644 > --- a/target-ppc/kvm_ppc.h > +++ b/target-ppc/kvm_ppc.h > @@ -55,6 +55,7 @@ void kvmppc_hash64_free_pteg(uint64_t token); > void kvmppc_hash64_write_pte(CPUPPCState *env, target_ulong pte_index, > target_ulong pte0, target_ulong pte1); > bool kvmppc_has_cap_fixup_hcalls(void); > +bool kvmppc_has_cap_htm(void); > int kvmppc_enable_hwrng(void); > int kvmppc_put_books_sregs(PowerPCCPU *cpu); > PowerPCCPUClass *kvm_ppc_get_host_cpu_class(void); > @@ -249,6 +250,11 @@ static inline bool kvmppc_has_cap_fixup_hcalls(void) > abort(); > } > =20 > +static inline bool kvmppc_has_cap_htm(void) > +{ > + return false; > +} > + > static inline int kvmppc_enable_hwrng(void) > { > return -1; --=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 --iUV/lbBrmPtUT9dM Content-Type: application/pgp-signature; name="signature.asc" -----BEGIN PGP SIGNATURE----- Version: GnuPG v2 iQIcBAEBCAAGBQJX7Gy2AAoJEGw4ysog2bOSQmgP/RRPk+nV8PNlOP6XL1Psk0ID 8ezPSpP+VuoeSnKpm61GrMLi8X2TJ1h7tMtidQCLFyJl/h9IoSAElwBw1zI5wyFm bGBz6asOBHatx1g21PRcgrhnZBpY4ticpgh75mFzCQfYJsmG2avQeZTq7nPKCx3N eW3qC7v78uU473akFHFBw9X4f4pimB4jC+Jpdfi5uGfoGa2vlnv2BnYV9Sv30bth 6D0Z0i81UF3qrCxH5gjtW6/d9AYiAU8Y8TUirAHX6B+Xlu+uUzQewPhlg3q9PIKW RVtcaEeDCMN5n3F+/oCLb+jpJnJVzotV+Xj0yPJbDPE0HNNLdQ4RyHmKgKmo69kH 6DqF9wXp9fzMGggY84xEqf+/OEdRmkTen41XNirMy+OMo1ZQXFnolelV/oEBrzwU 0lCNPCdKYwwn6q25jGY1OgU+YcgFOxEWFWxEy2PlSEryS+AUC/q+UmPuKTYkchFE wljEcL0QFBI4kycTezFnrAN3ZM+iaA7XaVNxHju4yAMbN/yKychLrNO0pLwW//Ee 913Q0resR9p89yEEHyDl7wd1w7c1gZ+fRYD8F6QLV5LdxvhQoIotzqDGQTzolGfq 72F8IYK2veq5dEQFYTfZ4bqG1W2I5UyMaHH1B/Up7t3lQGevVJa/GhcBRPSltgyy 3xBYAl6h70BDD0LNeqSo =+s4Q -----END PGP SIGNATURE----- --iUV/lbBrmPtUT9dM--