When VFIO_PCI_MMAP is enabled for s390 in a future commit and the ISM device is passed-through to a KVM guest QEMU attempts to eagerly mmap() its BAR. This fails because the 256 TiB large BAR does not fit in the virtual map. Besides this issue mmap() of the ISM device's BAR is not useful either as even a partial mapping won't be usable from user-space without a vfio-pci variant driver. A previous commit ensures that pdev-> non_compliant_bars is set for ISM so use this to disallow mmap() with the expecation that mmap() of non-compliant BARs is not advisable in the general case either. Signed-off-by: Niklas Schnelle <schnelle@xxxxxxxxxxxxx> --- drivers/vfio/pci/vfio_pci_core.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/drivers/vfio/pci/vfio_pci_core.c b/drivers/vfio/pci/vfio_pci_core.c index 987c7921affa..0e9d46575776 100644 --- a/drivers/vfio/pci/vfio_pci_core.c +++ b/drivers/vfio/pci/vfio_pci_core.c @@ -128,10 +128,9 @@ static void vfio_pci_probe_mmaps(struct vfio_pci_core_device *vdev) /* * The PCI core shouldn't set up a resource with a - * type but zero size. But there may be bugs that - * cause us to do that. + * type but zero size or non-compliant BARs. */ - if (!resource_size(res)) + if (!resource_size(res) || vdev->pdev->non_compliant_bars) goto no_mmap; if (resource_size(res) >= PAGE_SIZE) { -- 2.40.1