Virtual SMMUv3 requires physical nested stages for VFIO integration and translates MSIs. So let's advertise those attributes.
Signed-off-by: Eric Auger <eric.au...@redhat.com> --- v2 -> v3: - also advertise MSI_TRANSLATE --- hw/arm/smmuv3.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/hw/arm/smmuv3.c b/hw/arm/smmuv3.c index fd8ec7860e..761d722395 100644 --- a/hw/arm/smmuv3.c +++ b/hw/arm/smmuv3.c @@ -1490,6 +1490,20 @@ static void smmuv3_notify_flag_changed(IOMMUMemoryRegion *iommu, } } +static int smmuv3_get_attr(IOMMUMemoryRegion *iommu, + enum IOMMUMemoryRegionAttr attr, + void *data) +{ + if (attr == IOMMU_ATTR_VFIO_NESTED) { + *(bool *) data = true; + return 0; + } else if (attr == IOMMU_ATTR_MSI_TRANSLATE) { + *(bool *) data = true; + return 0; + } + return -EINVAL; +} + static void smmuv3_iommu_memory_region_class_init(ObjectClass *klass, void *data) { @@ -1497,6 +1511,7 @@ static void smmuv3_iommu_memory_region_class_init(ObjectClass *klass, imrc->translate = smmuv3_translate; imrc->notify_flag_changed = smmuv3_notify_flag_changed; + imrc->get_attr = smmuv3_get_attr; } static const TypeInfo smmuv3_type_info = { -- 2.20.1