From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:49524) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Yb0Up-0001WQ-Np for qemu-devel@nongnu.org; Thu, 26 Mar 2015 01:38:27 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Yb0UZ-0000qg-Cn for qemu-devel@nongnu.org; Thu, 26 Mar 2015 01:38:23 -0400 Received: from e23smtp07.au.ibm.com ([202.81.31.140]:44534) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Yb0UY-0000pq-Nh for qemu-devel@nongnu.org; Thu, 26 Mar 2015 01:38:07 -0400 Received: from /spool/local by e23smtp07.au.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Thu, 26 Mar 2015 15:38:01 +1000 From: Gavin Shan Date: Thu, 26 Mar 2015 16:35:02 +1100 Message-Id: <1427348102-5879-3-git-send-email-gwshan@linux.vnet.ibm.com> In-Reply-To: <1427348102-5879-1-git-send-email-gwshan@linux.vnet.ibm.com> References: <1427348102-5879-1-git-send-email-gwshan@linux.vnet.ibm.com> Subject: [Qemu-devel] [PATCH 2/2] sPAPR: Reenable EEH functionality on reboot List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: agraf@suse.de, Gavin Shan , alex.williamson@redhat.com, qemu-ppc@nongnu.org, david@gibson.dropbear.id.au When rebooting the guest, some PEs might be in frozen state. The contained PCI devices won't work properly if their frozen states aren't cleared in time. One case running into this situation would be maximal EEH error times encountered in the guest. The patch reenables the EEH functinality on PEs on PHB's reset callback, which will clear their frozen states if needed. Signed-off-by: Gavin Shan --- hw/ppc/spapr_pci_vfio.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/hw/ppc/spapr_pci_vfio.c b/hw/ppc/spapr_pci_vfio.c index 6fa3afe..25c1b3e 100644 --- a/hw/ppc/spapr_pci_vfio.c +++ b/hw/ppc/spapr_pci_vfio.c @@ -71,9 +71,21 @@ static void spapr_phb_vfio_finish_realize(sPAPRPHBState *sphb, Error **errp) spapr_tce_get_iommu(tcet)); } +/* + * The PE might be in frozen state. To reenable the EEH + * functionality on it will clean the frozen state, which + * ensures that the contained PCI devices will work properly. + */ static void spapr_phb_vfio_reset(DeviceState *qdev) { - /* Do nothing */ + sPAPRPHBVFIOState *svphb = SPAPR_PCI_VFIO_HOST_BRIDGE(qdev); + struct vfio_eeh_pe_op op = { + .argsz = sizeof(op), + .op = VFIO_EEH_PE_ENABLE + }; + + vfio_container_ioctl(&svphb->phb.iommu_as, + svphb->iommugroupid, VFIO_EEH_PE_OP, &op); } static int spapr_phb_vfio_eeh_set_option(sPAPRPHBState *sphb, -- 1.8.3.2