On Thu, Jun 26, 2025 at 12:34:40PM -0700, Nicolin Chen wrote: > The new HW queue object, as an internal iommufd object, wants to reuse the > struct iommufd_access to pin some iova range in the iopt. > > However, an access generally takes the refcount of an ictx. So, in such an > internal case, a deadlock could happen when the release of the ictx has to > wait for the release of the access first when releasing a hw_queue object, > which could wait for the release of the ictx that is refcounted: > ictx --releases--> hw_queue --releases--> access > ^ | > |_________________releases________________v > > To address this, add a set of lightweight internal APIs to unlink the ictx > and the access, i.e. no ictx refcounting by the access: > ictx --releases--> hw_queue --releases--> access > > Then, there's no point in setting the access->ictx. So simply define !ictx > as an flag for an internal use and add an inline helper. > > Signed-off-by: Nicolin Chen <nicolinc@xxxxxxxxxx> > --- > drivers/iommu/iommufd/iommufd_private.h | 23 ++++++++++ > drivers/iommu/iommufd/device.c | 59 +++++++++++++++++++++---- > 2 files changed, 73 insertions(+), 9 deletions(-) Reviewed-by: Jason Gunthorpe <jgg@xxxxxxxxxx> Jason