When pci_map_resource() is failed, mapaddr will be MAP_FAILED. In this case, pci_map_addr should not be incremented. The patch fixes it. Also, fix below. - To shrink code, move close(). - Remove fail variable.
Signed-off-by: Tetsuya Mukawa <mukawa at igel.co.jp> --- lib/librte_eal/linuxapp/eal/eal_pci_uio.c | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/lib/librte_eal/linuxapp/eal/eal_pci_uio.c b/lib/librte_eal/linuxapp/eal/eal_pci_uio.c index 901f277..2741c62 100644 --- a/lib/librte_eal/linuxapp/eal/eal_pci_uio.c +++ b/lib/librte_eal/linuxapp/eal/eal_pci_uio.c @@ -337,7 +337,6 @@ pci_uio_map_resource(struct rte_pci_device *dev) maps = uio_res->maps; for (i = 0, map_idx = 0; i != PCI_MAX_RESOURCE; i++) { int fd; - int fail = 0; /* skip empty BAR */ phaddr = dev->mem_resource[i].phys_addr; @@ -371,18 +370,13 @@ pci_uio_map_resource(struct rte_pci_device *dev) mapaddr = pci_map_resource(pci_map_addr, fd, 0, (size_t)dev->mem_resource[i].len, 0); + close(fd); if (mapaddr == MAP_FAILED) - fail = 1; + goto fail1; pci_map_addr = RTE_PTR_ADD(mapaddr, (size_t)dev->mem_resource[i].len); - if (fail) { - close(fd); - goto fail1; - } - close(fd); - maps[map_idx].phaddr = dev->mem_resource[i].phys_addr; maps[map_idx].size = dev->mem_resource[i].len; maps[map_idx].addr = mapaddr; -- 1.9.1