memory_region_init_io(region->mem, obj, &vfio_region_ops, region, name, region->size); // vbasedev未被mmap,且该region支持mmap,所以对该region进行mmap if (!vbasedev->no_mmap && region->flags & VFIO_REGION_INFO_FLAG_MMAP) { // vfio_setup_region_sparse_mmaps => vfio_get_region_in...
->vfio_region_setup() ->vfio_get_region_info ->memory_region_init_io(vfio_region_ops) ->memory_region_init ->memory_region_do_init ->vfio_setup_region_sparse_mmaps ->vfio_get_region_info() ->ioctl(vdev->vbasedev.fd, VFIO_DEVICE_GET_IRQ_INFO, &irq_info) ->pread(vdev->vbasede...
591 if (IS_ENABLED(CONFIG_VFIO_PCI_MMAP) && 592 pci_resource_flags(pdev, info.index) & 593 IORESOURCE_MEM && info.size >= PAGE_SIZE) { 594 info.flags |= VFIO_REGION_INFO_FLAG_MMAP; 595 if (info.index == vdev->msix_bar) { 596 ret = msix_sparse_mmap_cap(vdev, &caps); 59...
sparse_mmap : NULL, region->nr_sparse_mmaps, region->fd, region->offset) copyin_mmap_areas(reg, mmap_areas, nr_mmap_areas) memcpy(reg_info->mmap_areas, mmap_areas, size) vfu_setup_device_dma(endpoint->vfu_ctx, tgt_memory_region_add_cb, tgt_memory_region_remove_cb) vfu_ctx->dma...
get_vendor_capability(endpoint, buf, 256, vendor_cap_idx) cap_offset = vfu_pci_add_capability(endpoint->vfu_ctx, 0, 0, vendor_cap) vfu_setup_region(endpoint->vfu_ctx, region_idx, region->len, region->access_cb, region->flags, region->nr_sparse_mmaps ? sparse_mmap : NULL, region-...