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@nvidia.com
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@nvidia.com Signed-off-by: Yi Liu yi.l.liu@intel.com
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