All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jacob Pan <jacob.jun.pan@linux.intel.com>
To: Jean-Philippe Brucker <jean-philippe@linaro.org>
Cc: LKML <linux-kernel@vger.kernel.org>,
	iommu@lists.linux.dev, Jason Gunthorpe <jgg@nvidia.com>,
	Lu Baolu <baolu.lu@linux.intel.com>,
	Joerg Roedel <joro@8bytes.org>,
	Jean-Philippe Brucker <jean-philippe@linaro.com>,
	Robin Murphy <robin.murphy@arm.com>,
	Will Deacon <will@kernel.org>,
	David Woodhouse <dwmw2@infradead.org>,
	Raj Ashok <ashok.raj@intel.com>,
	"Tian, Kevin" <kevin.tian@intel.com>, Yi Liu <yi.l.liu@intel.com>,
	jacob.jun.pan@linux.intel.com
Subject: Re: [PATCH v2 2/3] iommu/sva: Stop using ioasid_set for SVA
Date: Wed, 15 Feb 2023 13:36:51 -0800	[thread overview]
Message-ID: <20230215133651.776a1553@jacob-builder> (raw)
In-Reply-To: <Y+tW3kxFeOMcELww@myrica>

Hi Jean-Philippe,

On Tue, 14 Feb 2023 09:39:42 +0000, Jean-Philippe Brucker
<jean-philippe@linaro.org> wrote:

> On Mon, Feb 13, 2023 at 10:44:13PM -0800, Jacob Pan wrote:
> > From: Jason Gunthorpe <jgg@nvidia.com>
> > 
> > Instead SVA drivers can use a simple global IDA to allocate PASIDs for
> > each mm_struct.
> > 
> > Future work would be to allow drivers using the SVA APIs to reserve
> > global PASIDs from this IDA for their internal use, eg with the DMA API
> > PASID support.
> > 
> > Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
> > Signed-off-by: Jacob Pan <jacob.jun.pan@linux.intel.com>
> > ---
> > v2: minor fixes
> > 	- let idxd driver use iommu.h for ioasid_t
> > 	- return 0 after mm_pasid_set()
> > ---
> >  drivers/dma/idxd/idxd.h   |  1 +
> >  drivers/iommu/iommu-sva.c | 53 +++++++++++----------------------------
> >  drivers/iommu/iommu-sva.h |  3 ---
> >  include/linux/sched/mm.h  |  8 +-----
> >  4 files changed, 17 insertions(+), 48 deletions(-)
> > 
> > diff --git a/drivers/dma/idxd/idxd.h b/drivers/dma/idxd/idxd.h
> > index 7ced8d283d98..417e602a46b6 100644
> > --- a/drivers/dma/idxd/idxd.h
> > +++ b/drivers/dma/idxd/idxd.h
> > @@ -13,6 +13,7 @@
> >  #include <linux/ioasid.h>
> >  #include <linux/bitmap.h>
> >  #include <linux/perf_event.h>
> > +#include <linux/iommu.h>  
> 
> Unrelated 
this is for ioasid_t, won't compile without it 

> >  #include <uapi/linux/idxd.h>
> >  #include "registers.h"
> >  
> > diff --git a/drivers/iommu/iommu-sva.c b/drivers/iommu/iommu-sva.c
> > index 24bf9b2b58aa..8fb6f1867af3 100644
> > --- a/drivers/iommu/iommu-sva.c
> > +++ b/drivers/iommu/iommu-sva.c
> > @@ -9,24 +9,11 @@
> >  #include "iommu-sva.h"
> >  
> >  static DEFINE_MUTEX(iommu_sva_lock);
> > -static DECLARE_IOASID_SET(iommu_sva_pasid);
> > +static DEFINE_IDA(iommu_global_pasid_ida);
> >  
> > -/**
> > - * iommu_sva_alloc_pasid - Allocate a PASID for the mm
> > - * @mm: the mm
> > - * @min: minimum PASID value (inclusive)
> > - * @max: maximum PASID value (inclusive)
> > - *
> > - * Try to allocate a PASID for this mm, or take a reference to the
> > existing one
> > - * provided it fits within the [@min, @max] range. On success the
> > PASID is
> > - * available in mm->pasid and will be available for the lifetime of
> > the mm.
> > - *
> > - * Returns 0 on success and < 0 on error.
> > - */
> > -int iommu_sva_alloc_pasid(struct mm_struct *mm, ioasid_t min, ioasid_t
> > max) +static int iommu_sva_alloc_pasid(struct mm_struct *mm, ioasid_t
> > min, ioasid_t max) {
> > -	int ret = 0;
> > -	ioasid_t pasid;
> > +	int ret;
> >  
> >  	if (min == INVALID_IOASID || max == INVALID_IOASID ||
> >  	    min == 0 || max < min)
> > @@ -37,39 +24,29 @@ int iommu_sva_alloc_pasid(struct mm_struct *mm,
> > ioasid_t min, ioasid_t max) if (pasid_valid(mm->pasid)) {
> >  		if (mm->pasid < min || mm->pasid >= max)
> >  			ret = -EOVERFLOW;
> > +		else
> > +			ret = 0;
> >  		goto out;
> >  	}
> >  
> > -	pasid = ioasid_alloc(&iommu_sva_pasid, min, max, mm);
> > -	if (!pasid_valid(pasid))
> > -		ret = -ENOMEM;
> > -	else
> > -		mm_pasid_set(mm, pasid);
> > +	ret = ida_alloc_range(&iommu_global_pasid_ida, min, max,
> > GFP_KERNEL);
> > +	if (ret < min)  
> 
> Just check ret < 0
yes, but i thought < min is safe too. 

> > +		goto out;
> > +	mm_pasid_set(mm, ret);
> > +	ret = 0;
> >  out:
> >  	mutex_unlock(&iommu_sva_lock);
> >  	return ret;
> >  }
> > -EXPORT_SYMBOL_GPL(iommu_sva_alloc_pasid);
> >  
> > -/* ioasid_find getter() requires a void * argument */
> > -static bool __mmget_not_zero(void *mm)
> > +void mm_pasid_drop(struct mm_struct *mm)
> >  {
> > -	return mmget_not_zero(mm);
> > -}
> > +	pr_alert("%s %d", __func__, mm->pasid);  
> 
> Debug print
will remove,
Thanks a lot!


Jacob

  reply	other threads:[~2023-02-15 21:33 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-02-14  6:44 [PATCH v2 0/3] Remove VT-d virtual command interface and IOASID Jacob Pan
2023-02-14  6:44 ` [PATCH v2 1/3] iommu/vt-d: Remove virtual command interface Jacob Pan
2023-02-14 11:26   ` Baolu Lu
2023-02-14  6:44 ` [PATCH v2 2/3] iommu/sva: Stop using ioasid_set for SVA Jacob Pan
2023-02-14  9:39   ` Jean-Philippe Brucker
2023-02-15 21:36     ` Jacob Pan [this message]
2023-02-24 17:44       ` Jean-Philippe Brucker
2023-02-15  3:24   ` Tian, Kevin
2023-02-15 18:38     ` Jacob Pan
2023-02-15 18:46       ` Jason Gunthorpe
2023-02-14  6:44 ` [PATCH v2 3/3] iommu: Remove ioasid infrastructure Jacob Pan
2023-02-14  9:32   ` Jean-Philippe Brucker
2023-02-14 13:06     ` Jason Gunthorpe
2023-02-14 17:31       ` Jacob Pan
2023-02-14 17:57         ` Jason Gunthorpe
2023-02-14 21:33           ` Jacob Pan
2023-02-15 12:49             ` Jason Gunthorpe
2023-02-14 17:04     ` Jacob Pan
2023-02-15  3:27       ` Tian, Kevin

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=20230215133651.776a1553@jacob-builder \
    --to=jacob.jun.pan@linux.intel.com \
    --cc=ashok.raj@intel.com \
    --cc=baolu.lu@linux.intel.com \
    --cc=dwmw2@infradead.org \
    --cc=iommu@lists.linux.dev \
    --cc=jean-philippe@linaro.com \
    --cc=jean-philippe@linaro.org \
    --cc=jgg@nvidia.com \
    --cc=joro@8bytes.org \
    --cc=kevin.tian@intel.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=robin.murphy@arm.com \
    --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.