On 30/05/2023 22:39, Philippe Mathieu-Daudé wrote:
> On 30/5/23 19:59, Joao Martins wrote:
>> Relax the vIOMMU migration blocker when the underlying IOMMU reports that
>> DMA translation disabled. When it is disabled there will be no DMA mappings
>> via the vIOMMU and the guest only uses it for Interrupt Remapping.
>>
>> The latter is done via the vfio_viommu_preset() return value whereby in
>> addition to validating that the address space is memory, we also check
>> whether the IOMMU MR has DMA translation on.
> 
>> Assume it is enabled if
>> there's no IOMMU MR or if no dma-translation property is supported.
> 
> This comment ^ ...
> 
>> Signed-off-by: Joao Martins <joao.m.mart...@oracle.com>
>> ---
>>   hw/vfio/common.c | 22 +++++++++++++++++++++-
>>   1 file changed, 21 insertions(+), 1 deletion(-)
>>
>> diff --git a/hw/vfio/common.c b/hw/vfio/common.c
>> index fa8fd949b1cf..060acccb3443 100644
>> --- a/hw/vfio/common.c
>> +++ b/hw/vfio/common.c
>> @@ -414,12 +414,32 @@ void vfio_unblock_multiple_devices_migration(void)
>>       multiple_devices_migration_blocker = NULL;
>>   }
>>   +static bool vfio_viommu_dma_translation_enabled(VFIOAddressSpace *space)
>> +{
>> +    bool enabled = false;
>> +    int ret;
>> +
>> +    if (!space->iommu_mr) {
>> +        return true;
>> +    }
>> +
>> +    ret = memory_region_iommu_get_attr(space->iommu_mr,
>> +                                       IOMMU_ATTR_DMA_TRANSLATION,
>> +                                       &enabled);
>> +    if (ret || enabled) {
> 
> ... could be helpful if duplicated here.
> 

I'll add it.

>> +        return true;
>> +    }
>> +
>> +    return false;
>> +}
> 

Reply via email to