From: David Marchand <david.march...@6wind.com> There is no need to check for bars mapping, especially BAR0 is not required. If bars mapping failed, then pci_uio_map_resource will fail and we won't reach this check. So get rid of BAR0 check. Besides, pci_uio_map_resource should only be called for Intel devices. The flag RTE_PCI_DRV_NEED_IGB_UIO is set for all Intel devices, even when RTE_EAL_UNBIND_PORTS is disabled.
Signed-off-by: David Marchand <david.marchand at 6wind.com> Signed-off-by: Thomas Monjalon <thomas.monjalon at 6wind.com> --- app/test/test_pci.c | 2 -- lib/librte_eal/common/include/rte_pci.h | 2 -- lib/librte_eal/linuxapp/eal/eal_pci.c | 30 +++++++----------------------- lib/librte_pmd_e1000/em_ethdev.c | 2 -- lib/librte_pmd_e1000/igb_ethdev.c | 4 ---- lib/librte_pmd_ixgbe/ixgbe_ethdev.c | 4 ---- 6 files changed, 7 insertions(+), 37 deletions(-) diff --git a/app/test/test_pci.c b/app/test/test_pci.c index 30d3c9f..55f603d 100644 --- a/app/test/test_pci.c +++ b/app/test/test_pci.c @@ -95,9 +95,7 @@ struct rte_pci_driver my_driver = { .name = "test_driver", .devinit = my_driver_init, .id_table = my_driver_id, -#ifdef RTE_EAL_UNBIND_PORTS .drv_flags = RTE_PCI_DRV_NEED_IGB_UIO, -#endif }; struct rte_pci_driver my_driver2 = { diff --git a/lib/librte_eal/common/include/rte_pci.h b/lib/librte_eal/common/include/rte_pci.h index c3ff5b9..affaae0 100644 --- a/lib/librte_eal/common/include/rte_pci.h +++ b/lib/librte_eal/common/include/rte_pci.h @@ -184,10 +184,8 @@ struct rte_pci_driver { uint32_t drv_flags; /**< Flags contolling handling of device. */ }; -#ifdef RTE_EAL_UNBIND_PORTS /** Device needs igb_uio kernel module */ #define RTE_PCI_DRV_NEED_IGB_UIO 0x0001 -#endif /** 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 */ diff --git a/lib/librte_eal/linuxapp/eal/eal_pci.c b/lib/librte_eal/linuxapp/eal/eal_pci.c index eeb6cd7..998d5ba 100644 --- a/lib/librte_eal/linuxapp/eal/eal_pci.c +++ b/lib/librte_eal/linuxapp/eal/eal_pci.c @@ -913,13 +913,6 @@ int rte_eal_pci_probe_one_driver(struct rte_pci_driver *dr, struct rte_pci_device *dev) { struct rte_pci_id *id_table; -#ifdef RTE_EAL_UNBIND_PORTS - const char *module_name = NULL; - int uio_status = -1; - - if (dr->drv_flags & RTE_PCI_DRV_NEED_IGB_UIO) - module_name = IGB_UIO_NAME; -#endif for (id_table = dr->id_table ; id_table->vendor_id != 0; id_table++) { @@ -953,10 +946,10 @@ rte_eal_pci_probe_one_driver(struct rte_pci_driver *dr, struct rte_pci_device *d } #ifdef RTE_EAL_UNBIND_PORTS - /* Unbind PCI devices if needed */ - if (module_name != NULL) + /* Unbind Intel devices and load uio ressources */ + if (dr->drv_flags & RTE_PCI_DRV_NEED_IGB_UIO) { - if (pci_switch_module(dr, dev, uio_status, module_name) < 0) + if (pci_switch_module(dr, dev, 1, IGB_UIO_NAME) < 0) return -1; } else if (dr->drv_flags & RTE_PCI_DRV_FORCE_UNBIND && @@ -966,21 +959,12 @@ rte_eal_pci_probe_one_driver(struct rte_pci_driver *dr, struct rte_pci_device *d return -1; } #else - /* just map the NIC resources */ - if (pci_uio_map_resource(dev) < 0) - return -1; + /* just map the NIC resources for Intel devices */ + if (dr->drv_flags & RTE_PCI_DRV_NEED_IGB_UIO) + if (pci_uio_map_resource(dev) < 0) + return -1; #endif - /* We always should have BAR0 mapped */ - if (!(dr->drv_flags & RTE_PCI_DRV_FORCE_UNBIND) && - (rte_eal_process_type() == RTE_PROC_PRIMARY) && - dev->mem_resource[0].addr == NULL) { - RTE_LOG(ERR, EAL, - "%s(): BAR0 is not mapped\n", - __func__); - return (-1); - } - /* reference driver structure */ dev->driver = dr; diff --git a/lib/librte_pmd_e1000/em_ethdev.c b/lib/librte_pmd_e1000/em_ethdev.c index fc63557..4fccc1d 100644 --- a/lib/librte_pmd_e1000/em_ethdev.c +++ b/lib/librte_pmd_e1000/em_ethdev.c @@ -280,9 +280,7 @@ static struct eth_driver rte_em_pmd = { { .name = "rte_em_pmd", .id_table = pci_id_em_map, -#ifdef RTE_EAL_UNBIND_PORTS .drv_flags = RTE_PCI_DRV_NEED_IGB_UIO, -#endif }, .eth_dev_init = eth_em_dev_init, .dev_private_size = sizeof(struct e1000_adapter), diff --git a/lib/librte_pmd_e1000/igb_ethdev.c b/lib/librte_pmd_e1000/igb_ethdev.c index 85835f7..c4cdae9 100644 --- a/lib/librte_pmd_e1000/igb_ethdev.c +++ b/lib/librte_pmd_e1000/igb_ethdev.c @@ -522,9 +522,7 @@ static struct eth_driver rte_igb_pmd = { { .name = "rte_igb_pmd", .id_table = pci_id_igb_map, -#ifdef RTE_EAL_UNBIND_PORTS .drv_flags = RTE_PCI_DRV_NEED_IGB_UIO, -#endif }, .eth_dev_init = eth_igb_dev_init, .dev_private_size = sizeof(struct e1000_adapter), @@ -537,9 +535,7 @@ static struct eth_driver rte_igbvf_pmd = { { .name = "rte_igbvf_pmd", .id_table = pci_id_igbvf_map, -#ifdef RTE_EAL_UNBIND_PORTS .drv_flags = RTE_PCI_DRV_NEED_IGB_UIO, -#endif }, .eth_dev_init = eth_igbvf_dev_init, .dev_private_size = sizeof(struct e1000_adapter), diff --git a/lib/librte_pmd_ixgbe/ixgbe_ethdev.c b/lib/librte_pmd_ixgbe/ixgbe_ethdev.c index 516fed4..9235f9d 100644 --- a/lib/librte_pmd_ixgbe/ixgbe_ethdev.c +++ b/lib/librte_pmd_ixgbe/ixgbe_ethdev.c @@ -807,9 +807,7 @@ static struct eth_driver rte_ixgbe_pmd = { { .name = "rte_ixgbe_pmd", .id_table = pci_id_ixgbe_map, -#ifdef RTE_EAL_UNBIND_PORTS .drv_flags = RTE_PCI_DRV_NEED_IGB_UIO, -#endif }, .eth_dev_init = eth_ixgbe_dev_init, .dev_private_size = sizeof(struct ixgbe_adapter), @@ -822,9 +820,7 @@ static struct eth_driver rte_ixgbevf_pmd = { { .name = "rte_ixgbevf_pmd", .id_table = pci_id_ixgbevf_map, -#ifdef RTE_EAL_UNBIND_PORTS .drv_flags = RTE_PCI_DRV_NEED_IGB_UIO, -#endif }, .eth_dev_init = eth_ixgbevf_dev_init, .dev_private_size = sizeof(struct ixgbe_adapter), -- 1.7.10.4