mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-04 00:03:54 -06:00
vfio/common: Move vfio_host_win_add/del into spapr.c
Only spapr supports a customed host window list, other vfio driver assume 64bit host window. So remove the check in listener callback and move vfio_host_win_add/del into spapr.c and make it static. With the check removed, we still need to do the same check for VFIO_SPAPR_TCE_IOMMU which allows a single host window range [dma32_window_start, dma32_window_size). Move vfio_find_hostwin into spapr.c and do same check in vfio_container_add_section_window instead. When mapping a ram device section, if it's unaligned with hostwin->iova_pgsizes, this mapping is bypassed. With hostwin moved into spapr, we changed to check container->pgsizes. Suggested-by: Alex Williamson <alex.williamson@redhat.com> Signed-off-by: Zhenzhong Duan <zhenzhong.duan@intel.com> Reviewed-by: Cédric Le Goater <clg@redhat.com> Signed-off-by: Cédric Le Goater <clg@redhat.com>
This commit is contained in:
parent
a17879f0e2
commit
a2347c60a8
4 changed files with 85 additions and 89 deletions
|
@ -551,7 +551,6 @@ static int vfio_connect_container(VFIOGroup *group, AddressSpace *as,
|
|||
container->dma_max_mappings = 0;
|
||||
container->iova_ranges = NULL;
|
||||
QLIST_INIT(&container->giommu_list);
|
||||
QLIST_INIT(&container->hostwin_list);
|
||||
QLIST_INIT(&container->vrdl_list);
|
||||
|
||||
ret = vfio_init_container(container, group->fd, errp);
|
||||
|
@ -591,14 +590,6 @@ static int vfio_connect_container(VFIOGroup *group, AddressSpace *as,
|
|||
|
||||
vfio_get_iommu_info_migration(container, info);
|
||||
g_free(info);
|
||||
|
||||
/*
|
||||
* FIXME: We should parse VFIO_IOMMU_TYPE1_INFO_CAP_IOVA_RANGE
|
||||
* information to get the actual window extent rather than assume
|
||||
* a 64-bit IOVA address space.
|
||||
*/
|
||||
vfio_host_win_add(container, 0, (hwaddr)-1, container->pgsizes);
|
||||
|
||||
break;
|
||||
}
|
||||
case VFIO_SPAPR_TCE_v2_IOMMU:
|
||||
|
@ -687,7 +678,6 @@ static void vfio_disconnect_container(VFIOGroup *group)
|
|||
if (QLIST_EMPTY(&container->group_list)) {
|
||||
VFIOAddressSpace *space = container->space;
|
||||
VFIOGuestIOMMU *giommu, *tmp;
|
||||
VFIOHostDMAWindow *hostwin, *next;
|
||||
|
||||
QLIST_REMOVE(container, next);
|
||||
|
||||
|
@ -698,12 +688,6 @@ static void vfio_disconnect_container(VFIOGroup *group)
|
|||
g_free(giommu);
|
||||
}
|
||||
|
||||
QLIST_FOREACH_SAFE(hostwin, &container->hostwin_list, hostwin_next,
|
||||
next) {
|
||||
QLIST_REMOVE(hostwin, hostwin_next);
|
||||
g_free(hostwin);
|
||||
}
|
||||
|
||||
trace_vfio_disconnect_container(container->fd);
|
||||
close(container->fd);
|
||||
vfio_free_container(container);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue