From: Eric Auger <[email protected]> No fucntional change intended.
Signed-off-by: Eric Auger <[email protected]> Signed-off-by: Yi Liu <[email protected]> Signed-off-by: Yi Sun <[email protected]> Signed-off-by: Zhenzhong Duan <[email protected]> --- include/hw/vfio/vfio-common.h | 6 ------ include/hw/vfio/vfio-container-base.h | 5 +++++ hw/vfio/common.c | 4 ++-- hw/vfio/container-base.c | 21 +++++++++++++++++++++ hw/vfio/container.c | 19 ++++++++++++++----- 5 files changed, 42 insertions(+), 13 deletions(-) diff --git a/include/hw/vfio/vfio-common.h b/include/hw/vfio/vfio-common.h index 33f475957c..b83ae4b3b6 100644 --- a/include/hw/vfio/vfio-common.h +++ b/include/hw/vfio/vfio-common.h @@ -199,12 +199,6 @@ int vfio_set_dirty_page_tracking(VFIOLegacyContainer *container, bool start); int vfio_query_dirty_bitmap(VFIOLegacyContainer *container, VFIOBitmap *vbmap, hwaddr iova, hwaddr size); -int vfio_container_add_section_window(VFIOLegacyContainer *container, - MemoryRegionSection *section, - Error **errp); -void vfio_container_del_section_window(VFIOLegacyContainer *container, - MemoryRegionSection *section); - void vfio_disable_irqindex(VFIODevice *vbasedev, int index); void vfio_unmask_single_irqindex(VFIODevice *vbasedev, int index); void vfio_mask_single_irqindex(VFIODevice *vbasedev, int index); diff --git a/include/hw/vfio/vfio-container-base.h b/include/hw/vfio/vfio-container-base.h index 9504564f4e..1f6d5fd229 100644 --- a/include/hw/vfio/vfio-container-base.h +++ b/include/hw/vfio/vfio-container-base.h @@ -69,6 +69,11 @@ int vfio_container_dma_map(VFIOContainer *bcontainer, int vfio_container_dma_unmap(VFIOContainer *bcontainer, hwaddr iova, ram_addr_t size, IOMMUTLBEntry *iotlb); +int vfio_container_add_section_window(VFIOContainer *bcontainer, + MemoryRegionSection *section, + Error **errp); +void vfio_container_del_section_window(VFIOContainer *bcontainer, + MemoryRegionSection *section); void vfio_container_init(VFIOContainer *bcontainer, VFIOAddressSpace *space, diff --git a/hw/vfio/common.c b/hw/vfio/common.c index c92af34eed..49cb5b6958 100644 --- a/hw/vfio/common.c +++ b/hw/vfio/common.c @@ -655,7 +655,7 @@ static void vfio_listener_region_add(MemoryListener *listener, return; } - if (vfio_container_add_section_window(container, section, &err)) { + if (vfio_container_add_section_window(bcontainer, section, &err)) { goto fail; } @@ -879,7 +879,7 @@ static void vfio_listener_region_del(MemoryListener *listener, memory_region_unref(section->mr); - vfio_container_del_section_window(container, section); + vfio_container_del_section_window(&container->bcontainer, section); } typedef struct VFIODirtyRanges { diff --git a/hw/vfio/container-base.c b/hw/vfio/container-base.c index e1056dd78e..f2a9a33465 100644 --- a/hw/vfio/container-base.c +++ b/hw/vfio/container-base.c @@ -48,6 +48,27 @@ int vfio_container_dma_unmap(VFIOContainer *bcontainer, return bcontainer->ops->dma_unmap(bcontainer, iova, size, iotlb); } +int vfio_container_add_section_window(VFIOContainer *bcontainer, + MemoryRegionSection *section, + Error **errp) +{ + if (!bcontainer->ops->add_window) { + return 0; + } + + return bcontainer->ops->add_window(bcontainer, section, errp); +} + +void vfio_container_del_section_window(VFIOContainer *bcontainer, + MemoryRegionSection *section) +{ + if (!bcontainer->ops->del_window) { + return; + } + + return bcontainer->ops->del_window(bcontainer, section); +} + void vfio_container_init(VFIOContainer *bcontainer, VFIOAddressSpace *space, struct VFIOIOMMUBackendOpsClass *ops) diff --git a/hw/vfio/container.c b/hw/vfio/container.c index fd2d602fb9..7ca61a7d36 100644 --- a/hw/vfio/container.c +++ b/hw/vfio/container.c @@ -215,10 +215,13 @@ static int vfio_legacy_dma_map(VFIOContainer *bcontainer, hwaddr iova, return -errno; } -int vfio_container_add_section_window(VFIOLegacyContainer *container, - MemoryRegionSection *section, - Error **errp) +static int vfio_legacy_add_section_window(VFIOContainer *bcontainer, + MemoryRegionSection *section, + Error **errp) { + VFIOLegacyContainer *container = container_of(bcontainer, + VFIOLegacyContainer, + bcontainer); VFIOHostDMAWindow *hostwin; hwaddr pgsize = 0; int ret; @@ -283,9 +286,13 @@ int vfio_container_add_section_window(VFIOLegacyContainer *container, return 0; } -void vfio_container_del_section_window(VFIOLegacyContainer *container, - MemoryRegionSection *section) +static void vfio_legacy_del_section_window(VFIOContainer *bcontainer, + MemoryRegionSection *section) { + VFIOLegacyContainer *container = container_of(bcontainer, + VFIOLegacyContainer, + bcontainer); + if (container->iommu_type != VFIO_SPAPR_TCE_v2_IOMMU) { return; } @@ -1174,6 +1181,8 @@ static void vfio_iommu_backend_legacy_ops_class_init(ObjectClass *oc, ops->dma_map = vfio_legacy_dma_map; ops->dma_unmap = vfio_legacy_dma_unmap; + ops->add_window = vfio_legacy_add_section_window; + ops->del_window = vfio_legacy_del_section_window; } static const TypeInfo vfio_iommu_backend_legacy_ops_type = { -- 2.34.1
