From: Damien Millescamps Date: Wed, 10 Jul 2013 13:14:52 +0000 (+0200) Subject: pci: add flag to force unbind device X-Git-Tag: spdx-start~10943 X-Git-Url: http://git.droids-corp.org/?a=commitdiff_plain;h=050a84b9afa8c52b8c5ee1fe87d6234ed2067dd4;p=dpdk.git pci: add flag to force unbind device Some devices need to be unbound in order to be used via the PMD without kernel module. Signed-off-by: Damien Millescamps Acked-by: Thomas Monjalon --- diff --git a/lib/librte_eal/common/include/rte_pci.h b/lib/librte_eal/common/include/rte_pci.h index af758777d9..9d4f94f9ea 100644 --- a/lib/librte_eal/common/include/rte_pci.h +++ b/lib/librte_eal/common/include/rte_pci.h @@ -192,6 +192,8 @@ struct rte_pci_driver { #define RTE_PCI_DRV_NEED_IGB_UIO 0x0001 /** Device driver must be registered several times until failure */ #define RTE_PCI_DRV_MULTIPLE 0x0002 +/** Device needs to be unbound even if no module is provided */ +#define RTE_PCI_DRV_FORCE_UNBIND 0x0004 /**< Internal use only - Macro used by pci addr parsing functions **/ #define GET_PCIADDR_FIELD(in, fd, lim, dlm) \ diff --git a/lib/librte_eal/linuxapp/eal/eal_pci.c b/lib/librte_eal/linuxapp/eal/eal_pci.c index 6001d326dc..074d7cf19e 100644 --- a/lib/librte_eal/linuxapp/eal/eal_pci.c +++ b/lib/librte_eal/linuxapp/eal/eal_pci.c @@ -974,10 +974,16 @@ rte_eal_pci_probe_one_driver(struct rte_pci_driver *dr, struct rte_pci_device *d } #ifdef RTE_EAL_UNBIND_PORTS - if (dr->drv_flags & RTE_PCI_DRV_NEED_IGB_UIO) + if (dr->drv_flags & RTE_PCI_DRV_NEED_IGB_UIO) { /* unbind driver and load uio resources for Intel NICs */ if (pci_switch_module(dr, dev, 1, IGB_UIO_NAME) < 0) return -1; + } else if (dr->drv_flags & RTE_PCI_DRV_FORCE_UNBIND && + rte_eal_process_type() == RTE_PROC_PRIMARY) { + /* unbind current driver */ + if (pci_unbind_kernel_driver(dev) < 0) + return -1; + } #else if (dr->drv_flags & RTE_PCI_DRV_NEED_IGB_UIO) /* just map resources for Intel NICs */