>-----Original Message----- >From: Eric Auger <eric.au...@redhat.com> >Subject: Re: [PATCH rfcv2 04/20] vfio/iommufd: Implement >HostIOMMUDeviceClass::realize_late() handler > > > > >On 2/19/25 9:22 AM, Zhenzhong Duan wrote: >> There are three iommufd related elements iommufd handle, devid and > >There are three iommufd specific members in HostIOMMUDevice >IOMMUFD that need to be initialized after attach on realize_late() ...
Will do. Thanks Zhenzhong > >> hwpt_id. hwpt_id is ready only after VFIO device attachment. Device >> id and iommufd handle are ready before attachment, but they are all >> iommufd related stuff, initialize them together with hwpt_id. >> >> Signed-off-by: Zhenzhong Duan <zhenzhong.d...@intel.com> >> --- >> hw/vfio/iommufd.c | 14 ++++++++++++++ >> 1 file changed, 14 insertions(+) >> >> diff --git a/hw/vfio/iommufd.c b/hw/vfio/iommufd.c >> index df61edffc0..53639bf88b 100644 >> --- a/hw/vfio/iommufd.c >> +++ b/hw/vfio/iommufd.c >> @@ -828,6 +828,19 @@ static bool >hiod_iommufd_vfio_realize(HostIOMMUDevice *hiod, void *opaque, >> return true; >> } >> >> +static bool hiod_iommufd_vfio_realize_late(HostIOMMUDevice *hiod, void >*opaque, >> + Error **errp) >> +{ >> + VFIODevice *vdev = opaque; >> + HostIOMMUDeviceIOMMUFD *idev = >HOST_IOMMU_DEVICE_IOMMUFD(hiod); >> + >> + idev->iommufd = vdev->iommufd; >> + idev->devid = vdev->devid; >> + idev->hwpt_id = vdev->hwpt->hwpt_id; >> + >> + return true; >> +} >> + >> static GList * >> hiod_iommufd_vfio_get_iova_ranges(HostIOMMUDevice *hiod) >> { >> @@ -852,6 +865,7 @@ 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->realize_late = hiod_iommufd_vfio_realize_late; >> hiodc->get_iova_ranges = hiod_iommufd_vfio_get_iova_ranges; >> hiodc->get_page_size_mask = hiod_iommufd_vfio_get_page_size_mask; >> };