All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jan Kiszka <jan.kiszka@siemens.com>
To: Alex Williamson <alex.williamson@redhat.com>
Cc: "kvm@vger.kernel.org" <kvm@vger.kernel.org>,
	"avi@redhat.com" <avi@redhat.com>,
	"yongjie.ren@intel.com" <yongjie.ren@intel.com>
Subject: Re: [PATCH 2/2] pci-assign: Fix MSI-X registration
Date: Thu, 22 Sep 2011 11:04:02 +0200	[thread overview]
Message-ID: <4E7AFA02.5010409@siemens.com> (raw)
In-Reply-To: <20110922031242.4121.35090.stgit@s20.home>

On 2011-09-22 05:12, Alex Williamson wrote:
> Commit c4525754 added a capability check for KVM_CAP_DEVICE_MSIX,
> which is unfortunately not exposed, resulting in MSIX never
> being listed as a capability. 

Oops. Should we fix this nevertheless in the kernel?

> This breaks anything depending on
> MSIX, such as igbvf.  Since we can't specifically check for MSIX
> support and KVM_CAP_ASSIGN_DEV_IRQ indicates more than just MSI,
> let's just revert c4525754 and replace it with a sanity check that
> we need KVM_CAP_ASSIGN_DEV_IRQ if the device supports any kind of
> interrupt (which is still mostly paranoia).
> 
> Signed-off-by: Alex Williamson <alex.williamson@redhat.com>
> ---
> 
>  hw/device-assignment.c |   13 +++++++++----
>  1 files changed, 9 insertions(+), 4 deletions(-)
> 
> diff --git a/hw/device-assignment.c b/hw/device-assignment.c
> index 93913b3..b5bde68 100644
> --- a/hw/device-assignment.c
> +++ b/hw/device-assignment.c
> @@ -1189,8 +1189,7 @@ static int assigned_device_pci_cap_init(PCIDevice *pci_dev)
>  
>      /* Expose MSI capability
>       * MSI capability is the 1st capability in capability config */
> -    pos = pci_find_cap_offset(pci_dev, PCI_CAP_ID_MSI, 0);
> -    if (pos != 0 && kvm_check_extension(kvm_state, KVM_CAP_ASSIGN_DEV_IRQ)) {
> +    if ((pos = pci_find_cap_offset(pci_dev, PCI_CAP_ID_MSI, 0))) {
>          dev->cap.available |= ASSIGNED_DEVICE_CAP_MSI;
>          /* Only 32-bit/no-mask currently supported */
>          if ((ret = pci_add_capability(pci_dev, PCI_CAP_ID_MSI, pos, 10)) < 0) {
> @@ -1211,8 +1210,7 @@ static int assigned_device_pci_cap_init(PCIDevice *pci_dev)
>          pci_set_word(pci_dev->wmask + pos + PCI_MSI_DATA_32, 0xffff);
>      }
>      /* Expose MSI-X capability */
> -    pos = pci_find_cap_offset(pci_dev, PCI_CAP_ID_MSIX, 0);
> -    if (pos != 0 && kvm_check_extension(kvm_state, KVM_CAP_DEVICE_MSIX)) {
> +    if ((pos = pci_find_cap_offset(pci_dev, PCI_CAP_ID_MSIX, 0))) {
>          int bar_nr;
>          uint32_t msix_table_entry;
>  
> @@ -1606,6 +1604,13 @@ static int assigned_initfn(struct PCIDevice *pci_dev)
>      if (assigned_device_pci_cap_init(pci_dev) < 0)
>          goto out;
>  
> +    if (!kvm_check_extension(kvm_state, KVM_CAP_ASSIGN_DEV_IRQ) &&
> +        (dev->cap.available & ASSIGNED_DEVICE_CAP_MSIX ||
> +         dev->cap.available & ASSIGNED_DEVICE_CAP_MSI ||
> +         assigned_dev_pci_read_byte(pci_dev, PCI_INTERRUPT_PIN) != 0)) {
> +        goto out;
> +    }
> +

That's not equivalent as it needlessly prevents IRQ support in the
absence of KVM_CAP_ASSIGN_DEV_IRQ.

Let's just fix the core issue and replace the test for
KVM_CAP_DEVICE_MSIX with a test call of KVM_ASSIGN_SET_MSIX_NR, passing
in a NULL struct. If it returns -EFAULT, the IOCTL is known and MSIX is
supported.

Jan

-- 
Siemens AG, Corporate Technology, CT T DE IT 1
Corporate Competence Center Embedded Linux

  reply	other threads:[~2011-09-22  9:04 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-09-22  3:12 [PATCH 0/2] pci-assign: Fix MSI-X support Alex Williamson
2011-09-22  3:12 ` [PATCH 1/2] pci-assign: Re-order initfn for memory API Alex Williamson
2011-09-22  9:03   ` Jan Kiszka
2011-09-22  3:12 ` [PATCH 2/2] pci-assign: Fix MSI-X registration Alex Williamson
2011-09-22  9:04   ` Jan Kiszka [this message]
2011-10-10 13:55     ` Avi Kivity

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=4E7AFA02.5010409@siemens.com \
    --to=jan.kiszka@siemens.com \
    --cc=alex.williamson@redhat.com \
    --cc=avi@redhat.com \
    --cc=kvm@vger.kernel.org \
    --cc=yongjie.ren@intel.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.