From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:50716) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YXKvD-00005c-Gs for qemu-devel@nongnu.org; Sun, 15 Mar 2015 22:38:28 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1YXKv7-00072O-UE for qemu-devel@nongnu.org; Sun, 15 Mar 2015 22:38:27 -0400 Received: from [59.151.112.132] (port=50470 helo=heian.cn.fujitsu.com) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YXKv7-00071x-8I for qemu-devel@nongnu.org; Sun, 15 Mar 2015 22:38:21 -0400 Message-ID: <55064060.70105@cn.fujitsu.com> Date: Mon, 16 Mar 2015 10:30:56 +0800 From: Chen Fan MIME-Version: 1.0 References: <1426285501.3643.137.camel@redhat.com> In-Reply-To: <1426285501.3643.137.camel@redhat.com> Content-Type: text/plain; charset="utf-8"; format=flowed Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH v5 2/7] aer: impove pcie_aer_init to support vfio device List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Alex Williamson Cc: izumi.taku@jp.fujitsu.com, qemu-devel@nongnu.org On 03/14/2015 06:25 AM, Alex Williamson wrote: > On Thu, 2015-03-12 at 18:23 +0800, Chen Fan wrote: >> pcie_aer_init was used to emulate an aer capability for pcie device, >> but for vfio device, the aer config space size is mutable and is not >> always equal to PCI_ERR_SIZEOF(0x48). it depends on where the TLP Prefix >> register required, so here we add a size argument. > This would need to go through the QEMU PCI tree. Question, do all of > the fields of the AER capability directly translate to the guest view of > the device? For instance, are there source and destination values that > need to be emulated for the guest? I'm not really sure what we're > exposing via the TLP Prefix area. Thanks, I think all of the fields of the AER do not need to be emulated for the guest. the guest directly read the register of err status, Header log and TLP prefix log. and we don't need to care what TLP prefix exposes, due to the TLP prefix area is depended on the End-End TLP Prefix Supported bit. the spec said If the End-End TLP Prefix Supported bit (Section 7.8.15) is Clear, the TLP Prefix Log register is not required to be implemented. therefore if we directly use the PCI_ERR_SIZEOF size to initialize aer, the maybe occur size overlap. Thanks, Chen > > Alex > >> Signed-off-by: Chen Fan >> --- >> hw/pci-bridge/ioh3420.c | 2 +- >> hw/pci-bridge/xio3130_downstream.c | 2 +- >> hw/pci-bridge/xio3130_upstream.c | 2 +- >> hw/pci/pcie_aer.c | 4 ++-- >> include/hw/pci/pcie_aer.h | 2 +- >> 5 files changed, 6 insertions(+), 6 deletions(-) >> >> diff --git a/hw/pci-bridge/ioh3420.c b/hw/pci-bridge/ioh3420.c >> index cce2fdd..4d9cd3f 100644 >> --- a/hw/pci-bridge/ioh3420.c >> +++ b/hw/pci-bridge/ioh3420.c >> @@ -129,7 +129,7 @@ static int ioh3420_initfn(PCIDevice *d) >> goto err_pcie_cap; >> } >> pcie_cap_root_init(d); >> - rc = pcie_aer_init(d, IOH_EP_AER_OFFSET); >> + rc = pcie_aer_init(d, IOH_EP_AER_OFFSET, PCI_ERR_SIZEOF); >> if (rc < 0) { >> goto err; >> } >> diff --git a/hw/pci-bridge/xio3130_downstream.c b/hw/pci-bridge/xio3130_downstream.c >> index b3a6479..9737041 100644 >> --- a/hw/pci-bridge/xio3130_downstream.c >> +++ b/hw/pci-bridge/xio3130_downstream.c >> @@ -92,7 +92,7 @@ static int xio3130_downstream_initfn(PCIDevice *d) >> goto err_pcie_cap; >> } >> pcie_cap_arifwd_init(d); >> - rc = pcie_aer_init(d, XIO3130_AER_OFFSET); >> + rc = pcie_aer_init(d, XIO3130_AER_OFFSET, PCI_ERR_SIZEOF); >> if (rc < 0) { >> goto err; >> } >> diff --git a/hw/pci-bridge/xio3130_upstream.c b/hw/pci-bridge/xio3130_upstream.c >> index eada582..4d7f894 100644 >> --- a/hw/pci-bridge/xio3130_upstream.c >> +++ b/hw/pci-bridge/xio3130_upstream.c >> @@ -81,7 +81,7 @@ static int xio3130_upstream_initfn(PCIDevice *d) >> } >> pcie_cap_flr_init(d); >> pcie_cap_deverr_init(d); >> - rc = pcie_aer_init(d, XIO3130_AER_OFFSET); >> + rc = pcie_aer_init(d, XIO3130_AER_OFFSET, PCI_ERR_SIZEOF); >> if (rc < 0) { >> goto err; >> } >> diff --git a/hw/pci/pcie_aer.c b/hw/pci/pcie_aer.c >> index 5a25c32..71045eb 100644 >> --- a/hw/pci/pcie_aer.c >> +++ b/hw/pci/pcie_aer.c >> @@ -94,12 +94,12 @@ static void aer_log_clear_all_err(PCIEAERLog *aer_log) >> aer_log->log_num = 0; >> } >> >> -int pcie_aer_init(PCIDevice *dev, uint16_t offset) >> +int pcie_aer_init(PCIDevice *dev, uint16_t offset, uint16_t size) >> { >> PCIExpressDevice *exp; >> >> pcie_add_capability(dev, PCI_EXT_CAP_ID_ERR, PCI_ERR_VER, >> - offset, PCI_ERR_SIZEOF); >> + offset, size); >> exp = &dev->exp; >> exp->aer_cap = offset; >> >> diff --git a/include/hw/pci/pcie_aer.h b/include/hw/pci/pcie_aer.h >> index bcac80a..a4cc6f3 100644 >> --- a/include/hw/pci/pcie_aer.h >> +++ b/include/hw/pci/pcie_aer.h >> @@ -87,7 +87,7 @@ struct PCIEAERErr { >> >> extern const VMStateDescription vmstate_pcie_aer_log; >> >> -int pcie_aer_init(PCIDevice *dev, uint16_t offset); >> +int pcie_aer_init(PCIDevice *dev, uint16_t offset, uint16_t size); >> void pcie_aer_exit(PCIDevice *dev); >> void pcie_aer_write_config(PCIDevice *dev, >> uint32_t addr, uint32_t val, int len); > > > . >