>-----Original Message----- >From: Eric Auger <eric.au...@redhat.com> >Subject: Re: [PATCH v6 13/19] vfio: Create host IOMMU device instance > >Hi Zhenzhong, > >On 6/3/24 08:10, Zhenzhong Duan wrote: >> Create host IOMMU device instance in vfio_attach_device() and call >> .realize() to initialize it further. > >I would squash this with the previous patch
Will do. Thanks Zhenzhong > >Eric >> >> Suggested-by: Cédric Le Goater <c...@redhat.com> >> Signed-off-by: Zhenzhong Duan <zhenzhong.d...@intel.com> >> --- >> include/hw/vfio/vfio-common.h | 1 + >> hw/vfio/common.c | 16 +++++++++++++++- >> 2 files changed, 16 insertions(+), 1 deletion(-) >> >> diff --git a/include/hw/vfio/vfio-common.h b/include/hw/vfio/vfio- >common.h >> index 56d1717211..c0851e83bb 100644 >> --- a/include/hw/vfio/vfio-common.h >> +++ b/include/hw/vfio/vfio-common.h >> @@ -127,6 +127,7 @@ typedef struct VFIODevice { >> OnOffAuto pre_copy_dirty_page_tracking; >> bool dirty_pages_supported; >> bool dirty_tracking; >> + HostIOMMUDevice *hiod; >> int devid; >> IOMMUFDBackend *iommufd; >> } VFIODevice; >> diff --git a/hw/vfio/common.c b/hw/vfio/common.c >> index f9619a1dfb..f20a7b5bba 100644 >> --- a/hw/vfio/common.c >> +++ b/hw/vfio/common.c >> @@ -1528,6 +1528,7 @@ bool vfio_attach_device(char *name, >VFIODevice *vbasedev, >> { >> const VFIOIOMMUClass *ops = >> >VFIO_IOMMU_CLASS(object_class_by_name(TYPE_VFIO_IOMMU_LEGACY)); >> + HostIOMMUDevice *hiod; >> >> if (vbasedev->iommufd) { >> ops = >VFIO_IOMMU_CLASS(object_class_by_name(TYPE_VFIO_IOMMU_IOMMUF >D)); >> @@ -1535,7 +1536,19 @@ bool vfio_attach_device(char *name, >VFIODevice *vbasedev, >> >> assert(ops); >> >> - return ops->attach_device(name, vbasedev, as, errp); >> + if (!ops->attach_device(name, vbasedev, as, errp)) { >> + return false; >> + } >> + >> + hiod = HOST_IOMMU_DEVICE(object_new(ops->hiod_typename)); >> + if (!HOST_IOMMU_DEVICE_GET_CLASS(hiod)->realize(hiod, vbasedev, >errp)) { >> + object_unref(hiod); >> + ops->detach_device(vbasedev); >> + return false; >> + } >> + vbasedev->hiod = hiod; >> + >> + return true; >> } >> >> void vfio_detach_device(VFIODevice *vbasedev) >> @@ -1543,5 +1556,6 @@ void vfio_detach_device(VFIODevice *vbasedev) >> if (!vbasedev->bcontainer) { >> return; >> } >> + object_unref(vbasedev->hiod); >> vbasedev->bcontainer->ops->detach_device(vbasedev); >> }