From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([208.118.235.92]:34086) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TMOzR-0000ms-E0 for qemu-devel@nongnu.org; Thu, 11 Oct 2012 16:04:21 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1TMOzN-0008Jm-F3 for qemu-devel@nongnu.org; Thu, 11 Oct 2012 16:04:17 -0400 Received: from cantor2.suse.de ([195.135.220.15]:44110 helo=mx2.suse.de) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TMOzN-0008JI-5Q for qemu-devel@nongnu.org; Thu, 11 Oct 2012 16:04:13 -0400 Message-ID: <50772635.9030705@suse.de> Date: Thu, 11 Oct 2012 22:04:05 +0200 From: =?ISO-8859-1?Q?Andreas_F=E4rber?= MIME-Version: 1.0 References: <1348930263-2915-1-git-send-email-mjr@cs.wisc.edu> <02c701cda7e9$9ceabb20$d6c03160$@cs.wisc.edu> In-Reply-To: <02c701cda7e9$9ceabb20$d6c03160$@cs.wisc.edu> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Subject: Re: [Qemu-devel] [PATCH v5] Align PCI capabilities in pci_find_space List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Matt Renzelmann Cc: blauwirbel@gmail.com, alex.williamson@redhat.com, qemu-devel@nongnu.org, "Michael S. Tsirkin" Am 11.10.2012 21:50, schrieb Matt Renzelmann: > Hi, >=20 > I just wanted to ping the status of this patch: > http://patchwork.ozlabs.org/patch/188032/ >=20 > This version is different from v4 only in that it adds braces as recomm= ended by > Blue Swirl. PCI patches should cc the PCI maintainer, cf. MAINTAINERS. Andreas >=20 > Thanks and regards, > Matt >=20 >=20 >> -----Original Message----- >> From: qemu-devel-bounces+mjr=3Dcs.wisc.edu@nongnu.org [mailto:qemu-dev= el- >> bounces+mjr=3Dcs.wisc.edu@nongnu.org] On Behalf Of Matt Renzelmann >> Sent: Saturday, September 29, 2012 9:51 AM >> To: qemu-devel@nongnu.org >> Cc: blauwirbel@gmail.com; alex.williamson@redhat.com >> Subject: [Qemu-devel] [PATCH v5] Align PCI capabilities in pci_find_sp= ace >> >> The current implementation of pci_find_space does not correctly align >> PCI capabilities in the PCI configuration space. It also does not >> support PCI-Express devices. This patch fixes these issues. >> >> Thanks to Alex Williamson for feedback. >> >> Signed-off-by: Matt Renzelmann >> --- >> >> Braces added. >> >> hw/pci.c | 36 ++++++++++++++++++++++++++++-------- >> 1 files changed, 28 insertions(+), 8 deletions(-) >> >> diff --git a/hw/pci.c b/hw/pci.c >> index f855cf3..0f24225 100644 >> --- a/hw/pci.c >> +++ b/hw/pci.c >> @@ -1626,19 +1626,39 @@ PCIDevice *pci_create_simple(PCIBus *bus, int = devfn, >> const char *name) >> return pci_create_simple_multifunction(bus, devfn, false, name); >> } >> >> -static int pci_find_space(PCIDevice *pdev, uint8_t size) >> +static int pci_find_space(PCIDevice *pdev, uint32_t start, >> + uint32_t end, uint32_t size) >> { >> - int config_size =3D pci_config_size(pdev); >> - int offset =3D PCI_CONFIG_HEADER_SIZE; >> + int offset =3D start; >> int i; >> - for (i =3D PCI_CONFIG_HEADER_SIZE; i < config_size; ++i) >> - if (pdev->used[i]) >> - offset =3D i + 1; >> - else if (i - offset + 1 =3D=3D size) >> + uint32_t *dword_used =3D &pdev->used[start]; >> + >> + assert(pci_config_size(pdev) >=3D end); >> + assert(!(start & 0x3)); >> + >> + /* This approach ensures the capability is dword-aligned, as >> + required by the PCI and PCI-E specifications */ >> + for (i =3D start; i < end; i +=3D 4, dword_used++) { >> + if (*dword_used) { >> + offset =3D i + 4; >> + } else if (i - offset + 4 >=3D size) { >> return offset; >> + } >> + } >> + >> return 0; >> } >> >> +static int pci_find_legacy_space(PCIDevice *pdev, uint8_t size) { >> + return pci_find_space(pdev, PCI_CONFIG_HEADER_SIZE, >> + PCI_CONFIG_SPACE_SIZE, size); >> +} >> + >> +static int pci_find_express_space(PCIDevice *pdev, uint16_t size) { >> + return pci_find_space(pdev, PCI_CONFIG_SPACE_SIZE, >> + PCIE_CONFIG_SPACE_SIZE, size); >> +} >> + >> static uint8_t pci_find_capability_list(PCIDevice *pdev, uint8_t cap_= id, >> uint8_t *prev_p) >> { >> @@ -1826,7 +1846,7 @@ int pci_add_capability(PCIDevice *pdev, uint8_t = cap_id, >> int i, overlapping_cap; >> >> if (!offset) { >> - offset =3D pci_find_space(pdev, size); >> + offset =3D pci_find_legacy_space(pdev, size); >> if (!offset) { >> return -ENOSPC; >> } >> -- >> 1.7.5.4 >> >=20 >=20 >=20 --=20 SUSE LINUX Products GmbH, Maxfeldstr. 5, 90409 N=FCrnberg, Germany GF: Jeff Hawn, Jennifer Guild, Felix Imend=F6rffer; HRB 16746 AG N=FCrnbe= rg