public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Jason Gunthorpe <jgg@ziepe.ca>
To: "Tian, Kevin" <kevin.tian@intel.com>
Cc: Baolu Lu <baolu.lu@linux.intel.com>,
	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>,
	"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: Wed, 12 Jun 2024 10:05:54 -0300	[thread overview]
Message-ID: <20240612130554.GR791043@ziepe.ca> (raw)
In-Reply-To: <BN9PR11MB527693E470478D92564A31718CFB2@BN9PR11MB5276.namprd11.prod.outlook.com>

On Fri, Jun 07, 2024 at 09:35:23AM +0000, Tian, Kevin wrote:
> > From: Baolu Lu <baolu.lu@linux.intel.com>
> > Sent: Thursday, June 6, 2024 2:07 PM
> > 
> > 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
> > >>
> > >> -	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.

Yes, it looks like iommu_sva_bind_device() should fail with EBUSY if
the PASID is already in use and is not exactly the same SVA as being
asked for here.

It will eventually do this naturally when iommu_attach_device_pasid()
is called with an in-use PASID, but may as well do it here for
clarity.

Also, is there a missing test for the same mm too?

I'd maybe change iommu_attach_handle() to return NULL if there is no
handle and then write it like:

if (IS_ERR(attach_handle) && PTR_ERR(attach_handle) != -ENOENT) {
	ret = PTR_ERR(attach_handle);
	goto out_unlock;
}

if (!IS_ERR(attach_handle) && attach_handle->domain->mm == mm) {
   /* Can re-use the existing SVA attachment */
}

> > > Does it suggest that having the caller to always provide a handle
> > > makes more sense?

I was thinking no just to avoid memory allocation.. But how does the
caller not provide a handle? My original draft of this concept used an
XA_MARK to indicate if the xarray pointed to a handle or a domain

This seems to require the handle:

-	curr = xa_cmpxchg(&group->pasid_array, pasid, NULL, domain, GFP_KERNEL);
-	if (curr) {
-		ret = xa_err(curr) ? : -EBUSY;
+	ret = xa_insert(&group->pasid_array, pasid, handle, GFP_KERNEL);

Confused.

> > I'm neutral on this since only sva bind and iopf path delivery currently
> > require an attach handle.
> 
> let's hear Jason's opinion.

At least iommu_attach_handle_get() should not return NULL if there is
no handle, it should return EBUSY as though it couldn't match the
type.

Jason

  reply	other threads:[~2024-06-12 13:05 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
2024-06-07  9:35       ` Tian, Kevin
2024-06-12 13:05         ` Jason Gunthorpe [this message]
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=20240612130554.GR791043@ziepe.ca \
    --to=jgg@ziepe.ca \
    --cc=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=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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox