[dpdk-dev] [PATCH] pci:don't insert an unbound device to pci_device_list in pci_scan_one

Rugang Chen rugangchen2011 at gmail.com
Sat Jun 25 02:45:28 CEST 2016

If a device isn't bound by any uio driver (vfio-pci, igb_uio, uio_pci_generic)
and is expected to owned by a kernel space driver, here it's still inserted to

This may cause application based on dpdk fetch the device by accident and then
the device is hanlded by dpdk.

For safe, skip it from pci_device_list as if it's unbound, dpdk won't want to
use it.

Signed-off-by: Rugang Chen <rugangchen2011 at gmail.com>
 lib/librte_eal/linuxapp/eal/eal_pci.c | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/lib/librte_eal/linuxapp/eal/eal_pci.c b/lib/librte_eal/linuxapp/eal/eal_pci.c
index f9c3efd..f63febc 100644
--- a/lib/librte_eal/linuxapp/eal/eal_pci.c
+++ b/lib/librte_eal/linuxapp/eal/eal_pci.c
@@ -388,6 +388,12 @@ pci_scan_one(const char *dirname, uint16_t domain, uint8_t bus,
 	} else
 		dev->kdrv = RTE_KDRV_NONE;
+	/* Ignore device that isn't bound with any uio driver, then application won't
+	 * fetch it from pci_device_list by accident and then dpdk handles it. Kernel
+	 * space driver maybe wants to own it.
+	 */
+	if (dev->kdrv == RTE_KDRV_NONE)
+		return 0;
 	/* device is valid, add in list (sorted) */
 	if (TAILQ_EMPTY(&pci_device_list)) {
 		TAILQ_INSERT_TAIL(&pci_device_list, dev, next);

More information about the dev mailing list