Hi Eric, >-----Original Message----- >From: Eric Auger <eric.au...@redhat.com> >Subject: [PATCH 4/7] HostIOMMUDevice: Introduce get_page_size_mask() >callback > >This callback will be used to retrieve the page size mask supported >along a given Host IOMMU device. > >Signed-off-by: Eric Auger <eric.au...@redhat.com> >--- > include/hw/vfio/vfio-container-base.h | 7 +++++++ > include/sysemu/host_iommu_device.h | 8 ++++++++ > hw/vfio/container.c | 10 ++++++++++ > hw/vfio/iommufd.c | 11 +++++++++++ > 4 files changed, 36 insertions(+) > >diff --git a/include/hw/vfio/vfio-container-base.h b/include/hw/vfio/vfio- >container-base.h >index 45d7c40fce..62a8b60d87 100644 >--- a/include/hw/vfio/vfio-container-base.h >+++ b/include/hw/vfio/vfio-container-base.h >@@ -88,6 +88,13 @@ int vfio_container_query_dirty_bitmap(const >VFIOContainerBase *bcontainer, > > GList *vfio_container_get_iova_ranges(const VFIOContainerBase >*bcontainer); > >+static inline uint64_t >+vfio_container_get_page_size_mask(const VFIOContainerBase *bcontainer) >+{ >+ assert(bcontainer); >+ return bcontainer->pgsizes; >+} >+ > #define TYPE_VFIO_IOMMU "vfio-iommu" > #define TYPE_VFIO_IOMMU_LEGACY TYPE_VFIO_IOMMU "-legacy" > #define TYPE_VFIO_IOMMU_SPAPR TYPE_VFIO_IOMMU "-spapr" >diff --git a/include/sysemu/host_iommu_device.h >b/include/sysemu/host_iommu_device.h >index 05c7324a0d..c1bf74ae2c 100644 >--- a/include/sysemu/host_iommu_device.h >+++ b/include/sysemu/host_iommu_device.h >@@ -89,6 +89,14 @@ struct HostIOMMUDeviceClass { > * @hiod: handle to the host IOMMU device > */ > GList* (*get_iova_ranges)(HostIOMMUDevice *hiod); >+ /** >+ * >+ * @get_page_size_mask: Return the page size mask supported along >this >+ * @hiod Host IOMMU device >+ * >+ * @hiod: handle to the host IOMMU device >+ */ >+ uint64_t (*get_page_size_mask)(HostIOMMUDevice *hiod);
Not sure if it's simpler to utilize existing .get_cap() to get pgsizes. Thanks Zhenzhong > }; > > /* >diff --git a/hw/vfio/container.c b/hw/vfio/container.c >index adeab1ac89..b5ce559a0d 100644 >--- a/hw/vfio/container.c >+++ b/hw/vfio/container.c >@@ -1174,6 +1174,15 @@ >hiod_legacy_vfio_get_iova_ranges(HostIOMMUDevice *hiod) > return vfio_container_get_iova_ranges(vdev->bcontainer); > } > >+static uint64_t >+hiod_legacy_vfio_get_page_size_mask(HostIOMMUDevice *hiod) >+{ >+ VFIODevice *vdev = hiod->agent; >+ >+ g_assert(vdev); >+ return vfio_container_get_page_size_mask(vdev->bcontainer); >+} >+ > static void vfio_iommu_legacy_instance_init(Object *obj) > { > VFIOContainer *container = VFIO_IOMMU_LEGACY(obj); >@@ -1188,6 +1197,7 @@ static void >hiod_legacy_vfio_class_init(ObjectClass *oc, void *data) > hioc->realize = hiod_legacy_vfio_realize; > hioc->get_cap = hiod_legacy_vfio_get_cap; > hioc->get_iova_ranges = hiod_legacy_vfio_get_iova_ranges; >+ hioc->get_page_size_mask = hiod_legacy_vfio_get_page_size_mask; > }; > > static const TypeInfo types[] = { >diff --git a/hw/vfio/iommufd.c b/hw/vfio/iommufd.c >index 211e7223f1..7b5f87a148 100644 >--- a/hw/vfio/iommufd.c >+++ b/hw/vfio/iommufd.c >@@ -652,12 +652,23 @@ >hiod_iommufd_vfio_get_iova_ranges(HostIOMMUDevice *hiod) > return vfio_container_get_iova_ranges(vdev->bcontainer); > } > >+static uint64_t >+hiod_iommufd_vfio_get_page_size_mask(HostIOMMUDevice *hiod) >+{ >+ VFIODevice *vdev = hiod->agent; >+ >+ g_assert(vdev); >+ return vfio_container_get_page_size_mask(vdev->bcontainer); >+} >+ >+ > static void hiod_iommufd_vfio_class_init(ObjectClass *oc, void *data) > { > HostIOMMUDeviceClass *hiodc = HOST_IOMMU_DEVICE_CLASS(oc); > > hiodc->realize = hiod_iommufd_vfio_realize; > hiodc->get_iova_ranges = hiod_iommufd_vfio_get_iova_ranges; >+ hiodc->get_page_size_mask = hiod_iommufd_vfio_get_page_size_mask; > }; > > static const TypeInfo types[] = { >-- >2.41.0