From mboxrd@z Thu Jan 1 00:00:00 1970 From: Stephen Hemminger Subject: [PATCH] uio: add irq control support to uio_pci_generic Date: Wed, 15 Apr 2015 09:59:34 -0700 Message-ID: <20150415095934.09966367@urahara> Mime-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Cc: kvm@vger.kernel.org, linux-kernel@vger.kernel.org To: "Michael S. Tsirkin" , "Hans J. Koch" , Greg Kroah-Hartman Return-path: Received: from mail-pa0-f52.google.com ([209.85.220.52]:34325 "EHLO mail-pa0-f52.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932905AbbDOSFx (ORCPT ); Wed, 15 Apr 2015 14:05:53 -0400 Received: by pacyx8 with SMTP id yx8so58996310pac.1 for ; Wed, 15 Apr 2015 11:05:53 -0700 (PDT) Sender: kvm-owner@vger.kernel.org List-ID: The driver already supported INTX interrupts but had no in kernel function to enable and disable them. It is possible for userspace to do this by accessing PCI config directly, but this racy and better handled by same mechanism that already exists in kernel. Signed-off-by: Stephen Hemminger --- a/drivers/uio/uio_pci_generic.c 2015-04-15 08:50:15.543900681 -0700 +++ b/drivers/uio/uio_pci_generic.c 2015-04-15 09:00:01.658609786 -0700 @@ -53,6 +53,18 @@ static irqreturn_t irqhandler(int irq, s return IRQ_HANDLED; } +static int irqcontrol(struct uio_info *info, s32 irq_on) +{ + struct uio_pci_generic_dev *gdev = to_uio_pci_generic_dev(info); + struct pci_dev *pdev = gdev->pdev; + + pci_cfg_access_lock(pdev); + pci_intx(pdev, irq_on); + pci_cfg_access_unlock(pdev); + + return 0; +} + static int probe(struct pci_dev *pdev, const struct pci_device_id *id) { @@ -89,6 +101,7 @@ static int probe(struct pci_dev *pdev, gdev->info.irq = pdev->irq; gdev->info.irq_flags = IRQF_SHARED; gdev->info.handler = irqhandler; + gdev->info.irqcontrol = irqcontrol; gdev->pdev = pdev; err = uio_register_device(&pdev->dev, &gdev->info);