From mboxrd@z Thu Jan 1 00:00:00 1970 From: Gregory Etelson Subject: [PATCH] igb_uio: reset PCI function on process exit Date: Tue, 06 Jun 2017 09:03:55 +0300 Message-ID: <3336123.hs2y1kGb2P@polaris> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7Bit To: dev@dpdk.org, "Yigit, Ferruh" , "Tan, Jianfeng" , Shijith Thotton , Stephen Hemminger , Qi Zhang Return-path: Received: from mail-wm0-f44.google.com (mail-wm0-f44.google.com [74.125.82.44]) by dpdk.org (Postfix) with ESMTP id 3154A5A3E for ; Tue, 6 Jun 2017 08:03:58 +0200 (CEST) Received: by mail-wm0-f44.google.com with SMTP id x70so28709307wme.0 for ; Mon, 05 Jun 2017 23:03:58 -0700 (PDT) List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" re-bind PCI function to igb_uio after process termination tested adapters: Intel 10G, Intel 40G known issues: ENA adapters on AWS I3 instances fail to reset PCI function Signed-off-by: Gregory Etelson --- lib/librte_eal/linuxapp/igb_uio/igb_uio.c | 12 ++++++++++++ 1 files changed, 12 insertions(+), 0 deletions(-) diff --git a/lib/librte_eal/linuxapp/igb_uio/igb_uio.c b/lib/librte_eal/linuxapp/igb_uio/igb_uio.c index b9d427c..f09ca0d 100644 --- a/lib/librte_eal/linuxapp/igb_uio/igb_uio.c +++ b/lib/librte_eal/linuxapp/igb_uio/igb_uio.c @@ -317,6 +317,17 @@ struct rte_uio_pci_dev { return (iom != 0 || iop != 0) ? ret : -ENOENT; } +static int +igbuio_pci_release(struct uio_info *info, struct inode *inode) +{ + struct rte_uio_pci_dev *udev = info->priv; + struct pci_dev *dev = udev->pdev; + + int ret = __pci_reset_function(dev); + dev_info(&udev->pdev->dev, "PCI reset %s\n", !ret ? "done" : "failed"); + return 0; +} + #if LINUX_VERSION_CODE < KERNEL_VERSION(3, 8, 0) static int __devinit #else @@ -372,6 +383,7 @@ struct rte_uio_pci_dev { udev->info.version = "0.1"; udev->info.handler = igbuio_pci_irqhandler; udev->info.irqcontrol = igbuio_pci_irqcontrol; + udev->info.release = igbuio_pci_release; #ifdef CONFIG_XEN_DOM0 /* check if the driver run on Xen Dom0 */ if (xen_initial_domain()) -- 1.7.1