From mboxrd@z Thu Jan 1 00:00:00 1970 From: Alex Williamson Subject: Re: [PATCH 5/7] vfio: Use new interfaces for MSI/MSI-X enablement Date: Tue, 07 Jan 2014 11:34:13 -0700 Message-ID: <1389119653.3209.124.camel@bling.home> References: <1c2ab7cdd9f18f98ee86c73b182f4ee0697f7495.1389103215.git.agordeev@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 7bit Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, linux-pci@vger.kernel.org To: Alexander Gordeev Return-path: In-Reply-To: <1c2ab7cdd9f18f98ee86c73b182f4ee0697f7495.1389103215.git.agordeev@redhat.com> Sender: linux-pci-owner@vger.kernel.org List-Id: kvm.vger.kernel.org On Tue, 2014-01-07 at 19:05 +0100, Alexander Gordeev wrote: > This update also fixes a bug when deprecated pci_enable_msix() > and pci_enable_msi_block() functions return a positive return > value which indicats the number of interrupts that could have > been allocated rather than a successful allocation. The driver > misinterpreted this value and assumed MSI-X/MSIs are enabled, > although in fact it were not. No, the driver interpreted it correctly, which is why anything other than zero is handled as an error. This patch looks incorrect if the new interfaces follow the same return convention. Thanks, Alex > Signed-off-by: Alexander Gordeev > --- > drivers/vfio/pci/vfio_pci_intrs.c | 8 ++++---- > 1 files changed, 4 insertions(+), 4 deletions(-) > > diff --git a/drivers/vfio/pci/vfio_pci_intrs.c b/drivers/vfio/pci/vfio_pci_intrs.c > index 641bc87..66d1746 100644 > --- a/drivers/vfio/pci/vfio_pci_intrs.c > +++ b/drivers/vfio/pci/vfio_pci_intrs.c > @@ -482,15 +482,15 @@ static int vfio_msi_enable(struct vfio_pci_device *vdev, int nvec, bool msix) > for (i = 0; i < nvec; i++) > vdev->msix[i].entry = i; > > - ret = pci_enable_msix(pdev, vdev->msix, nvec); > - if (ret) { > + ret = pci_enable_msix_range(pdev, vdev->msix, nvec, nvec); > + if (ret < 0) { > kfree(vdev->msix); > kfree(vdev->ctx); > return ret; > } > } else { > - ret = pci_enable_msi_block(pdev, nvec); > - if (ret) { > + ret = pci_enable_msi_range(pdev, nvec, nvec); > + if (ret < 0) { > kfree(vdev->ctx); > return ret; > }