|
@@ -131,7 +131,7 @@ static int vfio_legacy_dma_unmap(VFIOContainerBase *bcontainer, hwaddr iova,
|
|
|
|
|
|
if (iotlb && vfio_devices_all_running_and_mig_active(container)) {
|
|
|
if (!vfio_devices_all_device_dirty_tracking(container) &&
|
|
|
- container->dirty_pages_supported) {
|
|
|
+ container->bcontainer.dirty_pages_supported) {
|
|
|
return vfio_dma_unmap_bitmap(container, iova, size, iotlb);
|
|
|
}
|
|
|
|
|
@@ -205,14 +205,17 @@ static int vfio_legacy_dma_map(VFIOContainerBase *bcontainer, hwaddr iova,
|
|
|
return -errno;
|
|
|
}
|
|
|
|
|
|
-int vfio_set_dirty_page_tracking(VFIOContainer *container, bool start)
|
|
|
+static int vfio_legacy_set_dirty_page_tracking(VFIOContainerBase *bcontainer,
|
|
|
+ bool start)
|
|
|
{
|
|
|
+ VFIOContainer *container = container_of(bcontainer, VFIOContainer,
|
|
|
+ bcontainer);
|
|
|
int ret;
|
|
|
struct vfio_iommu_type1_dirty_bitmap dirty = {
|
|
|
.argsz = sizeof(dirty),
|
|
|
};
|
|
|
|
|
|
- if (!container->dirty_pages_supported) {
|
|
|
+ if (!bcontainer->dirty_pages_supported) {
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
@@ -232,9 +235,12 @@ int vfio_set_dirty_page_tracking(VFIOContainer *container, bool start)
|
|
|
return ret;
|
|
|
}
|
|
|
|
|
|
-int vfio_query_dirty_bitmap(VFIOContainer *container, VFIOBitmap *vbmap,
|
|
|
- hwaddr iova, hwaddr size)
|
|
|
+static int vfio_legacy_query_dirty_bitmap(VFIOContainerBase *bcontainer,
|
|
|
+ VFIOBitmap *vbmap,
|
|
|
+ hwaddr iova, hwaddr size)
|
|
|
{
|
|
|
+ VFIOContainer *container = container_of(bcontainer, VFIOContainer,
|
|
|
+ bcontainer);
|
|
|
struct vfio_iommu_type1_dirty_bitmap *dbitmap;
|
|
|
struct vfio_iommu_type1_dirty_bitmap_get *range;
|
|
|
int ret;
|
|
@@ -461,7 +467,7 @@ static void vfio_get_iommu_info_migration(VFIOContainer *container,
|
|
|
* qemu_real_host_page_size to mark those dirty.
|
|
|
*/
|
|
|
if (cap_mig->pgsize_bitmap & qemu_real_host_page_size()) {
|
|
|
- container->dirty_pages_supported = true;
|
|
|
+ container->bcontainer.dirty_pages_supported = true;
|
|
|
container->max_dirty_bitmap_size = cap_mig->max_dirty_bitmap_size;
|
|
|
container->dirty_pgsizes = cap_mig->pgsize_bitmap;
|
|
|
}
|
|
@@ -553,7 +559,6 @@ static int vfio_connect_container(VFIOGroup *group, AddressSpace *as,
|
|
|
container = g_malloc0(sizeof(*container));
|
|
|
container->fd = fd;
|
|
|
container->error = NULL;
|
|
|
- container->dirty_pages_supported = false;
|
|
|
container->dma_max_mappings = 0;
|
|
|
container->iova_ranges = NULL;
|
|
|
QLIST_INIT(&container->vrdl_list);
|
|
@@ -937,4 +942,6 @@ void vfio_detach_device(VFIODevice *vbasedev)
|
|
|
const VFIOIOMMUOps vfio_legacy_ops = {
|
|
|
.dma_map = vfio_legacy_dma_map,
|
|
|
.dma_unmap = vfio_legacy_dma_unmap,
|
|
|
+ .set_dirty_page_tracking = vfio_legacy_set_dirty_page_tracking,
|
|
|
+ .query_dirty_bitmap = vfio_legacy_query_dirty_bitmap,
|
|
|
};
|