Do I miss something here? I want to allow RW access of a peripheral device to a memory region via

    struct vfio_iommu_type1_dma_map dma_map = { .argsz = sizeof(dma_map) };

    __u32* mem = (__u32*)mmap(NULL,size,PROT_READ|PROT_WRITE, MAP_SHARED|MAP_ANONYMOUS|MAP_LOCKED, -1, 0);

    dma_map.argsz = sizeof(dma_map);
    dma_map.flags = VFIO_DMA_MAP_FLAG_READ | VFIO_DMA_MAP_FLAG_WRITE;
    dma_map.vaddr = (__u64)mem;
    dma_map.iova  = 0;
    dma_map.size  = size;

    ioctl(container, VFIO_IOMMU_MAP_DMA, &dma_map);

Any idea why theVFIO_IOMMU_MAP_DMA ioctl fails with EINVAL, but then a second, identical call succeeds? Does it actually succeed then? QEMU re-tries if the first attempt fails with EBUSY, but not with EINVAL. The latest 4.15.7 kernel (4.15.6 too IIRC) does not recognize the AMD Ryzen 3 1200 as  VFIO_TYPE1_IOMMU so I am using version 4.15.4.

Thanks!

_______________________________________________
vfio-users mailing list
vfio-users@redhat.com
https://www.redhat.com/mailman/listinfo/vfio-users

Reply via email to