qemu-devel
[Top][All Lists]
Advanced

[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)
>>   {
>




reply via email to

[Prev in Thread] Current Thread [Next in Thread]