Message ID | 20240607143905.765133-6-eric.auger@redhat.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | VIRTIO-IOMMU/VFIO: Fix host iommu geometry handling for hotplugged devices | expand |
>-----Original Message----- >From: Eric Auger <eric.auger@redhat.com> >Subject: [RFC v2 5/7] virtio-iommu: Remove the implementation of >iommu_set_iova_range > >Now that we use PCIIOMMUOps to convey information about usable IOVA >ranges we do not to implement the iommu_set_iova_ranges IOMMU MR >callback. > >Signed-off-by: Eric Auger <eric.auger@redhat.com> Reviewed-by: Zhenzhong Duan <zhenzhong.duan@intel.com> Thanks Zhenzhong >--- > hw/virtio/virtio-iommu.c | 67 ---------------------------------------- > 1 file changed, 67 deletions(-) > >diff --git a/hw/virtio/virtio-iommu.c b/hw/virtio/virtio-iommu.c >index 33e9682b83..643bbb060b 100644 >--- a/hw/virtio/virtio-iommu.c >+++ b/hw/virtio/virtio-iommu.c >@@ -1360,72 +1360,6 @@ static int >virtio_iommu_set_page_size_mask(IOMMUMemoryRegion *mr, > return 0; > } > >-/** >- * virtio_iommu_set_iova_ranges: Conveys the usable IOVA ranges >- * >- * The function turns those into reserved ranges. Once some >- * reserved ranges have been set, new reserved regions cannot be >- * added outside of the original ones. >- * >- * @mr: IOMMU MR >- * @iova_ranges: list of usable IOVA ranges >- * @errp: error handle >- */ >-static int virtio_iommu_set_iova_ranges(IOMMUMemoryRegion *mr, >- GList *iova_ranges, >- Error **errp) >-{ >- IOMMUDevice *sdev = container_of(mr, IOMMUDevice, iommu_mr); >- GList *current_ranges = sdev->host_resv_ranges; >- GList *l, *tmp, *new_ranges = NULL; >- int ret = -EINVAL; >- >- /* check that each new resv region is included in an existing one */ >- if (sdev->host_resv_ranges) { >- range_inverse_array(iova_ranges, >- &new_ranges, >- 0, UINT64_MAX); >- >- for (tmp = new_ranges; tmp; tmp = tmp->next) { >- Range *newr = (Range *)tmp->data; >- bool included = false; >- >- for (l = current_ranges; l; l = l->next) { >- Range * r = (Range *)l->data; >- >- if (range_contains_range(r, newr)) { >- included = true; >- break; >- } >- } >- if (!included) { >- goto error; >- } >- } >- /* all new reserved ranges are included in existing ones */ >- ret = 0; >- goto out; >- } >- >- if (sdev->probe_done) { >- warn_report("%s: Notified about new host reserved regions after >probe", >- mr->parent_obj.name); >- } >- >- range_inverse_array(iova_ranges, >- &sdev->host_resv_ranges, >- 0, UINT64_MAX); >- rebuild_resv_regions(sdev); >- >- return 0; >-error: >- error_setg(errp, "IOMMU mr=%s Conflicting host reserved ranges set!", >- mr->parent_obj.name); >-out: >- g_list_free_full(new_ranges, g_free); >- return ret; >-} >- > static void virtio_iommu_system_reset(void *opaque) > { > VirtIOIOMMU *s = opaque; >@@ -1751,7 +1685,6 @@ static void >virtio_iommu_memory_region_class_init(ObjectClass *klass, > imrc->replay = virtio_iommu_replay; > imrc->notify_flag_changed = virtio_iommu_notify_flag_changed; > imrc->iommu_set_page_size_mask = virtio_iommu_set_page_size_mask; >- imrc->iommu_set_iova_ranges = virtio_iommu_set_iova_ranges; > } > > static const TypeInfo virtio_iommu_info = { >-- >2.41.0
diff --git a/hw/virtio/virtio-iommu.c b/hw/virtio/virtio-iommu.c index 33e9682b83..643bbb060b 100644 --- a/hw/virtio/virtio-iommu.c +++ b/hw/virtio/virtio-iommu.c @@ -1360,72 +1360,6 @@ static int virtio_iommu_set_page_size_mask(IOMMUMemoryRegion *mr, return 0; } -/** - * virtio_iommu_set_iova_ranges: Conveys the usable IOVA ranges - * - * The function turns those into reserved ranges. Once some - * reserved ranges have been set, new reserved regions cannot be - * added outside of the original ones. - * - * @mr: IOMMU MR - * @iova_ranges: list of usable IOVA ranges - * @errp: error handle - */ -static int virtio_iommu_set_iova_ranges(IOMMUMemoryRegion *mr, - GList *iova_ranges, - Error **errp) -{ - IOMMUDevice *sdev = container_of(mr, IOMMUDevice, iommu_mr); - GList *current_ranges = sdev->host_resv_ranges; - GList *l, *tmp, *new_ranges = NULL; - int ret = -EINVAL; - - /* check that each new resv region is included in an existing one */ - if (sdev->host_resv_ranges) { - range_inverse_array(iova_ranges, - &new_ranges, - 0, UINT64_MAX); - - for (tmp = new_ranges; tmp; tmp = tmp->next) { - Range *newr = (Range *)tmp->data; - bool included = false; - - for (l = current_ranges; l; l = l->next) { - Range * r = (Range *)l->data; - - if (range_contains_range(r, newr)) { - included = true; - break; - } - } - if (!included) { - goto error; - } - } - /* all new reserved ranges are included in existing ones */ - ret = 0; - goto out; - } - - if (sdev->probe_done) { - warn_report("%s: Notified about new host reserved regions after probe", - mr->parent_obj.name); - } - - range_inverse_array(iova_ranges, - &sdev->host_resv_ranges, - 0, UINT64_MAX); - rebuild_resv_regions(sdev); - - return 0; -error: - error_setg(errp, "IOMMU mr=%s Conflicting host reserved ranges set!", - mr->parent_obj.name); -out: - g_list_free_full(new_ranges, g_free); - return ret; -} - static void virtio_iommu_system_reset(void *opaque) { VirtIOIOMMU *s = opaque; @@ -1751,7 +1685,6 @@ static void virtio_iommu_memory_region_class_init(ObjectClass *klass, imrc->replay = virtio_iommu_replay; imrc->notify_flag_changed = virtio_iommu_notify_flag_changed; imrc->iommu_set_page_size_mask = virtio_iommu_set_page_size_mask; - imrc->iommu_set_iova_ranges = virtio_iommu_set_iova_ranges; } static const TypeInfo virtio_iommu_info = {
Now that we use PCIIOMMUOps to convey information about usable IOVA ranges we do not to implement the iommu_set_iova_ranges IOMMU MR callback. Signed-off-by: Eric Auger <eric.auger@redhat.com> --- hw/virtio/virtio-iommu.c | 67 ---------------------------------------- 1 file changed, 67 deletions(-)