The patch fixes pci_scan_one() not to register same pci devices twice.

Signed-off-by: Tetsuya Mukawa <mukawa at igel.co.jp>
---
 lib/librte_eal/linuxapp/eal/eal_pci.c | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

diff --git a/lib/librte_eal/linuxapp/eal/eal_pci.c 
b/lib/librte_eal/linuxapp/eal/eal_pci.c
index d7293c7..85cdd27 100644
--- a/lib/librte_eal/linuxapp/eal/eal_pci.c
+++ b/lib/librte_eal/linuxapp/eal/eal_pci.c
@@ -292,14 +292,17 @@ pci_scan_one(const char *dirname, uint16_t domain, 
uint8_t bus,
        }
        else {
                struct rte_pci_device *dev2 = NULL;
+               int ret;

                TAILQ_FOREACH(dev2, &pci_device_list, next) {
-                       if (eal_compare_pci_addr(&dev->addr, &dev2->addr) != 0)
+                       ret = eal_compare_pci_addr(&dev->addr, &dev2->addr);
+                       if (ret > 0)
                                continue;
-                       else {
+                       else if (ret < 0) {
                                TAILQ_INSERT_BEFORE(dev2, dev, next);
                                return 0;
-                       }
+                       } else  /* already registered */
+                               return 0;
                }
                TAILQ_INSERT_TAIL(&pci_device_list, dev, next);
        }
-- 
1.9.1

Reply via email to