[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH v2 02/12] memory: Introduce memory_region_iommu_set_iova_rang
From: |
Eric Auger |
Subject: |
Re: [PATCH v2 02/12] memory: Introduce memory_region_iommu_set_iova_ranges |
Date: |
Wed, 20 Sep 2023 09:40:22 +0200 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.13.0 |
Hi Cedric,
On 9/13/23 14:43, Cédric Le Goater wrote:
> On 9/13/23 10:01, Eric Auger wrote:
>> This helper will allow to convey information about valid
>> IOVA ranges to virtual IOMMUS.
>>
>> Signed-off-by: Eric Auger <eric.auger@redhat.com>
>
>
> Reviewed-by: Cédric Le Goater <clg@redhat.com>
Thanks!
Eric
>
> Thanks,
>
> C.
>
>> ---
>> include/exec/memory.h | 26 ++++++++++++++++++++++++++
>> softmmu/memory.c | 15 +++++++++++++++
>> 2 files changed, 41 insertions(+)
>>
>> diff --git a/include/exec/memory.h b/include/exec/memory.h
>> index 184cb3a01b..f6fb99dd3f 100644
>> --- a/include/exec/memory.h
>> +++ b/include/exec/memory.h
>> @@ -519,6 +519,27 @@ struct IOMMUMemoryRegionClass {
>> int (*iommu_set_page_size_mask)(IOMMUMemoryRegion *iommu,
>> uint64_t page_size_mask,
>> Error **errp);
>> + /**
>> + * @iommu_set_iova_ranges:
>> + *
>> + * Propagate information about the usable IOVA ranges for a
>> given IOMMU
>> + * memory region. Used for example to propagate host physical
>> device
>> + * reserved memory region constraints to the virtual IOMMU.
>> + *
>> + * Optional method: if this method is not provided, then the
>> default IOVA
>> + * aperture is used.
>> + *
>> + * @nr_ranges: number of IOVA ranges
>> + *
>> + * @iova_ranges: an array of @nr_ranges usable IOVA ranges
>> + *
>> + * Returns 0 on success, or a negative error. In case of
>> failure, the error
>> + * object must be created.
>> + */
>> + int (*iommu_set_iova_ranges)(IOMMUMemoryRegion *iommu,
>> + uint32_t nr_ranges,
>> + struct Range *iova_ranges,
>> + Error **errp);
>> };
>> typedef struct RamDiscardListener RamDiscardListener;
>> @@ -1845,6 +1866,11 @@ int
>> memory_region_iommu_set_page_size_mask(IOMMUMemoryRegion *iommu_mr,
>> uint64_t page_size_mask,
>> Error **errp);
>> +int memory_region_iommu_set_iova_ranges(IOMMUMemoryRegion *iommu,
>> + uint32_t nr_ranges,
>> + struct Range *iova_ranges,
>> + Error **errp);
>> +
>> /**
>> * memory_region_name: get a memory region's name
>> *
>> diff --git a/softmmu/memory.c b/softmmu/memory.c
>> index 7d9494ce70..07499457aa 100644
>> --- a/softmmu/memory.c
>> +++ b/softmmu/memory.c
>> @@ -1905,6 +1905,21 @@ int
>> memory_region_iommu_set_page_size_mask(IOMMUMemoryRegion *iommu_mr,
>> return ret;
>> }
>> +int memory_region_iommu_set_iova_ranges(IOMMUMemoryRegion *iommu_mr,
>> + uint32_t nr_ranges,
>> + struct Range *iova_ranges,
>> + Error **errp)
>> +{
>> + IOMMUMemoryRegionClass *imrc =
>> IOMMU_MEMORY_REGION_GET_CLASS(iommu_mr);
>> + int ret = 0;
>> +
>> + if (imrc->iommu_set_iova_ranges) {
>> + ret = imrc->iommu_set_iova_ranges(iommu_mr, nr_ranges,
>> + iova_ranges, errp);
>> + }
>> + return ret;
>> +}
>> +
>> int memory_region_register_iommu_notifier(MemoryRegion *mr,
>> IOMMUNotifier *n, Error
>> **errp)
>> {
>
- [PATCH v2 00/12] VIRTIO-IOMMU/VFIO: Don't assume 64b IOVA space, Eric Auger, 2023/09/13
- [PATCH v2 01/12] memory: Let ReservedRegion use Range, Eric Auger, 2023/09/13
- [PATCH v2 02/12] memory: Introduce memory_region_iommu_set_iova_ranges, Eric Auger, 2023/09/13
- [PATCH v2 03/12] vfio: Collect container iova range info, Eric Auger, 2023/09/13
- [PATCH v2 04/12] virtio-iommu: Rename reserved_regions into prop_resv_regions, Eric Auger, 2023/09/13
- [PATCH v2 05/12] virtio-iommu: Introduce per IOMMUDevice reserved regions, Eric Auger, 2023/09/13