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;
>> +}
>