pci: use igb_uio mapping only when needed
Since DPDK 1.4, if RTE_EAL_UNBIND_PORTS is disabled, igb_uio mapping is done for all devices (commiteee16c964c
), breaking some non-Intel drivers. But 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 (fixes commita22f5ce8fc
). Signed-off-by: David Marchand <david.marchand@6wind.com> Signed-off-by: Thomas Monjalon <thomas.monjalon@6wind.com> Acked-by: Damien Millescamps <damien.millescamps@6wind.com>
This commit is contained in:
parent
1a40263998
commit
10ed99419b
@ -94,9 +94,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 = {
|
||||
|
@ -188,10 +188,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
|
||||
|
||||
|
@ -941,13 +941,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++) {
|
||||
|
||||
@ -981,14 +974,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 */
|
||||
|
@ -279,9 +279,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),
|
||||
|
@ -533,9 +533,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),
|
||||
@ -548,9 +546,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),
|
||||
|
@ -895,9 +895,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),
|
||||
@ -910,9 +908,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),
|
||||
|
Loading…
Reference in New Issue
Block a user