From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:60835) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YJD4n-0006Wb-QN for qemu-devel@nongnu.org; Wed, 04 Feb 2015 22:25:59 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1YJD4k-0006L1-Fj for qemu-devel@nongnu.org; Wed, 04 Feb 2015 22:25:57 -0500 Date: Thu, 5 Feb 2015 14:26:16 +1100 From: David Gibson Message-ID: <20150205032616.GJ25675@voom.fritz.box> References: <1423016856-11256-1-git-send-email-gwshan@linux.vnet.ibm.com> <1423016856-11256-3-git-send-email-gwshan@linux.vnet.ibm.com> MIME-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="u3bvv0EcKsvvYeex" Content-Disposition: inline In-Reply-To: <1423016856-11256-3-git-send-email-gwshan@linux.vnet.ibm.com> Subject: Re: [Qemu-devel] [PATCH v16 2/2] sPAPR: Implement sPAPRPHBClass::eeh_handler List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Gavin Shan Cc: aik@ozlabs.ru, alex.williamson@redhat.com, qemu-ppc@nongnu.org, qemu-devel@nongnu.org, agraf@suse.de --u3bvv0EcKsvvYeex Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable On Wed, Feb 04, 2015 at 01:27:36PM +1100, Gavin Shan wrote: > The patch implements sPAPRPHBClass::eeh_handler so that the > EEH RTAS requests can be routed to VFIO for further handling. >=20 > Signed-off-by: Gavin Shan > --- > hw/ppc/spapr_pci_vfio.c | 58 +++++++++++++++++++++++++++++++++++++++++++= ++++++ > hw/vfio/common.c | 1 + > 2 files changed, 59 insertions(+) >=20 > diff --git a/hw/ppc/spapr_pci_vfio.c b/hw/ppc/spapr_pci_vfio.c > index 144912b..b76c660 100644 > --- a/hw/ppc/spapr_pci_vfio.c > +++ b/hw/ppc/spapr_pci_vfio.c > @@ -71,6 +71,63 @@ static void spapr_phb_vfio_finish_realize(sPAPRPHBStat= e *sphb, Error **errp) > spapr_tce_get_iommu(tcet)); > } > =20 > +static int spapr_phb_vfio_eeh_handler(sPAPRPHBState *sphb, int req, int = opt) > +{ > + sPAPRPHBVFIOState *svphb =3D SPAPR_PCI_VFIO_HOST_BRIDGE(sphb); > + struct vfio_eeh_pe_op op; > + int cmd; > + > + memset(&op, 0, sizeof(op)); > + op.argsz =3D sizeof(op); Sorry, I misled you with my earlier comment. As agraf pointed out, the partial initializer you used to have was correct. > + switch (req) { > + case RTAS_EEH_REQ_SET_OPTION: > + switch (opt) { > + case RTAS_EEH_DISABLE: > + cmd =3D VFIO_EEH_PE_DISABLE; > + break; > + case RTAS_EEH_ENABLE: > + cmd =3D VFIO_EEH_PE_ENABLE; > + break; > + case RTAS_EEH_THAW_IO: > + cmd =3D VFIO_EEH_PE_UNFREEZE_IO; > + break; > + case RTAS_EEH_THAW_DMA: > + cmd =3D VFIO_EEH_PE_UNFREEZE_DMA; > + break; > + default: > + return -EINVAL; > + } > + break; > + case RTAS_EEH_REQ_GET_STATE: > + cmd =3D VFIO_EEH_PE_GET_STATE; > + break; > + case RTAS_EEH_REQ_RESET: > + switch (opt) { > + case RTAS_SLOT_RESET_DEACTIVATE: > + cmd =3D VFIO_EEH_PE_RESET_DEACTIVATE; > + break; > + case RTAS_SLOT_RESET_HOT: > + cmd =3D VFIO_EEH_PE_RESET_HOT; > + break; > + case RTAS_SLOT_RESET_FUNDAMENTAL: > + cmd =3D VFIO_EEH_PE_RESET_FUNDAMENTAL; > + break; > + default: > + return -EINVAL; > + } > + break; > + case RTAS_EEH_REQ_CONFIGURE: > + cmd =3D VFIO_EEH_PE_CONFIGURE; > + break; > + default: > + return -EINVAL; > + } > + > + op.op =3D cmd; > + return vfio_container_ioctl(&svphb->phb.iommu_as, svphb->iommugroupi= d, > + VFIO_EEH_PE_OP, &op); > +} > + > static void spapr_phb_vfio_reset(DeviceState *qdev) > { > /* Do nothing */ > @@ -84,6 +141,7 @@ static void spapr_phb_vfio_class_init(ObjectClass *kla= ss, void *data) > dc->props =3D spapr_phb_vfio_properties; > dc->reset =3D spapr_phb_vfio_reset; > spc->finish_realize =3D spapr_phb_vfio_finish_realize; > + spc->eeh_handler =3D spapr_phb_vfio_eeh_handler; > } > =20 > static const TypeInfo spapr_phb_vfio_info =3D { > diff --git a/hw/vfio/common.c b/hw/vfio/common.c > index cf483ff..8a10c8b 100644 > --- a/hw/vfio/common.c > +++ b/hw/vfio/common.c > @@ -948,6 +948,7 @@ int vfio_container_ioctl(AddressSpace *as, int32_t gr= oupid, > switch (req) { > case VFIO_CHECK_EXTENSION: > case VFIO_IOMMU_SPAPR_TCE_GET_INFO: > + case VFIO_EEH_PE_OP: > break; > default: > /* Return an error on unknown requests */ --=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 --u3bvv0EcKsvvYeex Content-Type: application/pgp-signature -----BEGIN PGP SIGNATURE----- Version: GnuPG v1 iQIcBAEBAgAGBQJU0uLXAAoJEGw4ysog2bOSxAYQAMeBKoZlA9jZjfskdpLS8lVC VotWW2C9+JeLey01bmU4c9GEFYMxQndBgQoV4VeLwi12hluPeN7tBnhGyhdKXkuy 3XDOSfpzhQaFW2POnY4d3q04qN4XUYY7urJ9OzhUCIyia/bsjVK1zWXFP1cHftWI XEjWHH/uC4A0KJQcRuv+F6Knc+pzozf56FqipCwO5f0q2I2wubuMIiEMB1R0NyO4 V0saNBKu4CVWGETjvez5Wvq++r4cwUDSC3kELNsGHwl9euLPUsFazxzXVHjhpMTO LXPZ2nWk3ACNecnZVvspW87thFKe9jf9RHdILXIPpYjActL0cnViCPszsb56MroL rlXQDhriky83gVC8iRMo+0xjpqQxawjiZjAKnLTOIOfkksL4DvUzqurjP75Hoya4 2YExQorLVdNihSHsvfLIFHlWPOle3VZXGS9DCrWO/qdEtJjXtklC8wjmWEvpm3K2 8NuK0MVBZMB3CT89SgSRhLOznnYPmaqRRxtKYEeBwlJXifTT82n2qZp1SxeAG8Mc 8Plt9xyf4nuGD/bcSJ2RJa8kwzH3u98uxneqjAll3xKK89SR4eljR3JdhPBGdA4K nkpYvdYu+/QlHnM6Do3PILzATzgJEaXZQx7DngkAOZFl9j5KuL2ILkKOi8UMycCb ShGLSBofPOPuNloloOdh =m2uX -----END PGP SIGNATURE----- --u3bvv0EcKsvvYeex--