From: Jason Gunthorpe <jgg@ziepe.ca>
To: Baolu Lu <baolu.lu@linux.intel.com>
Cc: Joerg Roedel <joro@8bytes.org>, Will Deacon <will@kernel.org>,
Robin Murphy <robin.murphy@arm.com>,
Kevin Tian <kevin.tian@intel.com>,
Jean-Philippe Brucker <jean-philippe@linaro.org>,
Nicolin Chen <nicolinc@nvidia.com>, Yi Liu <yi.l.liu@intel.com>,
Jacob Pan <jacob.jun.pan@linux.intel.com>,
iommu@lists.linux.dev, kvm@vger.kernel.org,
linux-kernel@vger.kernel.org
Subject: Re: [PATCH v2 12/12] iommu: Add helper to set iopf handler for domain
Date: Fri, 11 Aug 2023 14:14:01 -0300 [thread overview]
Message-ID: <ZNZsWcV5asNwyOq8@ziepe.ca> (raw)
In-Reply-To: <b154c6d4-45db-0f4c-d704-fe1ab8e4d6a5@linux.intel.com>
On Fri, Aug 11, 2023 at 10:40:15AM +0800, Baolu Lu wrote:
> On 2023/8/11 3:18, Jason Gunthorpe wrote:
> > On Thu, Jul 27, 2023 at 01:48:37PM +0800, Lu Baolu wrote:
> > > To avoid open code everywhere.
> > >
> > > Signed-off-by: Lu Baolu <baolu.lu@linux.intel.com>
> > > ---
> > > include/linux/iommu.h | 11 ++++++++++-
> > > drivers/iommu/iommu.c | 20 ++++++++++++++++++--
> > > 2 files changed, 28 insertions(+), 3 deletions(-)
> >
> > Seems like overkill at this point..
> >
> > Also, I think this is probably upside down.
> >
> > We want to create the domains as fault enabled in the first place.
> >
> > A fault enabled domain should never be attached to something that
> > cannot support faults. It should also not support changing the fault
> > handler while it exists.
> >
> > Thus at the creation point would be the time to supply the fault handler
> > as part of requesting faulting.
> >
> > Taking an existing domain and making it faulting enabled is going to
> > be really messy in all the corner cases.
>
> Yes. Agreed.
>
> >
> > My advice (and Robin will probably hate me), is to define a new op:
> >
> > struct domain_alloc_paging_args {
> > struct fault_handler *fault_handler;
> > void *fault_data
> > };
> >
> > struct iommu_domain *domain_alloc_paging2(struct device *dev, struct
> > domain_alloc_paging_args *args)
> >
> > The point would be to leave the majority of drivers using the
> > simplified, core assisted, domain_alloc_paging() interface and they
> > just don't have to touch any of this stuff at all.
> >
> > Obviously if handler is given then the domain will be initialized as
> > faulting.
>
> Perhaps we also need an internal helper for iommu drivers to check the
> iopf capability of the domain.
Yeah, maybe.
I've been mulling over this for a a bit here
Robin suggested to wrap everything in a arg to domain_alloc and build
a giant super multiplexor
I don't really like that because it makes it quite complicated for the
driver and multiplexor APIs are rarely good.
So for simple drivers I like the 'domain_alloc_paging' as the only op
they implement and it is obviously simple and hard to implement
wrong. Most drivers would do this.
We also need a:
struct iommu_domain *domain_alloc_sva(struct device *dev, struct mm_struct *mm)
So SVA can be fully setup at allocation time. SVA doesn't have any
legal permutations so it can be kept simple.
Then we need something to bundle:
- Dirty tracking yes/no
- The iommufd user space blob
- Fault handling yes/no
For complex drivers.
So maybe we should just have a 3rd option
// I'm a complex driver and many people checked that I implemented
// this right:
struct domain_alloc_args {
struct device *dev;
unsigned int flags; // For requesting dirty tracking
// alloc_domain_user interface
struct iommu_domain *parent;
void *user_data;
size_t user_len;
// Faulting
struct fault_handler *fault_handler;
void *fault_data;
};
struct iommu_domain *domain_alloc(struct domain_alloc_args *args);
?
IDK, multiplexor APIs are rarely good, but maybe this is the right
direction?
Jason
prev parent reply other threads:[~2023-08-11 17:14 UTC|newest]
Thread overview: 70+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-07-27 5:48 [PATCH v2 00/12] iommu: Prepare to deliver page faults to user space Lu Baolu
2023-07-27 5:48 ` [PATCH v2 01/12] iommu: Move iommu fault data to linux/iommu.h Lu Baolu
2023-08-03 7:53 ` Tian, Kevin
2023-08-04 2:51 ` Baolu Lu
2023-08-09 16:58 ` Jason Gunthorpe
2023-07-27 5:48 ` [PATCH v2 02/12] iommu/arm-smmu-v3: Remove unrecoverable faults reporting Lu Baolu
2023-07-27 5:48 ` [PATCH v2 03/12] iommu: Remove unrecoverable fault data Lu Baolu
2023-08-03 7:54 ` Tian, Kevin
2023-08-04 2:58 ` Baolu Lu
2023-08-04 3:51 ` Tian, Kevin
2023-08-04 5:34 ` Baolu Lu
2023-08-08 18:39 ` Jason Gunthorpe
2023-08-09 0:01 ` Tian, Kevin
2023-08-09 14:05 ` Jason Gunthorpe
2023-08-09 16:59 ` Jason Gunthorpe
2023-08-10 2:27 ` Baolu Lu
2023-08-10 16:46 ` Jason Gunthorpe
2023-08-11 1:15 ` Baolu Lu
2023-08-11 4:17 ` Tian, Kevin
2023-07-27 5:48 ` [PATCH v2 04/12] iommu: Replace device fault handler with iommu_queue_iopf() Lu Baolu
2023-08-03 7:55 ` Tian, Kevin
2023-08-10 18:22 ` Jason Gunthorpe
2023-08-11 1:23 ` Baolu Lu
2023-08-10 18:33 ` Jason Gunthorpe
2023-08-11 1:25 ` Baolu Lu
2023-07-27 5:48 ` [PATCH v2 05/12] iommu: Change the return value of dev_iommu_get() Lu Baolu
2023-08-03 7:59 ` Tian, Kevin
2023-08-04 3:10 ` Baolu Lu
2023-08-04 3:55 ` Tian, Kevin
2023-08-04 5:33 ` Baolu Lu
2023-08-09 16:58 ` Jason Gunthorpe
2023-08-10 2:30 ` Baolu Lu
2023-07-27 5:48 ` [PATCH v2 06/12] iommu: Make dev->fault_param static Lu Baolu
2023-08-03 8:08 ` Tian, Kevin
2023-08-04 3:16 ` Baolu Lu
2023-08-04 3:56 ` Tian, Kevin
2023-08-04 5:34 ` Baolu Lu
2023-08-10 18:20 ` Jason Gunthorpe
2023-08-10 18:46 ` Jason Gunthorpe
2023-08-11 1:43 ` Baolu Lu
2023-07-27 5:48 ` [PATCH v2 07/12] iommu: Remove iommu_[un]register_device_fault_handler() Lu Baolu
2023-08-03 8:09 ` Tian, Kevin
2023-08-10 18:59 ` Jason Gunthorpe
2023-07-27 5:48 ` [PATCH v2 08/12] iommu: Prepare for separating SVA and IOPF Lu Baolu
2023-08-03 8:16 ` Tian, Kevin
2023-08-04 3:26 ` Baolu Lu
2023-08-08 18:43 ` Jason Gunthorpe
2023-08-09 0:02 ` Tian, Kevin
2023-08-09 10:40 ` Baolu Lu
2023-08-10 2:35 ` Tian, Kevin
2023-08-10 16:47 ` Jason Gunthorpe
2023-08-11 1:53 ` Baolu Lu
2023-08-11 13:27 ` Jason Gunthorpe
2023-08-13 11:19 ` Baolu Lu
2023-07-27 5:48 ` [PATCH v2 09/12] iommu: Move iopf_handler() to iommu-sva.c Lu Baolu
2023-08-03 8:21 ` Tian, Kevin
2023-08-04 3:28 ` Baolu Lu
2023-08-10 19:02 ` Jason Gunthorpe
2023-08-11 1:55 ` Baolu Lu
2023-07-27 5:48 ` [PATCH v2 10/12] iommu: Make iommu_queue_iopf() more generic Lu Baolu
2023-08-10 19:07 ` Jason Gunthorpe
2023-08-11 2:21 ` Baolu Lu
2023-08-11 13:29 ` Jason Gunthorpe
2023-08-12 23:18 ` Baolu Lu
2023-07-27 5:48 ` [PATCH v2 11/12] iommu: Separate SVA and IOPF in Makefile and Kconfig Lu Baolu
2023-08-10 19:09 ` Jason Gunthorpe
2023-07-27 5:48 ` [PATCH v2 12/12] iommu: Add helper to set iopf handler for domain Lu Baolu
2023-08-10 19:18 ` Jason Gunthorpe
2023-08-11 2:40 ` Baolu Lu
2023-08-11 17:14 ` Jason Gunthorpe [this message]
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=ZNZsWcV5asNwyOq8@ziepe.ca \
--to=jgg@ziepe.ca \
--cc=baolu.lu@linux.intel.com \
--cc=iommu@lists.linux.dev \
--cc=jacob.jun.pan@linux.intel.com \
--cc=jean-philippe@linaro.org \
--cc=joro@8bytes.org \
--cc=kevin.tian@intel.com \
--cc=kvm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=nicolinc@nvidia.com \
--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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®