Hello list vfio-users, Can someone help me understand reason that why mmap of requested address overlaps with MSI-X table during mmap-ing of PCIe resources.
Platform : ARM64 architecture (Marvell OcteonTX2) Linux kernel: 4.14.76-22.0.0 aarch64, Page Size 64K Application : Userspace DPDK+SPDK doing mmap-ing of PCIe resources via pci_vfio_map_resource_primary( ) http://code.dpdk.org/dpdk/v19.11/source/lib/librte_pci/rte_pci.c#L140 mapaddr = mmap(0x202080040000, 0x3000, PROT_READ | PROT_WRITE, MAP_SHARED, 35, 0x0); Device 0003:0d:00.0 : Samsung SSD Failure: mapaddr returned is all 0xffffffffffffffff, errno is set to EINVAL EAL: pci_map_resource(): cannot mmap(36, 0x2020801e0000, 0x2000, 0x0): Invalid argument (0xffffffffffffffff) EAL: Failed to map pci BAR0 EAL: 0003:0d:00.0 mapping BAR0 failed: Invalid argument EAL: Requested device 0003:0d:00.0 cannot be used Cause from kernel mmap handler: EINVAL is returned by vfio_pci_mmap() in-kernel handler : https://elixir.bootlin.com/linux/v4.14.76/source/drivers/vfio/pci/vfio_pci .c#L1142 if (index == vdev->msix_bar) { /* * Disallow mmaps overlapping the MSI-X table; users don't * get to touch this directly. We could find somewhere * else to map the overlap, but page granularity is only * a recommendation, not a requirement, so the user needs * to know which bits are real. Requiring them to mmap * around the table makes that clear. */ /* If neither entirely above nor below, then it overlaps */ if (!(req_start >= vdev->msix_offset + vdev->msix_size || req_start + req_len <= vdev->msix_offset)) return -EINVAL; <=====================Hitting this } >From Debug prints: req_start = 0; vdev->msix_offset = 8192; vdev->msix_size=144; req_len=65536, vdev->msix_offset=8192; Can someone explain me how come this overlap situation is coming and how can I fix it. Thanks very much Vikas Aggarwal Sr. Principal Engineer Diamanti Inc www.diamanti.com _______________________________________________ vfio-users mailing list vfio-users@redhat.com https://www.redhat.com/mailman/listinfo/vfio-users