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. 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. Jason