The dma-buf failure messages in vfio_region_create_dma_buf() say "PCI
BAR IOMMU mappings may fail", which suggests the BAR is broken. In
practice, only P2P DMA is affected -- normal passthrough uses the mmap
fallback.
Reword both messages to mention P2P DMA explicitly and clarify that
the mmap fallback is in use. Use warn_report_err_once() at the call
site so per-BAR repetition on mdev devices is suppressed.
Fixes: dcf1b77e834d ("hw/vfio/region: Create dmabuf for PCI BAR per region")
Cc: Nicolin Chen <[email protected]>
Reviewed-by: Philippe Mathieu-Daudé <[email protected]>
Signed-off-by: Cédric Le Goater <[email protected]>
---
hw/vfio/region.c | 11 +++++------
1 file changed, 5 insertions(+), 6 deletions(-)
diff --git a/hw/vfio/region.c b/hw/vfio/region.c
index
dbde3391802691888ca31d5e329aba5ba680feb4..54ad11a6c8ed8e04fa365262ccb8bd694bdb45f7
100644
--- a/hw/vfio/region.c
+++ b/hw/vfio/region.c
@@ -321,13 +321,12 @@ static bool vfio_region_create_dma_buf(VFIORegion
*region, Error **errp)
ret = vfio_device_get_feature(vbasedev, feature);
if (ret < 0) {
if (ret == -ENOTTY) {
- warn_report_once("VFIO dma-buf not supported in kernel: "
- "PCI BAR IOMMU mappings may fail");
+ warn_report_once("VFIO dma-buf not supported in kernel, "
+ "using mmap fallback, P2P DMA will not work");
return true;
}
- /* P2P DMA or exposing device memory use cases are not supported. */
- error_setg_errno(errp, -ret, "%s: failed to create dma-buf: "
- "PCI BAR IOMMU mappings may fail",
+ error_setg_errno(errp, -ret, "%s: dma-buf unavailable, "
+ "using mmap fallback, P2P DMA will not work",
memory_region_name(region->mem));
return false;
}
@@ -448,7 +447,7 @@ int vfio_region_mmap(VFIORegion *region)
}
if (!vfio_region_create_dma_buf(region, &local_err)) {
- error_report_err(local_err);
+ warn_report_err_once(local_err);
}
return 0;
--
2.55.0