[dpdk-dev] [PATCH v2 2/2] pci: use igb_uio mapping only when needed

Thomas Monjalon thomas.monjalon at 6wind.com
Tue Sep 17 12:21:10 CEST 2013


pci_uio_map_resource() should only be called for Intel devices
(using igb_uio kernel module).
The flag RTE_PCI_DRV_NEED_IGB_UIO is set for all those devices, even when
RTE_EAL_UNBIND_PORTS is disabled.

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   |   20 +++++++-------------
 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(+), 27 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 1314d20..3cfce1b 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
 
diff --git a/lib/librte_eal/linuxapp/eal/eal_pci.c b/lib/librte_eal/linuxapp/eal/eal_pci.c
index 3913c65..ec6a7e2 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,14 +946,15 @@ 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)
-			if (pci_switch_module(dr, dev, uio_status, module_name) < 0)
+		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
-		/* just map the NIC resources */
-		if (pci_uio_map_resource(dev) < 0)
-			return -1;
+		if (dr->drv_flags & RTE_PCI_DRV_NEED_IGB_UIO)
+			/* just map resources for Intel NICs */
+			if (pci_uio_map_resource(dev) < 0)
+				return -1;
 #endif
 
 		/* reference driver structure */
diff --git a/lib/librte_pmd_e1000/em_ethdev.c b/lib/librte_pmd_e1000/em_ethdev.c
index 9c6ff20..103c9cf 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 14bdc2b..89709f6 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 e26d5b9..d90cd92 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



More information about the dev mailing list