aboutsummaryrefslogtreecommitdiffstats
path: root/src/vlib/linux/vfio.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/vlib/linux/vfio.c')
-rw-r--r--src/vlib/linux/vfio.c24
1 files changed, 21 insertions, 3 deletions
diff --git a/src/vlib/linux/vfio.c b/src/vlib/linux/vfio.c
index 956b4ab2e48..53eed8bfbe9 100644
--- a/src/vlib/linux/vfio.c
+++ b/src/vlib/linux/vfio.c
@@ -38,6 +38,7 @@ static int
map_regions (vlib_main_t * vm, int fd)
{
vlib_physmem_main_t *vpm = &physmem_main;
+ linux_vfio_main_t *lvm = &vfio_main;
vlib_physmem_region_t *pr;
struct vfio_iommu_type1_dma_map dm = { 0 };
int i;
@@ -54,8 +55,17 @@ map_regions (vlib_main_t * vm, int fd)
dm.vaddr = pointer_to_uword (pr->mem) + (i << pr->log2_page_size);
dm.size = 1 << pr->log2_page_size;
dm.iova = dm.vaddr;
+ vlib_log_debug (lvm->log_default, "map DMA va:0x%lx iova:%lx "
+ "size:0x%lx", dm.vaddr, dm.iova, dm.size);
+
if ((rv = ioctl (fd, VFIO_IOMMU_MAP_DMA, &dm)))
- return rv;
+ {
+ vlib_log_err (lvm->log_default, "map DMA va:0x%lx iova:%lx "
+ "size:0x%lx failed, error %s (errno %d)",
+ dm.vaddr, dm.iova, dm.size, strerror (errno),
+ errno);
+ return rv;
+ }
}
});
/* *INDENT-ON* */
@@ -220,6 +230,8 @@ linux_vfio_init (vlib_main_t * vm)
linux_vfio_main_t *lvm = &vfio_main;
int fd;
+ lvm->log_default = vlib_log_register_class ("vfio", 0);
+
fd = open ("/dev/vfio/vfio", O_RDWR);
/* check if iommu is available */
@@ -233,9 +245,15 @@ linux_vfio_init (vlib_main_t * vm)
else
{
if (ioctl (fd, VFIO_CHECK_EXTENSION, VFIO_TYPE1_IOMMU) == 1)
- lvm->flags |= LINUX_VFIO_F_HAVE_IOMMU;
+ {
+ lvm->flags |= LINUX_VFIO_F_HAVE_IOMMU;
+ vlib_log_info (lvm->log_default, "type 1 IOMMU mode supported");
+ }
if (ioctl (fd, VFIO_CHECK_EXTENSION, VFIO_NOIOMMU_IOMMU) == 1)
- lvm->flags |= LINUX_VFIO_F_HAVE_NOIOMMU;
+ {
+ lvm->flags |= LINUX_VFIO_F_HAVE_NOIOMMU;
+ vlib_log_info (lvm->log_default, "NOIOMMU mode supported");
+ }
}
}