[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <b0ea86fd-8350-f694-a93a-a8ccecd0c8e7@linux.intel.com>
Date: Fri, 10 Mar 2023 10:25:10 +0800
From: Baolu Lu <baolu.lu@...ux.intel.com>
To: Yi Liu <yi.l.liu@...el.com>, joro@...tes.org,
alex.williamson@...hat.com, jgg@...dia.com, kevin.tian@...el.com,
robin.murphy@....com
Cc: baolu.lu@...ux.intel.com, cohuck@...hat.com, eric.auger@...hat.com,
nicolinc@...dia.com, kvm@...r.kernel.org, mjrosato@...ux.ibm.com,
chao.p.peng@...ux.intel.com, yi.y.sun@...ux.intel.com,
peterx@...hat.com, jasowang@...hat.com,
shameerali.kolothum.thodi@...wei.com, lulu@...hat.com,
suravee.suthikulpanit@....com, iommu@...ts.linux.dev,
linux-kernel@...r.kernel.org, linux-kselftest@...r.kernel.org
Subject: Re: [PATCH 05/12] iommufd/hw_pagetable: Do not populate user-managed
hw_pagetables
On 3/9/23 4:09 PM, Yi Liu wrote:
> From: Nicolin Chen <nicolinc@...dia.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@...dia.com>
> Signed-off-by: Yi Liu <yi.l.liu@...el.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)
> + hwpt = hwpt->parent;
> +
> + if (!list_empty(&hwpt->hwpt_item))
> + return 0;
What is above check for? Is it "the hwpt has already been inserted into
the hwpt list of its ioas in another place"?
If so, is it possible that hwpt will be deleted from the list even when
this user hwpt is still linked to the ioas?
> +
> + rc = iopt_table_add_domain(&hwpt->ioas->iopt, hwpt->domain);
> + if (rc)
> + return rc;
> + list_add_tail(&hwpt->hwpt_item, &hwpt->ioas->hwpt_list);
> + return 0;
> +}
> +
> /**
> * iommufd_hw_pagetable_alloc() - Get an iommu_domain for a device
> * @ictx: iommufd context
> @@ -131,10 +148,9 @@ iommufd_hw_pagetable_alloc(struct iommufd_ctx *ictx, struct iommufd_ioas *ioas,
> goto out_unlock;
> }
>
> - rc = iopt_table_add_domain(&hwpt->ioas->iopt, hwpt->domain);
> + rc = iommufd_hw_pagetable_link_ioas(hwpt);
> if (rc)
> goto out_detach;
> - list_add_tail(&hwpt->hwpt_item, &hwpt->ioas->hwpt_list);
>
> mutex_unlock(&idev->igroup->lock);
> return hwpt;
Best regards,
baolu
Powered by blists - more mailing lists