> From: Baolu Lu <baolu.lu@xxxxxxxxxxxxxxx> > Sent: Monday, May 20, 2024 8:41 AM > > On 5/15/24 3:57 PM, Tian, Kevin wrote: > >> From: Baolu Lu <baolu.lu@xxxxxxxxxxxxxxx> > >> Sent: Wednesday, May 8, 2024 6:05 PM > >> > >> On 2024/5/8 8:11, Jason Gunthorpe wrote: > >>> On Tue, Apr 30, 2024 at 10:57:06PM +0800, Lu Baolu wrote: > >>>> diff --git a/drivers/iommu/iommu-priv.h b/drivers/iommu/iommu- > priv.h > >>>> index ae65e0b85d69..1a0450a83bd0 100644 > >>>> --- a/drivers/iommu/iommu-priv.h > >>>> +++ b/drivers/iommu/iommu-priv.h > >>>> @@ -36,6 +36,10 @@ struct iommu_attach_handle { > >>>> struct device *dev; > >>>> refcount_t users; > >>>> }; > >>>> + /* attach data for IOMMUFD */ > >>>> + struct { > >>>> + void *idev; > >>>> + }; > >>> We can use a proper type here, just forward declare it. > >>> > >>> But this sequence in the other patch: > >>> > >>> + ret = iommu_attach_group(hwpt->domain, idev->igroup->group); > >>> + if (ret) { > >>> + iommufd_fault_iopf_disable(idev); > >>> + return ret; > >>> + } > >>> + > >>> + handle = iommu_attach_handle_get(idev->igroup->group, > >> IOMMU_NO_PASID, 0); > >>> + handle->idev = idev; > >>> > >>> Is why I was imagining the caller would allocate, because now we have > >>> the issue that a fault capable domain was installed into the IOMMU > >>> before it's handle could be fully setup, so we have a race where a > >>> fault could come in right between those things. Then what happens? > >>> I suppose we can retry the fault and by the time it comes back the > >>> race should resolve. A bit ugly I suppose. > >> > >> You are right. It makes more sense if the attached data is allocated and > >> managed by the caller. I will go in this direction and update my series. > >> I will also consider other review comments you have given in other > >> places. > >> > > > > Does this direction imply a new iommu_attach_group_handle() helper > > to pass in the caller-allocated handle pointer or exposing a new > > iommu_group_set_handle() to set the handle to the group pasid_array > > and then having iomm_attach_group() to update the domain info in > > the handle? > > I will add new iommu_attach/replace/detach_group_handle() helpers. Like > below: > > +/** > + * iommu_attach_group_handle - Attach an IOMMU domain to an IOMMU > group > + * @domain: IOMMU domain to attach > + * @group: IOMMU group that will be attached > + * @handle: attach handle > + * > + * Returns 0 on success and error code on failure. > + * > + * This is a variant of iommu_attach_group(). It allows the caller to > provide > + * an attach handle and use it when the domain is attached. This is > currently > + * only designed for IOMMUFD to deliver the I/O page faults. > + */ > +int iommu_attach_group_handle(struct iommu_domain *domain, > + struct iommu_group *group, > + struct iommu_attach_handle *handle) > "currently only designed for IOMMUFD" doesn't sound correct. design-wise this can be used by anyone which relies on the handle. There is nothing tied to IOMMUFD. s/designed for/used by/ is more accurate.