From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Michael S. Tsirkin" Subject: Re: [PATCH v2] uio/uio_pci_generic: don't fail probe if pdev->irq == NULL Date: Tue, 9 May 2017 15:02:37 +0300 Message-ID: <20170509145729-mutt-send-email-mst@kernel.org> References: <20170502142059.34452-1-james.r.harris@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Cc: kvm@vger.kernel.org, gregkh@linuxfoundation.org, keith.busch@intel.com, jonathan.derrick@intel.com To: Jim Harris Return-path: Received: from mx1.redhat.com ([209.132.183.28]:33324 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752016AbdEIMCu (ORCPT ); Tue, 9 May 2017 08:02:50 -0400 Content-Disposition: inline In-Reply-To: <20170502142059.34452-1-james.r.harris@intel.com> Sender: kvm-owner@vger.kernel.org List-ID: On Tue, May 02, 2017 at 07:20:59AM -0700, Jim Harris wrote: > Some userspace drivers and frameworks only poll and do not > require interrupts to be available and enabled on the > PCI device. So remove the requirement that an IRQ is > assigned. If an IRQ is not assigned and a userspace > driver tries to read()/write(), the generic uio > framework will just return -EIO. > > This allows binding uio_pci_generic to devices which > cannot get an IRQ assigned, such as an NVMe controller > behind Intel Volume Management Device (VMD), since VMD > does not support INTx interrupts. > > Signed-off-by: Jim Harris I'm still not sure why such a stub is useful, but it seems harmless. Acked-by: Michael S. Tsirkin > --- > drivers/uio/uio_pci_generic.c | 20 +++++++++----------- > 1 file changed, 9 insertions(+), 11 deletions(-) > > diff --git a/drivers/uio/uio_pci_generic.c b/drivers/uio/uio_pci_generic.c > index d0b508b68f3c..a56fdf972dbe 100644 > --- a/drivers/uio/uio_pci_generic.c > +++ b/drivers/uio/uio_pci_generic.c > @@ -66,14 +66,7 @@ static int probe(struct pci_dev *pdev, > return err; > } > > - if (!pdev->irq) { > - dev_warn(&pdev->dev, "No IRQ assigned to device: " > - "no support for interrupts?\n"); > - pci_disable_device(pdev); > - return -ENODEV; > - } > - > - if (!pci_intx_mask_supported(pdev)) { > + if (pdev->irq && !pci_intx_mask_supported(pdev)) { > err = -ENODEV; > goto err_verify; > } > @@ -86,10 +79,15 @@ static int probe(struct pci_dev *pdev, > > gdev->info.name = "uio_pci_generic"; > gdev->info.version = DRIVER_VERSION; > - gdev->info.irq = pdev->irq; > - gdev->info.irq_flags = IRQF_SHARED; > - gdev->info.handler = irqhandler; > gdev->pdev = pdev; > + if (pdev->irq) { > + gdev->info.irq = pdev->irq; > + gdev->info.irq_flags = IRQF_SHARED; > + gdev->info.handler = irqhandler; > + } else { > + dev_warn(&pdev->dev, "No IRQ assigned to device: " > + "no support for interrupts?\n"); > + } > > err = uio_register_device(&pdev->dev, &gdev->info); > if (err) > -- > 2.12.2