From: Xu Zaibo <xuzaibo-hv44wF8Li93QT0dZR+AlfA@public.gmane.org>
To: Jean-Philippe Brucker
<jean-philippe.brucker-5wv7dgnIgG8@public.gmane.org>,
iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org
Cc: kevin.tian-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org,
rafael-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org,
gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r@public.gmane.org,
will.deacon-5wv7dgnIgG8@public.gmane.org,
alex.williamson-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org,
robin.murphy-5wv7dgnIgG8@public.gmane.org,
christian.koenig-5C7GfCeVMHo@public.gmane.org
Subject: Re: [RFC PATCH 0/6] Auxiliary IOMMU domains and Arm SMMUv3
Date: Sat, 20 Oct 2018 11:36:47 +0800 [thread overview]
Message-ID: <5BCAA2CF.7030407@huawei.com> (raw)
In-Reply-To: <20181019181158.2395-1-jean-philippe.brucker-5wv7dgnIgG8@public.gmane.org>
Hi Jean,
On 2018/10/20 2:11, Jean-Philippe Brucker wrote:
> This is a first prototype adding auxiliary domain support to Arm SMMUv3,
> following Lu Baolu's latest proposal for IOMMU aware mediated devices
> [1]. It works, but the attach() API still doesn't feel right. See (2)
> below.
>
> Patch 1 adapts iommu.c to the current proposal for auxiliary domains.
> Patches 2-4 rework the PASID allocator to make it usable for SVA and
> AUXD simultaneously. Patches 5-6 add AUXD support to SMMUv3.
>
>
> When a device can have multiple address space, for instance with PCI
> PASID, an auxiliary domain (AUXD) is the IOMMU representation of one
> address space. I distinguish auxiliary from "main" domain, which
> represents the non-PASID address space but also (at least for SMMUv3)
> the whole device context, PASID tables etc.
>
> Auxiliary domains will be used by VFIO for IOMMU-aware mdev, and by any
> other device driver that wants to use PASID for private address spaces
> (as opposed to SVA [2]). The following API is available to device
> drivers:
>
> (1) Enable AUXD for a device. Enable PASID if necessary and set an AUXD
> flag on the IOMMU data associated to a device.
>
> For my own convenience I've been using the SVA infrastructure since
> I already had the locking and IOMMU ops in place. The proposed
> interface is also missing min_pasid and max_pasid parameters, which
> could be needed by device drivers to enforce PASID limits.
> iommu_sva_init_device() without arguments already enables PASID, so
> I just added an AUXD flag to SVA features:
>
> iommu_sva_init_device(dev, IOMMU_SVA_FEAT_AUXD,
> min_pasid, max_pasid, NULL)
> iommu_sva_shutdown_device(dev)
>
> Or as proposed in [1]:
>
> iommu_set_dev_attr(dev, IOMMU_DEV_ATTR_AUXD_ENABLE, NULL)
> iommu_set_dev_attr(dev, IOMMU_DEV_ATTR_AUXD_DISABLE, NULL)
>
> Finding a compromise for this interface should be easy.
Personal idea, from the respective vendors, PASID limit should be set as
enabling.
>
> (2) Allocate a domain and attach it to the device.
>
> dom = iommu_domain_alloc()
> iommu_attach_device(dom, dev)
>
> I still have concerns about this part, which are highlighted by the
> messy changes of patch 1. I think it would make more sense to
> introduce new attach/detach_dev_aux() functions instead of reusing
> attach/detach_dev()
>
> Can we reconsider this and avoid unnecessary complications in IOMMU
> core and drivers? Does the VFIO code greatly benefit from using the
> same attach() function? It could as well use a different one for
> devices in AUXD mode, which the mediating driver could tell by
> adding a flag in mdev_set_iommu_device(), for example.
>
> And I don't think other users of AUXD would benefit from using the
> same attach() function, since they will know whether they want to be
> using main or auxiliary domain when doing attach().
It seems that SVA/AUXD have no better sulotion for users applcations
except VFIO.
But VFIO seems caring for VMs' scenario more than general user space
processes at present. :)
>
> (3) Get the PASID, and program it in the device
>
> iommu_domain_get_attr(dom, DOMAIN_ATTR_AUXD_ID, &pasid)
>
> (4) Create DMA mappings
>
> iommu_map(dom, ...)
> iommu_unmap(dom, ...)
>
> Ultimately it would be nice to add PASID support to the DMA API as
> well. For now drivers allocate IOVAs and pages themselves.
>
>
> For vfio-mdev, a driver that wants to create mdevs only performs steps (1)
> and (3):
>
> * When initializing the parent device, enable AUXD (1)
> * In mdev_parent_ops::create(), call mdev_set_iommu_device(mdev_dev(mdev),
> mdev_parent_dev(mdev)).
> * In mdev_parent_ops::open(), get the PASID (3) and install it in the
> parent device.
> * In mdev_parent_ops::close(), clear the PASID
This may be a good solution to avoid exposing PASID to user space.
Personally, VFIO-PCI is
not in the range of this using scenario for partial device while
PASID/SVA/AUXD are enabled.
Cheers,
Zaibo
.
>
> This code and the many patches it depends on can be found on my
> iommu/auxd branch:
> git://linux-arm.org/linux-jpb.git iommu/auxd
>
> [1] [PATCH v3 0/8] vfio/mdev: IOMMU aware mediated device
> https://lwn.net/ml/linux-kernel/20181012051632.26064-1-baolu.lu-VuQAYsv1563Yd54FQh9/CA@public.gmane.org/
> [2] [PATCH v3 00/10] Shared Virtual Addressing for the IOMMU
> https://www.spinics.net/lists/iommu/msg30076.html
>
> Jean-Philippe Brucker (6):
> iommu: Adapt attach/detach_dev() for auxiliary domains
> drivers core: Add I/O ASID allocator
> iommu/sva: Use external PASID allocator
> iommu/sva: Support AUXD feature
> iommu/arm-smmu-v3: Implement detach_dev op
> iommu/arm-smmu-v3: Add support for auxiliary domains
>
> drivers/base/Kconfig | 7 ++
> drivers/base/Makefile | 1 +
> drivers/base/ioasid.c | 140 ++++++++++++++++++++++++++++++
> drivers/iommu/Kconfig | 1 +
> drivers/iommu/arm-smmu-v3.c | 164 ++++++++++++++++++++++++++++++++++--
> drivers/iommu/iommu-sva.c | 113 +++++++++++++++++--------
> drivers/iommu/iommu.c | 58 +++++++++----
> include/linux/ioasid.h | 45 ++++++++++
> include/linux/iommu.h | 12 +++
> 9 files changed, 479 insertions(+), 62 deletions(-)
> create mode 100644 drivers/base/ioasid.c
> create mode 100644 include/linux/ioasid.h
>
next prev parent reply other threads:[~2018-10-20 3:36 UTC|newest]
Thread overview: 60+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-10-19 18:11 [RFC PATCH 0/6] Auxiliary IOMMU domains and Arm SMMUv3 Jean-Philippe Brucker
[not found] ` <20181019181158.2395-1-jean-philippe.brucker-5wv7dgnIgG8@public.gmane.org>
2018-10-19 18:11 ` [RFC PATCH 1/6] iommu: Adapt attach/detach_dev() for auxiliary domains Jean-Philippe Brucker
[not found] ` <20181019181158.2395-2-jean-philippe.brucker-5wv7dgnIgG8@public.gmane.org>
2018-10-22 2:32 ` Lu Baolu
2018-10-19 18:11 ` [RFC PATCH 2/6] drivers core: Add I/O ASID allocator Jean-Philippe Brucker
[not found] ` <20181019181158.2395-3-jean-philippe.brucker-5wv7dgnIgG8@public.gmane.org>
2018-10-22 4:49 ` Lu Baolu
[not found] ` <9c6cd6c1-3569-4251-8344-fc9df0e743bc-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>
2018-10-22 10:22 ` Raj, Ashok
[not found] ` <20181022102254.GA25399-7RUrO8UaCDyr4tA6zuQqW9h3ngVCH38I@public.gmane.org>
2018-10-23 6:56 ` Lu Baolu
[not found] ` <02006e4f-2acf-6ff8-b695-c54c99509b46-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>
2018-10-23 22:13 ` Tian, Kevin
2018-11-07 4:53 ` Lu Baolu
[not found] ` <fb2bd5fe-5742-fcd8-b8f0-1885040e8d4f-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>
2018-11-08 18:51 ` Jean-Philippe Brucker
2018-11-12 14:40 ` Joerg Roedel
[not found] ` <20181112144039.GA25808-zLv9SwRftAIdnm+yROfE0A@public.gmane.org>
2018-11-21 11:16 ` Jean-Philippe Brucker
[not found] ` <8f17757a-c657-aab9-a6a0-fb0cc9c610a8-5wv7dgnIgG8@public.gmane.org>
2018-11-21 19:10 ` Koenig, Christian
[not found] ` <62f05552-df46-6e12-10ed-820429dfda59-5C7GfCeVMHo@public.gmane.org>
2018-11-22 6:59 ` Tian, Kevin
2018-11-22 8:38 ` Joerg Roedel
2018-11-22 8:44 ` Joerg Roedel
[not found] ` <20181122084429.GB1586-zLv9SwRftAIdnm+yROfE0A@public.gmane.org>
2018-11-22 11:17 ` Jean-Philippe Brucker
2018-10-19 18:11 ` [RFC PATCH 3/6] iommu/sva: Use external PASID allocator Jean-Philippe Brucker
2018-10-19 18:11 ` [RFC PATCH 4/6] iommu/sva: Support AUXD feature Jean-Philippe Brucker
2018-10-19 18:11 ` [RFC PATCH 5/6] iommu/arm-smmu-v3: Implement detach_dev op Jean-Philippe Brucker
2018-10-19 18:11 ` [RFC PATCH 6/6] iommu/arm-smmu-v3: Add support for auxiliary domains Jean-Philippe Brucker
2018-10-20 3:36 ` Xu Zaibo [this message]
2018-10-22 6:53 ` [RFC PATCH 0/6] Auxiliary IOMMU domains and Arm SMMUv3 Tian, Kevin
[not found] ` <AADFC41AFE54684AB9EE6CBC0274A5D19BE0E176-0J0gbvR4kThpB2pF5aRoyrfspsVTdybXVpNB7YpNyf8@public.gmane.org>
2018-10-22 11:50 ` Robin Murphy
[not found] ` <11f88122-afd3-a34c-3cd4-db681bf5498b-5wv7dgnIgG8@public.gmane.org>
2018-10-22 15:35 ` Jordan Crouse
2018-10-22 18:01 ` Jean-Philippe Brucker
2018-11-06 16:25 ` joro-zLv9SwRftAIdnm+yROfE0A
[not found] ` <20181106162539.4gmkvg57mja3bn7k-zLv9SwRftAIdnm+yROfE0A@public.gmane.org>
2018-11-07 3:40 ` Lu Baolu
[not found] ` <e22e3631-2ecb-664d-5666-8e0f865dec83-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>
2018-11-07 16:43 ` joro-zLv9SwRftAIdnm+yROfE0A
[not found] ` <20181107164323.GA19831-zLv9SwRftAIdnm+yROfE0A@public.gmane.org>
2018-11-07 17:23 ` Alex Williamson
2018-11-21 4:40 ` Lu Baolu
[not found] ` <758bb120-5bc0-1e2d-ccd0-9be0bcc5d8bc-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>
2018-11-23 11:21 ` joro-zLv9SwRftAIdnm+yROfE0A
[not found] ` <20181123112125.GF1586-zLv9SwRftAIdnm+yROfE0A@public.gmane.org>
2018-11-25 6:51 ` Lu Baolu
2018-11-26 3:01 ` Tian, Kevin
[not found] ` <AADFC41AFE54684AB9EE6CBC0274A5D19BE68777@SHSMSX101.ccr.corp.intel.com>
[not found] ` <AADFC41AFE54684AB9EE6CBC0274A5D19BE68777-0J0gbvR4kThpB2pF5aRoyrfspsVTdybXVpNB7YpNyf8@public.gmane.org>
2018-11-26 7:29 ` Tian, Kevin
[not found] ` <AADFC41AFE54684AB9EE6CBC0274A5D19BE689B8-0J0gbvR4kThpB2pF5aRoyrfspsVTdybXVpNB7YpNyf8@public.gmane.org>
2018-12-07 10:29 ` 'joro-zLv9SwRftAIdnm+yROfE0A@public.gmane.org'
[not found] ` <20181207102926.GM16835-zLv9SwRftAIdnm+yROfE0A@public.gmane.org>
2018-12-10 2:06 ` Tian, Kevin
[not found] ` <AADFC41AFE54684AB9EE6CBC0274A5D19BE95394-0J0gbvR4kThpB2pF5aRoyrfspsVTdybXVpNB7YpNyf8@public.gmane.org>
2018-12-10 8:57 ` 'joro-zLv9SwRftAIdnm+yROfE0A@public.gmane.org'
[not found] ` <20181210085745.GN16835-zLv9SwRftAIdnm+yROfE0A@public.gmane.org>
2018-12-11 18:34 ` Jean-Philippe Brucker
[not found] ` <4be63d12-fa1c-b180-761b-5e8ceed58545-5wv7dgnIgG8@public.gmane.org>
2018-12-12 9:22 ` 'joro-zLv9SwRftAIdnm+yROfE0A@public.gmane.org'
2018-12-12 9:31 ` Tian, Kevin
[not found] ` <AADFC41AFE54684AB9EE6CBC0274A5D19BE9D6CA-0J0gbvR4kThpB2pF5aRoyrfspsVTdybXVpNB7YpNyf8@public.gmane.org>
2018-12-12 9:54 ` 'joro-zLv9SwRftAIdnm+yROfE0A@public.gmane.org'
[not found] ` <20181212095403.GU16835-zLv9SwRftAIdnm+yROfE0A@public.gmane.org>
2018-12-12 10:03 ` Tian, Kevin
2018-12-10 2:57 ` Lu Baolu
[not found] ` <bf1ee4a3-6d3f-e0db-a02a-1db819843a60-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>
2018-12-10 8:59 ` 'joro-zLv9SwRftAIdnm+yROfE0A@public.gmane.org'
2018-12-11 13:35 ` Jean-Philippe Brucker
[not found] ` <fc173d9f-57e2-dd87-95d0-1c615f2e14e3-5wv7dgnIgG8@public.gmane.org>
2018-12-12 9:29 ` 'joro-zLv9SwRftAIdnm+yROfE0A@public.gmane.org'
2018-11-08 18:29 ` Jean-Philippe Brucker
[not found] ` <42949d93-e22c-dd4d-cd49-46efc0b73cdb-5wv7dgnIgG8@public.gmane.org>
2018-11-12 14:55 ` joro-zLv9SwRftAIdnm+yROfE0A
[not found] ` <20181112145541.GB25808-zLv9SwRftAIdnm+yROfE0A@public.gmane.org>
2018-11-21 19:05 ` Jean-Philippe Brucker
[not found] ` <5dcf9238-62b2-8df6-b378-183ee09c5951-5wv7dgnIgG8@public.gmane.org>
2018-11-23 12:50 ` joro-zLv9SwRftAIdnm+yROfE0A
2018-11-22 8:39 ` Tian, Kevin
[not found] ` <AADFC41AFE54684AB9EE6CBC0274A5D19BE5A7A7-0J0gbvR4kThpB2pF5aRoyrfspsVTdybXVpNB7YpNyf8@public.gmane.org>
2018-11-23 12:14 ` joro-zLv9SwRftAIdnm+yROfE0A
2018-10-22 10:07 ` Raj, Ashok
[not found] ` <20181021194426.GA11201-7RUrO8UaCDyr4tA6zuQqW9h3ngVCH38I@public.gmane.org>
2018-10-22 16:03 ` Jean-Philippe Brucker
[not found] ` <d45c5222-68e9-1d6e-730b-bb8dbc060586-5wv7dgnIgG8@public.gmane.org>
2018-10-23 17:16 ` Raj, Ashok
[not found] ` <1540314963.21962.20.camel-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
2018-10-23 22:08 ` Tian, Kevin
2018-10-26 3:00 ` Lu Baolu
2018-10-22 16:48 ` Jordan Crouse
[not found] ` <20181022164834.GH26762-9PYrDHPZ2Orvke4nUoYGnHL1okKdlPRT@public.gmane.org>
2018-11-02 3:19 ` Lu Baolu
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=5BCAA2CF.7030407@huawei.com \
--to=xuzaibo-hv44wf8li93qt0dzr+alfa@public.gmane.org \
--cc=alex.williamson-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org \
--cc=christian.koenig-5C7GfCeVMHo@public.gmane.org \
--cc=gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r@public.gmane.org \
--cc=iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org \
--cc=jean-philippe.brucker-5wv7dgnIgG8@public.gmane.org \
--cc=kevin.tian-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org \
--cc=rafael-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org \
--cc=robin.murphy-5wv7dgnIgG8@public.gmane.org \
--cc=will.deacon-5wv7dgnIgG8@public.gmane.org \
/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.