From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932991AbbDOSGF (ORCPT ); Wed, 15 Apr 2015 14:06:05 -0400 Received: from mail-pd0-f182.google.com ([209.85.192.182]:34025 "EHLO mail-pd0-f182.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932899AbbDOSFx (ORCPT ); Wed, 15 Apr 2015 14:05:53 -0400 Date: Wed, 15 Apr 2015 09:59:34 -0700 From: Stephen Hemminger To: "Michael S. Tsirkin" , "Hans J. Koch" , Greg Kroah-Hartman Cc: kvm@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH] uio: add irq control support to uio_pci_generic Message-ID: <20150415095934.09966367@urahara> MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 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);