All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Michael S. Tsirkin" <mst@redhat.com>
To: Donald Dutile <ddutile@redhat.com>
Cc: avi@redhat.com, mtosatti@redhat.com, kvm@vger.kernel.org,
	chrisw@redhat.com
Subject: Re: [PATCH] qemu-kvm: device assignment: add 82599 PCIe Cap struct quirk
Date: Sun, 2 Oct 2011 11:56:35 +0200	[thread overview]
Message-ID: <20111002095634.GG29706@redhat.com> (raw)
In-Reply-To: <1317255633-61967-1-git-send-email-ddutile@redhat.com>

On Wed, Sep 28, 2011 at 08:20:33PM -0400, Donald Dutile wrote:
> commit f9c29774d2174df6ffc20becec20928948198914
> changed the PCIe Capability structure version check
> from if > 2 fail, to if ==1, size=x, if ==2, size=y,
> else fail.
> Turns out the 82599's VF has an errata where it's
> PCIe Cap struct version is 0, which now fails device assignment
> due to the else fallout, where before, it would blissfully work.
> 
> Add a quirk if version=0, & intel-82599, set size to version 2 struct.
> 
> Signed-off-by: Donald_Dutile <ddutile@redhat.com>

Makes sense.

Nit: please use PCI_VENDOR_ID_INTEL instead of 0x8086 below.

> ---
>  hw/device-assignment.c |   12 ++++++++++--
>  1 files changed, 10 insertions(+), 2 deletions(-)
> 
> diff --git a/hw/device-assignment.c b/hw/device-assignment.c
> index 288f80c..ed2a883 100644
> --- a/hw/device-assignment.c
> +++ b/hw/device-assignment.c
> @@ -1261,12 +1261,20 @@ static int assigned_device_pci_cap_init(PCIDevice *pci_dev)
>  
>      if ((pos = pci_find_cap_offset(pci_dev, PCI_CAP_ID_EXP, 0))) {
>          uint8_t version, size;
> -        uint16_t type, devctl, lnkcap, lnksta;
> +        uint16_t type, devctl, lnkcap, lnksta, vendor, device;
>          uint32_t devcap;
>  
> +        vendor = pci_get_word(pci_dev->config + PCI_VENDOR_ID);
> +        device = pci_get_word(pci_dev->config + PCI_DEVICE_ID);
>          version = pci_get_byte(pci_dev->config + pos + PCI_EXP_FLAGS);
>          version &= PCI_EXP_FLAGS_VERS;
> -        if (version == 1) {
> +        if (version == 0 && vendor == 0x8086 && device == 0x10ed) {

I'd also make version == 0 last test in the list
to stress the fact this is a device specific quirk,
but that's a matter of taste ...

> +            /* 
> +             * quirk for Intel 82599 VF with invalid PCIe capability version,
> +             * should really be version 2 (same as PF)
> +             */
> +            size = 0x3c;
> +        } else if (version == 1) {
>              size = 0x14;
>          } else if (version == 2) {
>              /*
> -- 
> 1.7.1

  parent reply	other threads:[~2011-10-02  9:55 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-09-29  0:20 [PATCH] qemu-kvm: device assignment: add 82599 PCIe Cap struct quirk Donald Dutile
2011-09-29  0:23 ` Chris Wright
2011-09-29  4:12 ` Alex Williamson
2011-10-02  9:56 ` Michael S. Tsirkin [this message]
2011-10-03 17:02   ` Don Dutile

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=20111002095634.GG29706@redhat.com \
    --to=mst@redhat.com \
    --cc=avi@redhat.com \
    --cc=chrisw@redhat.com \
    --cc=ddutile@redhat.com \
    --cc=kvm@vger.kernel.org \
    --cc=mtosatti@redhat.com \
    /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.