From: Baolu Lu <baolu.lu@linux.intel.com>
To: "Tian, Kevin" <kevin.tian@intel.com>,
Jason Gunthorpe <jgg@ziepe.ca>, Joerg Roedel <joro@8bytes.org>,
Will Deacon <will@kernel.org>,
Robin Murphy <robin.murphy@arm.com>,
Jean-Philippe Brucker <jean-philippe@linaro.org>,
Nicolin Chen <nicolinc@nvidia.com>,
"Liu, Yi L" <yi.l.liu@intel.com>,
Jacob Pan <jacob.jun.pan@linux.intel.com>,
Joel Granados <j.granados@samsung.com>
Cc: baolu.lu@linux.intel.com,
"iommu@lists.linux.dev" <iommu@lists.linux.dev>,
"virtualization@lists.linux-foundation.org"
<virtualization@lists.linux-foundation.org>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH v6 02/10] iommu: Remove sva handle list
Date: Thu, 6 Jun 2024 14:06:32 +0800 [thread overview]
Message-ID: <afaf133b-7175-467f-a254-060b66b9cb4e@linux.intel.com> (raw)
In-Reply-To: <BN9PR11MB527658A85092F88329EB73E98CF92@BN9PR11MB5276.namprd11.prod.outlook.com>
On 6/5/24 4:15 PM, Tian, Kevin wrote:
>> From: Lu Baolu <baolu.lu@linux.intel.com>
>> Sent: Monday, May 27, 2024 12:05 PM
>>
>> @@ -69,11 +68,16 @@ static struct iommu_mm_data
>> *iommu_alloc_mm_data(struct mm_struct *mm, struct de
>> */
>> struct iommu_sva *iommu_sva_bind_device(struct device *dev, struct
>> mm_struct *mm)
>> {
>> + struct iommu_group *group = dev->iommu_group;
>> + struct iommu_attach_handle *attach_handle;
>> struct iommu_mm_data *iommu_mm;
>> struct iommu_domain *domain;
>> struct iommu_sva *handle;
>
> it's confusing to have both 'handle' and 'attach_handle' in one function.
>
> Clearer to rename 'handle' as 'sva'.
Yes. Could be cleaned up in a separated patch. All sva handle in
iommu-sva.c should be converted if we decide to do that.
>
>> int ret;
>>
>> + if (!group)
>> + return ERR_PTR(-ENODEV);
>> +
>> mutex_lock(&iommu_sva_lock);
>>
>> /* Allocate mm->pasid if necessary. */
>> @@ -83,12 +87,13 @@ struct iommu_sva *iommu_sva_bind_device(struct
>> device *dev, struct mm_struct *mm
>> goto out_unlock;
>> }
>>
>> - list_for_each_entry(handle, &mm->iommu_mm->sva_handles,
>> handle_item) {
>> - if (handle->dev == dev) {
>> - refcount_inc(&handle->users);
>> - mutex_unlock(&iommu_sva_lock);
>> - return handle;
>> - }
>> + /* A bond already exists, just take a reference`. */
>> + attach_handle = iommu_attach_handle_get(group, iommu_mm-
>>> pasid, IOMMU_DOMAIN_SVA);
>> + if (!IS_ERR(attach_handle)) {
>> + handle = container_of(attach_handle, struct iommu_sva,
>> handle);
>> + refcount_inc(&handle->users);
>> + mutex_unlock(&iommu_sva_lock);
>> + return handle;
>> }
>
> It's counter-intuitive to move forward when an error is returned.
>
> e.g. if it's -EBUSY indicating the pasid already used for another type then
> following attempts shouldn't been tried.
>
> probably we should have iommu_attach_handle_get() return NULL
> instead of -ENOENT when the entry is free? then:
>
> attach_handle = iommu_attach_handle_get();
> if (IS_ERR(attach_handle)) {
> ret = PTR_ERR(attach_handle);
> goto out_unlock;
> } else if (attach_handle) {
> /* matched and increase handle->users */
> }
>
> /* free entry falls through */
> But then there is one potential issue with the design that 'handle'
> can be optional in iommu_attach_device_pasid(). In that case
> xa_load returns NULL then we cannot differentiate a real unused
> PASID vs. one which has been attached w/o an handle.
The PASID should be allocated exclusively. This means that once a PASID
is assigned to A, it shouldn't be assigned to B at the same time. If a
single PASID is used for multiple purposes, it's likely a bug in the
system.
So the logic of iommu_attach_handle_get() here is: has an SVA domain
already been installed for this PASID? If so, just reuse it. Otherwise,
try to install a new SVA domain.
> Does it suggest that having the caller to always provide a handle
> makes more sense?
I'm neutral on this since only sva bind and iopf path delivery currently
require an attach handle.
Best regards,
baolu
next prev parent reply other threads:[~2024-06-06 6:08 UTC|newest]
Thread overview: 49+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-05-27 4:05 [PATCH v6 00/10] IOMMUFD: Deliver IO page faults to user space Lu Baolu
2024-05-27 4:05 ` [PATCH v6 01/10] iommu: Introduce domain attachment handle Lu Baolu
2024-06-05 8:02 ` Tian, Kevin
2024-06-06 5:33 ` Baolu Lu
2024-06-12 13:10 ` Jason Gunthorpe
2024-06-13 3:04 ` Baolu Lu
2024-05-27 4:05 ` [PATCH v6 02/10] iommu: Remove sva handle list Lu Baolu
2024-06-05 8:15 ` Tian, Kevin
2024-06-06 6:06 ` Baolu Lu [this message]
2024-06-07 9:35 ` Tian, Kevin
2024-06-12 13:05 ` Jason Gunthorpe
2024-06-13 4:06 ` Baolu Lu
2024-05-27 4:05 ` [PATCH v6 03/10] iommu: Add attach handle to struct iopf_group Lu Baolu
2024-06-05 8:23 ` Tian, Kevin
2024-06-06 6:18 ` Baolu Lu
2024-06-12 13:37 ` Jason Gunthorpe
2024-06-13 4:23 ` Baolu Lu
2024-06-13 11:49 ` Jason Gunthorpe
2024-06-14 1:16 ` Baolu Lu
2024-05-27 4:05 ` [PATCH v6 04/10] iommu: Extend domain attach group with handle support Lu Baolu
2024-06-12 13:41 ` Jason Gunthorpe
2024-06-13 4:47 ` Baolu Lu
2024-05-27 4:05 ` [PATCH v6 05/10] iommufd: Add fault and response message definitions Lu Baolu
2024-06-05 8:28 ` Tian, Kevin
2024-06-06 6:27 ` Baolu Lu
2024-06-07 9:38 ` Tian, Kevin
2024-06-12 13:19 ` Jason Gunthorpe
2024-06-12 13:50 ` Jason Gunthorpe
2024-06-13 6:32 ` Baolu Lu
2024-06-13 4:54 ` Baolu Lu
2024-06-12 13:52 ` Jason Gunthorpe
2024-06-13 6:40 ` Baolu Lu
2024-05-27 4:05 ` [PATCH v6 06/10] iommufd: Add iommufd fault object Lu Baolu
2024-06-07 9:17 ` Tian, Kevin
2024-06-08 9:58 ` Baolu Lu
2024-06-12 13:25 ` Jason Gunthorpe
2024-06-13 6:44 ` Baolu Lu
2024-06-12 13:23 ` Jason Gunthorpe
2024-06-17 7:32 ` Tian, Kevin
2024-05-27 4:05 ` [PATCH v6 07/10] iommufd: Fault-capable hwpt attach/detach/replace Lu Baolu
2024-06-07 9:30 ` Tian, Kevin
2024-06-09 7:23 ` Baolu Lu
2024-06-17 7:37 ` Tian, Kevin
2024-05-27 4:05 ` [PATCH v6 08/10] iommufd: Associate fault object with iommufd_hw_pgtable Lu Baolu
2024-06-07 9:30 ` Tian, Kevin
2024-05-27 4:05 ` [PATCH v6 09/10] iommufd/selftest: Add IOPF support for mock device Lu Baolu
2024-05-27 4:05 ` [PATCH v6 10/10] iommufd/selftest: Add coverage for IOPF test Lu Baolu
2024-06-12 13:54 ` [PATCH v6 00/10] IOMMUFD: Deliver IO page faults to user space Jason Gunthorpe
2024-06-13 6:46 ` Baolu Lu
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=afaf133b-7175-467f-a254-060b66b9cb4e@linux.intel.com \
--to=baolu.lu@linux.intel.com \
--cc=iommu@lists.linux.dev \
--cc=j.granados@samsung.com \
--cc=jacob.jun.pan@linux.intel.com \
--cc=jean-philippe@linaro.org \
--cc=jgg@ziepe.ca \
--cc=joro@8bytes.org \
--cc=kevin.tian@intel.com \
--cc=linux-kernel@vger.kernel.org \
--cc=nicolinc@nvidia.com \
--cc=robin.murphy@arm.com \
--cc=virtualization@lists.linux-foundation.org \
--cc=will@kernel.org \
--cc=yi.l.liu@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.