#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) \
}
#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 */