On Mon, Feb 8, 2016 at 2:45 PM, Burakov, Anatoly <anatoly.burakov at intel.com> wrote: >> vfio_pci_mmap() try to map all pci bars. ioport region are not mapped in >> vfio/kernel so ignore mmaping for ioport. >> >> Signed-off-by: Santosh Shukla <sshukla at mvista.com> >> --- >> lib/librte_eal/linuxapp/eal/eal_pci_vfio.c | 20 ++++++++++++++++++++ >> 1 file changed, 20 insertions(+) >> >> diff --git a/lib/librte_eal/linuxapp/eal/eal_pci_vfio.c >> b/lib/librte_eal/linuxapp/eal/eal_pci_vfio.c >> index ffa2dd0..4832313 100644 >> --- a/lib/librte_eal/linuxapp/eal/eal_pci_vfio.c >> +++ b/lib/librte_eal/linuxapp/eal/eal_pci_vfio.c >> @@ -659,6 +659,7 @@ pci_vfio_map_resource(struct rte_pci_device *dev) >> struct pci_map *maps; >> uint32_t msix_table_offset = 0; >> uint32_t msix_table_size = 0; >> + uint32_t ioport_bar; >> >> dev->intr_handle.fd = -1; >> dev->intr_handle.type = RTE_INTR_HANDLE_UNKNOWN; @@ -853,6 >> +854,25 @@ pci_vfio_map_resource(struct rte_pci_device *dev) >> return -1; >> } >> >> + /* chk for io port region */ >> + ret = pread64(vfio_dev_fd, &ioport_bar, sizeof(ioport_bar), >> + >> VFIO_GET_REGION_ADDR(VFIO_PCI_CONFIG_REGION_INDEX) >> + + PCI_BASE_ADDRESS_0 + i*4); >> + >> + if (ret != sizeof(ioport_bar)) { >> + RTE_LOG(ERR, EAL, >> + "Cannot read command (%x) from config >> space!\n", >> + PCI_BASE_ADDRESS_0 + i*4); >> + return -1; >> + } >> + >> + if (ioport_bar & PCI_BASE_ADDRESS_SPACE_IO) { >> + RTE_LOG(INFO, EAL, >> + "Ignore mapping IO port bar(%d) addr: >> %x\n", >> + i, ioport_bar); >> + continue; >> + } >> + >> /* skip non-mmapable BARs */ >> if ((reg.flags & VFIO_REGION_INFO_FLAG_MMAP) == 0) >> continue; >> -- >> 1.7.9.5 > > Acked-by: Anatoly Burakov <anatoly.burakov at intel.com>
Merge request for this one too..