From: "Andreas Färber" <afaerber@suse.de>
To: Matt Renzelmann <mjr@cs.wisc.edu>
Cc: blauwirbel@gmail.com, alex.williamson@redhat.com,
qemu-devel@nongnu.org, "Michael S. Tsirkin" <mst@redhat.com>
Subject: Re: [Qemu-devel] [PATCH v5] Align PCI capabilities in pci_find_space
Date: Thu, 11 Oct 2012 22:04:05 +0200 [thread overview]
Message-ID: <50772635.9030705@suse.de> (raw)
In-Reply-To: <02c701cda7e9$9ceabb20$d6c03160$@cs.wisc.edu>
Am 11.10.2012 21:50, schrieb Matt Renzelmann:
> Hi,
>
> I just wanted to ping the status of this patch:
> http://patchwork.ozlabs.org/patch/188032/
>
> This version is different from v4 only in that it adds braces as recommended by
> Blue Swirl.
PCI patches should cc the PCI maintainer, cf. MAINTAINERS.
Andreas
>
> Thanks and regards,
> Matt
>
>
>> -----Original Message-----
>> From: qemu-devel-bounces+mjr=cs.wisc.edu@nongnu.org [mailto:qemu-devel-
>> bounces+mjr=cs.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_space
>>
>> 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 <mjr@cs.wisc.edu>
>> ---
>>
>> 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 = pci_config_size(pdev);
>> - int offset = PCI_CONFIG_HEADER_SIZE;
>> + int offset = start;
>> int i;
>> - for (i = PCI_CONFIG_HEADER_SIZE; i < config_size; ++i)
>> - if (pdev->used[i])
>> - offset = i + 1;
>> - else if (i - offset + 1 == size)
>> + uint32_t *dword_used = &pdev->used[start];
>> +
>> + assert(pci_config_size(pdev) >= end);
>> + assert(!(start & 0x3));
>> +
>> + /* This approach ensures the capability is dword-aligned, as
>> + required by the PCI and PCI-E specifications */
>> + for (i = start; i < end; i += 4, dword_used++) {
>> + if (*dword_used) {
>> + offset = i + 4;
>> + } else if (i - offset + 4 >= 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 = pci_find_space(pdev, size);
>> + offset = pci_find_legacy_space(pdev, size);
>> if (!offset) {
>> return -ENOSPC;
>> }
>> --
>> 1.7.5.4
>>
>
>
>
--
SUSE LINUX Products GmbH, Maxfeldstr. 5, 90409 Nürnberg, Germany
GF: Jeff Hawn, Jennifer Guild, Felix Imendörffer; HRB 16746 AG Nürnberg
prev parent reply other threads:[~2012-10-11 20:04 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-09-29 14:51 [Qemu-devel] [PATCH v5] Align PCI capabilities in pci_find_space Matt Renzelmann
2012-10-11 19:50 ` Matt Renzelmann
2012-10-11 20:04 ` Andreas Färber [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=50772635.9030705@suse.de \
--to=afaerber@suse.de \
--cc=alex.williamson@redhat.com \
--cc=blauwirbel@gmail.com \
--cc=mjr@cs.wisc.edu \
--cc=mst@redhat.com \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.