From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:52082) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZwjEv-0004bZ-9O for qemu-devel@nongnu.org; Wed, 11 Nov 2015 23:12:02 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ZwjEt-0003hp-Sw for qemu-devel@nongnu.org; Wed, 11 Nov 2015 23:12:01 -0500 Date: Thu, 12 Nov 2015 15:02:43 +1100 From: David Gibson Message-ID: <20151112040243.GM5852@voom.redhat.com> References: <20151111171135.4328.41819.stgit@aravindap> <20151111171544.4328.22074.stgit@aravindap> MIME-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="YIwHDYD8sUXtBKvt" Content-Disposition: inline In-Reply-To: <20151111171544.4328.22074.stgit@aravindap> Subject: Re: [Qemu-devel] [PATCH 3/4] spapr: Handle "ibm, nmi-register" and "ibm, nmi-interlock" RTAS calls List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Aravinda Prasad Cc: benh@au1.ibm.com, aik@ozlabs.ru, agraf@suse.de, qemu-devel@nongnu.org, qemu-ppc@nongnu.org, paulus@samba.org, sam.bobroff@au1.ibm.com --YIwHDYD8sUXtBKvt Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable On Wed, Nov 11, 2015 at 10:45:44PM +0530, Aravinda Prasad wrote: > This patch adds support in QEMU to handle "ibm,nmi-register" > and "ibm,nmi-interlock" RTAS calls. >=20 > The machine check notification address is saved when the > OS issues "ibm,nmi-register" RTAS call. >=20 > This patch also handles the case when multiple processors > experience machine check at or about the same time by > handling "ibm,nmi-interlock" call. In such cases, as per > PAPR, subsequent processors serialize waiting for the first > processor to issue the "ibm,nmi-interlock" call. The second > processor waits till the first processor, which also > received a machine check error, is done reading the error > log. The first processor issues "ibm,nmi-interlock" call > when the error log is consumed. This patch implements the > releasing part of the error-log while subsequent patch > (which builds error log) handles the locking part. >=20 > Signed-off-by: Aravinda Prasad > --- > hw/ppc/spapr_rtas.c | 29 +++++++++++++++++++++++++++++ > include/hw/ppc/spapr.h | 8 +++++++- > 2 files changed, 36 insertions(+), 1 deletion(-) >=20 > diff --git a/hw/ppc/spapr_rtas.c b/hw/ppc/spapr_rtas.c > index 9869bc9..fd4d2af 100644 > --- a/hw/ppc/spapr_rtas.c > +++ b/hw/ppc/spapr_rtas.c > @@ -597,6 +597,31 @@ out: > rtas_st(rets, 0, rc); > } > =20 > +static void rtas_ibm_nmi_register(PowerPCCPU *cpu, > + sPAPRMachineState *spapr, > + uint32_t token, uint32_t nargs, > + target_ulong args, > + uint32_t nret, target_ulong rets) > +{ > + qemu_mutex_init(&spapr->mc_in_progress); > + spapr->guest_machine_check_addr =3D rtas_ld(args, 1); > + rtas_st(rets, 0, RTAS_OUT_SUCCESS); > +} > + > +static void rtas_ibm_nmi_interlock(PowerPCCPU *cpu, > + sPAPRMachineState *spapr, > + uint32_t token, uint32_t nargs, > + target_ulong args, > + uint32_t nret, target_ulong rets) > +{ > + /* > + * VCPU issuing "ibm,nmi-interlock" is done with NMI handling, > + * hence unlock mc_in_progress. > + */ > + qemu_mutex_unlock(&spapr->mc_in_progress); Hrm... allowing the guest direct control over a qemu internal mutex sets off alarm bells for me. It could be ok, depending on exactly where the mutex is taken, and whether it has a timeout and so forth, but it makes me nervous. If nothing else this needs some substantial comments explaining the locking scheme and why it's safe to give userspace direct control over the unlock. > + rtas_st(rets, 0, RTAS_OUT_SUCCESS); > +} > + > static struct rtas_call { > const char *name; > spapr_rtas_fn fn; > @@ -747,6 +772,10 @@ static void core_rtas_register_types(void) > rtas_get_sensor_state); > spapr_rtas_register(RTAS_IBM_CONFIGURE_CONNECTOR, "ibm,configure-con= nector", > rtas_ibm_configure_connector); > + spapr_rtas_register(RTAS_IBM_NMI_REGISTER, "ibm,nmi-register", > + rtas_ibm_nmi_register); > + spapr_rtas_register(RTAS_IBM_NMI_INTERLOCK, "ibm,nmi-interlock", > + rtas_ibm_nmi_interlock); > } > =20 > type_init(core_rtas_register_types) > diff --git a/include/hw/ppc/spapr.h b/include/hw/ppc/spapr.h > index b5cadd7..0a31d15 100644 > --- a/include/hw/ppc/spapr.h > +++ b/include/hw/ppc/spapr.h > @@ -74,6 +74,10 @@ struct sPAPRMachineState { > /* RTAS state */ > QTAILQ_HEAD(, sPAPRConfigureConnectorState) ccs_list; > =20 > + /* State related to "ibm,nmi-register" and "ibm,nmi-interlock" calls= */ > + target_ulong guest_machine_check_addr; > + QemuMutex mc_in_progress; > + > /*< public >*/ > char *kvm_type; > }; > @@ -458,8 +462,10 @@ int spapr_allocate_irq_block(int num, bool lsi, bool= msi); > #define RTAS_IBM_SET_SLOT_RESET (RTAS_TOKEN_BASE + 0x23) > #define RTAS_IBM_CONFIGURE_PE (RTAS_TOKEN_BASE + 0x24) > #define RTAS_IBM_SLOT_ERROR_DETAIL (RTAS_TOKEN_BASE + 0x25) > +#define RTAS_IBM_NMI_REGISTER (RTAS_TOKEN_BASE + 0x26) > +#define RTAS_IBM_NMI_INTERLOCK (RTAS_TOKEN_BASE + 0x27) > =20 > -#define RTAS_TOKEN_MAX (RTAS_TOKEN_BASE + 0x26) > +#define RTAS_TOKEN_MAX (RTAS_TOKEN_BASE + 0x28) > =20 > /* RTAS ibm,get-system-parameter token values */ > #define RTAS_SYSPARM_SPLPAR_CHARACTERISTICS 20 >=20 --=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 --YIwHDYD8sUXtBKvt Content-Type: application/pgp-signature; name="signature.asc" -----BEGIN PGP SIGNATURE----- Version: GnuPG v1 iQIcBAEBAgAGBQJWRA9jAAoJEGw4ysog2bOSwFAP/R2nnxbZU3i25dfyuPTde9wH uedefV3AEFkeJ9692HAi3JL6VqVsAWCiEhKvFA3vPaQ++KCet8cHbLsTZdkjE1sn 6pCFOiTeVJ7jimxR85sCi1bpyf/otcmD3gkOCk1AqfOYNxLiVxrq9E/ODD3zaZyh z/2K8ga8C/wCSHK9BBFSw0492YlzKpmZEx9SgYCus1wlLs010lUQ8dcsp61NATyd tV3ETP6ssmd4RMbDAhdvXKRaFkBbjuwOtgch1tG4xPZZ7kqOe2caYvWO22vXwpNy fzu5g5bK2h8Shjp4/ERoJRmbPeOh6PJV7Fx3+cDawWMF8vNQTn6z0aBWlrgPnvaz GIey8Ru9xyOSaEom8UslhlznegqAw+OeZ7VGK0R71q35b4oGllX0jyxn6pCgi9BN 9DoTtkr4QOegvQaOrXQtuFCvaOHpg6LuOoWa1AVpeu8JREdgcLUWOaT86hS6CgAp SDVzvlCh7Y2+czcGwAyZE0N7Q7wqSBzusU3Gvu2fWwUWvA9+hA/y6/zW/PqNO4If qlWbW/+3N9CEfJm1c9L3ZarNRMiPArjWyYa7gVPA/FOaNJptFyMaZ7tTrs5WMe7y nzs+qpRHf7lRCZwFOCgtZVWoH6CiXKUbkUcPP36wCV2C7VaVWLLjkR6TA66wjfo+ gTyVVrD+JVFCt9ZqHZ71 =EGh+ -----END PGP SIGNATURE----- --YIwHDYD8sUXtBKvt--