>-----Original Message----- >From: Eric Auger <eric.au...@redhat.com> >Subject: Re: [PATCH 4/7] HostIOMMUDevice: Introduce >get_page_size_mask() callback > >Hi Zhenzhong, > >On 6/27/24 05:06, Duan, Zhenzhong wrote: >> 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. >I chose to introduce a new callback because the page_mask can be >U64_MAX >and get_cap is likely to return a negative value. So we could not >distinguish between an error and a full mask.
I see, you are right. Thanks Zhenzhong