Re: [PATCH v1] vfio/pci: Avoid mapping BARs for devices with non-mappable BARs
From: Farhan Ali
Date: Mon Aug 03 2026 - 12:44:39 EST
On 7/29/2026 2:50 PM, Alex Williamson wrote:
On Wed, 29 Jul 2026 14:32:45 -0700
Farhan Ali <alifm@xxxxxxxxxxxxx> wrote:
On 7/29/2026 1:36 PM, Alex Williamson wrote:Sorry, no, I'm not. I think we're conflating that the barmap is
On Wed, 29 Jul 2026 13:28:46 -0700Just to clarify, are you suggesting we expand this check to also avoid
Farhan Ali <alifm@xxxxxxxxxxxxx> wrote:
On 7/29/2026 12:41 PM, Matthew Rosato wrote:Also IO Port and sub-page MMIO BARs are things that do exist. Thanks,
On 7/29/26 2:11 PM, Farhan Ali wrote:AFAIU vfio_pci_probe_mmaps() is only called in
vfio_pci_core_map_bars() calls pci_iomap() to set up BAR resources, but notThis would work for the ISM case at least, but I wonder: should we check
all devices support having their BARs mapped by the CPU. The
non_mappable_bars flag indicates that a PCI device's BARs cannot be
accessed by the CPU. The ISM device on s390 is one such device. The BAR
size for an ISM device is 256 TiB, and attempting to map the BAR will lead
to warnings:
vmalloc_node_range for size 281474976714752 failed: Address range
restricted to 0x2110bab00000 - 0x21903ab00000
Use pdev->non_mappable_bars to skip pci_iomap() for such devices. This flag
is set by the PCI core at enumeration time and already serves the same
purpose in vfio_pci_probe_mmaps().
Fixes: 05f2a68b407a ("vfio/pci: Set up BAR resources and maps in vfio_pci_core_enable()")
Reported-by: Christian Borntraeger <borntraeger@xxxxxxxxxxxxx>
Signed-off-by: Farhan Ali <alifm@xxxxxxxxxxxxx>
---
drivers/vfio/pci/vfio_pci_core.c | 3 +++
1 file changed, 3 insertions(+)
diff --git a/drivers/vfio/pci/vfio_pci_core.c b/drivers/vfio/pci/vfio_pci_core.c
index 3f11a9624b9c..6a184588ff23 100644
--- a/drivers/vfio/pci/vfio_pci_core.c
+++ b/drivers/vfio/pci/vfio_pci_core.c
@@ -554,6 +554,9 @@ static void vfio_pci_core_map_bars(struct vfio_pci_core_device *vdev)
vdev->barmap[bar] = IOMEM_ERR_PTR(-ENODEV);
+ if (pdev->non_mappable_bars)
+ continue;
+
vdev->bar_mmap_supported[bar] instead?
My question boils down to: do we still want messages for some of the
cases where we set vdev->bar_mmap_supported[bar] = false in
vfio_pci_probe_mmaps()?
vfio_pci_core_finish_enable(). Since vfio_pci_core_map_bars() is called
in vfio_pci_core_enable(), and before vfio_pci_core_finish_enable(),
bar_mmap_supported would be false here for all devices. So I don't think
it would work here, unless I missed something?
mapping IO port and sub-page MMIO BARs?
related to mmap access. The barmap itself is holding the iomap of the
BAR, used for read/write. The only real relation to the mmap is that
we request the resource via this path as well.
Therefore not only is the ordering of setting up bar_mmap_supported
wrong, it's flagging entirely the wrong thing here and keying on it
would entirely break IO port and sub-page MMIO BAR access. Thanks,
Alex
Hi Alex,
I wanted some guidance on how we should proceed with this patch? The warning messages are a regression on s390 for ISM devices, so we would like to fix it.
Thanks
Farhan