On Fri, Mar 10, 2023 at 11:29:14AM -0400, Jason Gunthorpe wrote: > On Thu, Mar 09, 2023 at 12:09:03AM -0800, Yi Liu wrote: > > From: Nicolin Chen <nicolinc@xxxxxxxxxx> > > > > A user-managed hw_pagetable does not need to get populated, since it is > > managed by a guest OS. Move the iopt_table_add_domain and list_add_tail > > calls into a helper, where the hwpt pointer will be redirected to its > > hwpt->parent if it's available. > > > > Signed-off-by: Nicolin Chen <nicolinc@xxxxxxxxxx> > > Signed-off-by: Yi Liu <yi.l.liu@xxxxxxxxx> > > --- > > drivers/iommu/iommufd/hw_pagetable.c | 20 ++++++++++++++++++-- > > 1 file changed, 18 insertions(+), 2 deletions(-) > > > > diff --git a/drivers/iommu/iommufd/hw_pagetable.c b/drivers/iommu/iommufd/hw_pagetable.c > > index 16e92a1c150b..6e45ec0a66fa 100644 > > --- a/drivers/iommu/iommufd/hw_pagetable.c > > +++ b/drivers/iommu/iommufd/hw_pagetable.c > > @@ -43,6 +43,23 @@ int iommufd_hw_pagetable_enforce_cc(struct iommufd_hw_pagetable *hwpt) > > return 0; > > } > > > > +static int iommufd_hw_pagetable_link_ioas(struct iommufd_hw_pagetable *hwpt) > > +{ > > + int rc; > > + > > + if (hwpt->parent) > > This should be: > > hwpt->domain->type != IOMMU_DOMAIN_UNMANAGED > > Ie if we asked the driver to alloc a domain and it allocated an > UNMANAGED domain then it means IOMMUFD manages the mappings and it > should be populated from the IOAS. OK. That looks better to me. > Arguably drivers should EOPNOTSUPP if presented with a parent in this > situation, but still this code should be clear about the purpose. > > > + hwpt = hwpt->parent; > > And we definately shouldn't touch the parent. That is already setup > and owned by someone else. Just return and don't do anything. Yes. Nic