Hi Joao, On 7/12/24 13:46, Joao Martins wrote: > The helper will be able to fetch vendor agnostic IOMMU capabilities > supported both by hardware and software. Right now it is only iommu dirty > tracking. > > Signed-off-by: Joao Martins <joao.m.mart...@oracle.com> > Reviewed-by: Zhenzhong Duan <zhenzhong.d...@intel.com> Reviewed-by: Eric Auger <eric.au...@redhat.com>
Eric > --- > include/sysemu/iommufd.h | 2 +- > backends/iommufd.c | 4 +++- > hw/vfio/iommufd.c | 4 +++- > 3 files changed, 7 insertions(+), 3 deletions(-) > > diff --git a/include/sysemu/iommufd.h b/include/sysemu/iommufd.h > index 9edfec604595..57d502a1c79a 100644 > --- a/include/sysemu/iommufd.h > +++ b/include/sysemu/iommufd.h > @@ -49,7 +49,7 @@ int iommufd_backend_unmap_dma(IOMMUFDBackend *be, uint32_t > ioas_id, > hwaddr iova, ram_addr_t size); > bool iommufd_backend_get_device_info(IOMMUFDBackend *be, uint32_t devid, > uint32_t *type, void *data, uint32_t > len, > - Error **errp); > + uint64_t *caps, Error **errp); > > #define TYPE_HOST_IOMMU_DEVICE_IOMMUFD TYPE_HOST_IOMMU_DEVICE "-iommufd" > #endif > diff --git a/backends/iommufd.c b/backends/iommufd.c > index 84fefbc9ee7a..2b3d51af26d2 100644 > --- a/backends/iommufd.c > +++ b/backends/iommufd.c > @@ -210,7 +210,7 @@ int iommufd_backend_unmap_dma(IOMMUFDBackend *be, > uint32_t ioas_id, > > bool iommufd_backend_get_device_info(IOMMUFDBackend *be, uint32_t devid, > uint32_t *type, void *data, uint32_t > len, > - Error **errp) > + uint64_t *caps, Error **errp) > { > struct iommu_hw_info info = { > .size = sizeof(info), > @@ -226,6 +226,8 @@ bool iommufd_backend_get_device_info(IOMMUFDBackend *be, > uint32_t devid, > > g_assert(type); > *type = info.out_data_type; > + g_assert(caps); > + *caps = info.out_capabilities; > > return true; > } > diff --git a/hw/vfio/iommufd.c b/hw/vfio/iommufd.c > index c2f158e60386..604eaa4d9a5d 100644 > --- a/hw/vfio/iommufd.c > +++ b/hw/vfio/iommufd.c > @@ -628,11 +628,13 @@ static bool hiod_iommufd_vfio_realize(HostIOMMUDevice > *hiod, void *opaque, > union { > struct iommu_hw_info_vtd vtd; > } data; > + uint64_t hw_caps; > > hiod->agent = opaque; > > if (!iommufd_backend_get_device_info(vdev->iommufd, vdev->devid, > - &type, &data, sizeof(data), errp)) { > + &type, &data, sizeof(data), > + &hw_caps, errp)) { > return false; > } >