> The offset of the 2nd mmap() when mapping the region after msix_bar > needs to take region address into consideration as mmap() takes address > that is resource-relative instead of bar-relative. This is exposed when > binding vmxnet3 to vfio-pci. > > Fixes: 90a1633b2347 ("eal/linux: allow to map BARs with MSI-X tables") > > Signed-off-by: Yong Wang <yongwang at vmware.com> > Signed-off-by: Ronghua Zhang <rzhang at vmware.com> > --- > v2: > * Addressed review comment from Dan > > lib/librte_eal/linuxapp/eal/eal_pci_vfio.c | 5 +++-- > 1 file changed, 3 insertions(+), 2 deletions(-) > > diff --git a/lib/librte_eal/linuxapp/eal/eal_pci_vfio.c > b/lib/librte_eal/linuxapp/eal/eal_pci_vfio.c > index 46cd683..bf7cf61 100644 > --- a/lib/librte_eal/linuxapp/eal/eal_pci_vfio.c > +++ b/lib/librte_eal/linuxapp/eal/eal_pci_vfio.c > @@ -431,7 +431,7 @@ pci_vfio_map_resource(struct rte_pci_device *dev) > } else { > memreg[0].offset = reg.offset; > memreg[0].size = table_start; > - memreg[1].offset = table_end; > + memreg[1].offset = reg.offset + table_end; > memreg[1].size = reg.size - table_end; > > RTE_LOG(DEBUG, EAL, > @@ -474,7 +474,8 @@ pci_vfio_map_resource(struct rte_pci_device *dev) > /* if there's a second part, try to map it */ > if (map_addr != MAP_FAILED > && memreg[1].offset && memreg[1].size) { > - void *second_addr = > RTE_PTR_ADD(bar_addr, memreg[1].offset); > + void *second_addr = > RTE_PTR_ADD(bar_addr, > + > memreg[1].offset - reg.offset); > map_addr = > pci_map_resource(second_addr, > vfio_dev_fd, > memreg[1].offset, > memreg[1].size, > -- > 1.9.1
Thomas, I guess we can put it in? It doesn't affect anything outside the stated use case, and code wise there's nothing preventing this from being merged either. I've done cursory testing with an ixgbe device just in case, nothing exploded. So, Acked-by: Anatoly Burakov <anatoly.burakov at intel.com>