On Mon, 4 May 2020 21:28:58 +0530 Kirti Wankhede <kwankhede@xxxxxxxxxx> wrote: > Added migration capability in IOMMU info chain. > User application should check IOMMU info chain for migration capability > to use dirty page tracking feature provided by kernel module. > > Signed-off-by: Kirti Wankhede <kwankhede@xxxxxxxxxx> > --- > drivers/vfio/vfio_iommu_type1.c | 15 +++++++++++++++ > include/uapi/linux/vfio.h | 14 ++++++++++++++ > 2 files changed, 29 insertions(+) > > diff --git a/drivers/vfio/vfio_iommu_type1.c b/drivers/vfio/vfio_iommu_type1.c > index 8b27faf1ec38..b38d278d7bff 100644 > --- a/drivers/vfio/vfio_iommu_type1.c > +++ b/drivers/vfio/vfio_iommu_type1.c > @@ -2378,6 +2378,17 @@ static int vfio_iommu_iova_build_caps(struct vfio_iommu *iommu, > return ret; > } > > +static int vfio_iommu_migration_build_caps(struct vfio_info_cap *caps) > +{ > + struct vfio_iommu_type1_info_cap_migration cap_mig; > + > + cap_mig.header.id = VFIO_IOMMU_TYPE1_INFO_CAP_MIGRATION; > + cap_mig.header.version = 1; > + cap_mig.flags = VFIO_IOMMU_INFO_CAPS_MIGRATION_DIRTY_PAGE_TRACK; > + > + return vfio_info_add_capability(caps, &cap_mig.header, sizeof(cap_mig)); > +} > + > static long vfio_iommu_type1_ioctl(void *iommu_data, > unsigned int cmd, unsigned long arg) > { > @@ -2427,6 +2438,10 @@ static long vfio_iommu_type1_ioctl(void *iommu_data, > if (ret) > return ret; > > + ret = vfio_iommu_migration_build_caps(&caps); > + if (ret) > + return ret; > + > if (caps.size) { > info.flags |= VFIO_IOMMU_INFO_CAPS; > > diff --git a/include/uapi/linux/vfio.h b/include/uapi/linux/vfio.h > index e3cbf8b78623..df9ce8aaafab 100644 > --- a/include/uapi/linux/vfio.h > +++ b/include/uapi/linux/vfio.h > @@ -1013,6 +1013,20 @@ struct vfio_iommu_type1_info_cap_iova_range { > struct vfio_iova_range iova_ranges[]; > }; > > +/* > + * The migration capability allows to report supported features for migration. > + * > + * The structures below define version 1 of this capability. > + */ > +#define VFIO_IOMMU_TYPE1_INFO_CAP_MIGRATION 1 > + > +struct vfio_iommu_type1_info_cap_migration { > + struct vfio_info_cap_header header; > + __u32 flags; > + /* supports dirty page tracking */ > +#define VFIO_IOMMU_INFO_CAPS_MIGRATION_DIRTY_PAGE_TRACK (1 << 0) > +}; > + What about exposing the maximum supported dirty bitmap size and the supported page sizes? Thanks, Alex > #define VFIO_IOMMU_GET_INFO _IO(VFIO_TYPE, VFIO_BASE + 12) > > /**