All of lore.kernel.org
 help / color / mirror / Atom feed
From: Nicolin Chen <nicolinc@nvidia.com>
To: <jgg@nvidia.com>, <kevin.tian@intel.com>, <joro@8bytes.org>,
	<will@kernel.org>, <robin.murphy@arm.com>,
	<alex.williamson@redhat.com>, <shuah@kernel.org>
Cc: <yi.l.liu@intel.com>, <linux-kernel@vger.kernel.org>,
	<iommu@lists.linux.dev>, <kvm@vger.kernel.org>,
	<linux-kselftest@vger.kernel.org>, <baolu.lu@linux.intel.com>
Subject: [PATCH v1 0/8] Add IO page table replacement support
Date: Wed, 1 Feb 2023 23:05:04 -0800	[thread overview]
Message-ID: <cover.1675320212.git.nicolinc@nvidia.com> (raw)

Hi all,

The existing IOMMU APIs provide a pair of functions: iommu_attach_group()
for callers to attach a device from the default_domain (NULL if not being
supported) to a given iommu domain, and iommu_detach_group() for callers
to detach a device from a given domain to the default_domain. Internally,
the detach_dev op is deprecated for the newer drivers with default_domain.
This means that those drivers likely can switch an attaching domain to
another one, without stagging the device at a blocking or default domain,
for use cases such as:
1) vPASID mode, when a guest wants to replace a single pasid (PASID=0)
   table with a larger table (PASID=N)
2) Nesting mode, when switching the attaching device from an S2 domain
   to an S1 domain, or when switching between relevant S1 domains.

This series introduces a new iommu_group_replace_domain() for that. And
add corresponding support throughout the uAPI. So user space can do such
a REPLACE ioctl reusing the existing VFIO_DEVICE_ATTACH_IOMMUFD_PT. This
means that user space needs to be aware whether the device is attached or
not: an unattached device calling VFIO_DEVICE_ATTACH_IOMMUFD_PT means a
regular ATTACH; an attached device calling VFIO_DEVICE_ATTACH_IOMMUFD_PT
on the other hand means a REPLACE.

QEMU with this feature should have the vIOMMU maintain a cache of the
guest io page table addresses and assign a unique IOAS to each unique
guest page table.

As the guest writes the page table address to the HW registers qemu should
then use the 'replace domain' operation on VFIO to assign the VFIO device
to the correct de-duplicated page table.

The algorithm where QEMU uses one VFIO container per-device and removes
all the mappings to change the assignment should ideally not be used with
iommufd.

To apply this series, please rebase on top of the following patches:
1) [PATCH 00/13] Add vfio_device cdev for iommufd support
   https://lore.kernel.org/kvm/20230117134942.101112-1-yi.l.liu@intel.com/
2) (Merged) [PATCH v5 0/5] iommu: Retire detach_dev callback
   https://lore.kernel.org/linux-iommu/20230110025408.667767-1-baolu.lu@linux.intel.com/
3) (Merged) [PATCH] selftests: iommu: Fix test_cmd_destroy_access() call in user_copy
   https://lore.kernel.org/lkml/20230120074204.1368-1-nicolinc@nvidia.com/

Or you can also find this series on Github:
https://github.com/nicolinc/iommufd/commits/iommu_group_replace_domain-v1

Thank you
Nicolin Chen

Nicolin Chen (7):
  iommu: Introduce a new iommu_group_replace_domain() API
  iommufd: Create access in vfio_iommufd_emulated_bind()
  iommufd/selftest: Add IOMMU_TEST_OP_ACCESS_SET_IOAS coverage
  iommufd: Add replace support in iommufd_access_set_ioas()
  iommufd/selftest: Add coverage for access->ioas replacement
  iommufd/device: Use iommu_group_replace_domain()
  vfio-iommufd: Support IO page table replacement

Yi Liu (1):
  iommu: Move dev_iommu_ops() to private header

 drivers/iommu/iommu-priv.h                    |  22 +++
 drivers/iommu/iommu.c                         |  32 ++++
 drivers/iommu/iommufd/device.c                | 150 +++++++++++++++---
 drivers/iommu/iommufd/iommufd_private.h       |   4 +
 drivers/iommu/iommufd/iommufd_test.h          |   4 +
 drivers/iommu/iommufd/selftest.c              |  25 ++-
 drivers/vfio/iommufd.c                        |  33 ++--
 include/linux/iommu.h                         |  11 --
 include/linux/iommufd.h                       |   4 +-
 tools/testing/selftests/iommu/iommufd.c       |  29 +++-
 tools/testing/selftests/iommu/iommufd_utils.h |  22 ++-
 11 files changed, 273 insertions(+), 63 deletions(-)
 create mode 100644 drivers/iommu/iommu-priv.h

-- 
2.39.1


             reply	other threads:[~2023-02-02  7:05 UTC|newest]

Thread overview: 41+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-02-02  7:05 Nicolin Chen [this message]
2023-02-02  7:05 ` [PATCH v1 1/8] iommu: Move dev_iommu_ops() to private header Nicolin Chen
2023-02-02  7:05 ` [PATCH v1 2/8] iommu: Introduce a new iommu_group_replace_domain() API Nicolin Chen
2023-02-02 10:21   ` Baolu Lu
2023-02-02 19:14     ` Nicolin Chen
2023-02-03  1:33       ` Baolu Lu
2023-02-03  1:41         ` Nicolin Chen
2023-02-03  2:35           ` Baolu Lu
2023-02-03  8:26   ` Tian, Kevin
2023-02-03 15:03     ` Jason Gunthorpe
2023-02-03 17:53       ` Nicolin Chen
2023-02-06  6:57       ` Tian, Kevin
2023-02-06 13:25         ` Jason Gunthorpe
2023-02-07  0:32           ` Tian, Kevin
2023-02-07 12:22             ` Jason Gunthorpe
2023-02-08  4:25               ` Tian, Kevin
2023-02-08 12:42                 ` Jason Gunthorpe
2023-02-07 19:16           ` Nicolin Chen
2023-02-03 17:45     ` Nicolin Chen
2023-02-06  6:40       ` Tian, Kevin
2023-02-02  7:05 ` [PATCH v1 3/8] iommufd: Create access in vfio_iommufd_emulated_bind() Nicolin Chen
2023-02-03  9:23   ` Tian, Kevin
2023-02-03  9:28   ` Tian, Kevin
2023-02-02  7:05 ` [PATCH v1 4/8] iommufd/selftest: Add IOMMU_TEST_OP_ACCESS_SET_IOAS coverage Nicolin Chen
2023-02-02  7:05 ` [PATCH v1 5/8] iommufd: Add replace support in iommufd_access_set_ioas() Nicolin Chen
2023-02-03 10:10   ` Tian, Kevin
2023-02-03 12:31     ` Jason Gunthorpe
2023-02-03 22:25       ` Nicolin Chen
2023-02-02  7:05 ` [PATCH v1 6/8] iommufd/selftest: Add coverage for access->ioas replacement Nicolin Chen
2023-02-02  7:05 ` [PATCH v1 7/8] iommufd/device: Use iommu_group_replace_domain() Nicolin Chen
2023-02-06  8:46   ` Tian, Kevin
2023-02-06 19:17     ` Nicolin Chen
2023-02-07  0:37       ` Tian, Kevin
2023-02-02  7:05 ` [PATCH v1 8/8] vfio-iommufd: Support IO page table replacement Nicolin Chen
2023-02-06  8:49   ` Tian, Kevin
2023-02-06 18:54     ` Nicolin Chen
2023-02-03  8:09 ` [PATCH v1 0/8] Add IO page table replacement support Tian, Kevin
2023-02-03 15:04   ` Jason Gunthorpe
2023-02-06  6:39     ` Tian, Kevin
2023-02-06 13:26       ` Jason Gunthorpe
2023-02-07  0:34         ` 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=cover.1675320212.git.nicolinc@nvidia.com \
    --to=nicolinc@nvidia.com \
    --cc=alex.williamson@redhat.com \
    --cc=baolu.lu@linux.intel.com \
    --cc=iommu@lists.linux.dev \
    --cc=jgg@nvidia.com \
    --cc=joro@8bytes.org \
    --cc=kevin.tian@intel.com \
    --cc=kvm@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-kselftest@vger.kernel.org \
    --cc=robin.murphy@arm.com \
    --cc=shuah@kernel.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.