Hi ZHenzhong, On 2/28/24 04:58, Zhenzhong Duan wrote: > Introduce host_iommu_device_create callback and a wrapper for it. > > This callback is used to allocate a host iommu device instance and > initialize it based on type. > > Signed-off-by: Zhenzhong Duan <zhenzhong.d...@intel.com> > --- > include/hw/vfio/vfio-common.h | 1 + > include/hw/vfio/vfio-container-base.h | 1 + > hw/vfio/common.c | 8 ++++++++ > 3 files changed, 10 insertions(+) > > diff --git a/include/hw/vfio/vfio-common.h b/include/hw/vfio/vfio-common.h > index b6676c9f79..9fefea4b89 100644 > --- a/include/hw/vfio/vfio-common.h > +++ b/include/hw/vfio/vfio-common.h > @@ -208,6 +208,7 @@ struct vfio_device_info *vfio_get_device_info(int fd); > int vfio_attach_device(char *name, VFIODevice *vbasedev, > AddressSpace *as, Error **errp); > void vfio_detach_device(VFIODevice *vbasedev); > +void host_iommu_device_create(VFIODevice *vbasedev); > > int vfio_kvm_device_add_fd(int fd, Error **errp); > int vfio_kvm_device_del_fd(int fd, Error **errp); > diff --git a/include/hw/vfio/vfio-container-base.h > b/include/hw/vfio/vfio-container-base.h > index b2813b0c11..dc003f6eb2 100644 > --- a/include/hw/vfio/vfio-container-base.h > +++ b/include/hw/vfio/vfio-container-base.h > @@ -120,6 +120,7 @@ struct VFIOIOMMUClass { > int (*attach_device)(const char *name, VFIODevice *vbasedev, > AddressSpace *as, Error **errp); > void (*detach_device)(VFIODevice *vbasedev); > + void (*host_iommu_device_create)(VFIODevice *vbasedev); > /* migration feature */ > int (*set_dirty_page_tracking)(const VFIOContainerBase *bcontainer, > bool start); > diff --git a/hw/vfio/common.c b/hw/vfio/common.c > index 059bfdc07a..41e9031c59 100644 > --- a/hw/vfio/common.c > +++ b/hw/vfio/common.c > @@ -1521,3 +1521,11 @@ void vfio_detach_device(VFIODevice *vbasedev) > } > vbasedev->bcontainer->ops->detach_device(vbasedev); > } > + > +void host_iommu_device_create(VFIODevice *vbasedev) > +{ > + const VFIOIOMMUClass *ops = vbasedev->bcontainer->ops; > + > + assert(ops->host_iommu_device_create); at this stage ops actual implementation do not exist yet so this will break the bisection
Eric > + ops->host_iommu_device_create(vbasedev); > +}