> 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>

Reply via email to