On 4/15/26 12:55 PM, Shameer Kolothum wrote: > Some RAM device regions created with memory_region_init_ram_device_ptr() > are not intended to be P2P DMA targets. > > The VFIO listener currently treats all RAM device regions as DMA > capable and attempts to map them into the IOMMU. For regions without > dma-buf backing this fails and prints warnings such as: > > IOMMU_IOAS_MAP failed: Bad address, PCI BAR? > > Introduce a MemoryRegion flag (ram_device_skip_iommu_map) to mark RAM > device regions that should not be IOMMU mapped. When set, the VFIO > listener skips DMA mapping for that region. > > Signed-off-by: Shameer Kolothum <[email protected]> > --- > include/system/memory.h | 2 ++ > hw/vfio/listener.c | 5 +++++ > 2 files changed, 7 insertions(+) > > diff --git a/include/system/memory.h b/include/system/memory.h > index 7aed255e81..9df15e833a 100644 > --- a/include/system/memory.h > +++ b/include/system/memory.h > @@ -864,6 +864,8 @@ struct MemoryRegion { > > /* For devices designed to perform re-entrant IO into their own IO MRs */ > bool disable_reentrancy_guard; > + /* RAM device region that does not require IOMMU mapping for P2P */ > + bool ram_device_skip_iommu_map; > }; > > struct IOMMUMemoryRegion { > diff --git a/hw/vfio/listener.c b/hw/vfio/listener.c > index 960da9e0a9..32d33a740a 100644 > --- a/hw/vfio/listener.c > +++ b/hw/vfio/listener.c > @@ -614,6 +614,11 @@ void vfio_container_region_add(VFIOContainer *bcontainer, > } > } > > + if (memory_region_is_ram_device(section->mr) && > + section->mr->ram_device_skip_iommu_map) { nit might be better the create an accessor including both checks like memory_region_is_protected Thanks Eric > + return; > + } > + > ret = vfio_container_dma_map(bcontainer, iova, int128_get64(llsize), > vaddr, section->readonly, section->mr); > if (ret) {
