Virtualization Archive mirror
 help / color / mirror / Atom feed
From: Lu Baolu <baolu.lu@linux.intel.com>
To: Jason Gunthorpe <jgg@ziepe.ca>, Kevin Tian <kevin.tian@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>, Yi Liu <yi.l.liu@intel.com>,
	Jacob Pan <jacob.jun.pan@linux.intel.com>,
	Joel Granados <j.granados@samsung.com>
Cc: iommu@lists.linux.dev, virtualization@lists.linux-foundation.org,
	linux-kernel@vger.kernel.org, Lu Baolu <baolu.lu@linux.intel.com>
Subject: [PATCH v5 0/9] IOMMUFD: Deliver IO page faults to user space
Date: Tue, 30 Apr 2024 22:57:01 +0800	[thread overview]
Message-ID: <20240430145710.68112-1-baolu.lu@linux.intel.com> (raw)

This series implements the functionality of delivering IO page faults to
user space through the IOMMUFD framework. One feasible use case is the
nested translation. Nested translation is a hardware feature that
supports two-stage translation tables for IOMMU. The second-stage
translation table is managed by the host VMM, while the first-stage
translation table is owned by user space. This allows user space to
control the IOMMU mappings for its devices.

When an IO page fault occurs on the first-stage translation table, the
IOMMU hardware can deliver the page fault to user space through the
IOMMUFD framework. User space can then handle the page fault and respond
to the device top-down through the IOMMUFD. This allows user space to
implement its own IO page fault handling policies.

User space application that is capable of handling IO page faults should
allocate a fault object, and bind the fault object to any domain that it
is willing to handle the fault generatd for them. On a successful return
of fault object allocation, the user can retrieve and respond to page
faults by reading or writing to the file descriptor (FD) returned.

The iommu selftest framework has been updated to test the IO page fault
delivery and response functionality.

The series and related patches are available on GitHub:
https://github.com/LuBaolu/intel-iommu/commits/iommufd-io-pgfault-delivery-v5

Change log:
v5:
 - Removed attach handle reference count from the core. Drivers will now
   synchronize their use of handles and domain attach/detach.
 - Automatically responds to all outstanding faults in hwpt detach or
   replace paths.
 - Supports getting a domain-type specific attach handle.
 - Reorganized the series by changing the patch order.
 - Miscellaneous cleanup.

v4: https://lore.kernel.org/linux-iommu/20240403011519.78512-1-baolu.lu@linux.intel.com/
 - Add the iommu domain attachment handle to replace the iopf-specific
   domain attachment interfaces introduced in the previous v3.
 - Replace the iommu_sva with iommu domain attachment handle.
 - Refine some fields in the fault and response message encoding
   according to feedback collected during v3 review period.
 - Refine and fix some problems in the fault FD implementation.
 - Miscellaneous cleanup.

v3: https://lore.kernel.org/linux-iommu/20240122073903.24406-1-baolu.lu@linux.intel.com/
 - Add iopf domain attach/detach/replace interfaces to manage the
   reference counters of hwpt and device, ensuring that both can only be
   destroyed after all outstanding IOPFs have been responded to. 
 - Relocate the fault handling file descriptor from hwpt to a fault
   object to enable a single fault handling object to be utilized
   across multiple domains.
 - Miscellaneous cleanup and performance improvements.

v2: https://lore.kernel.org/linux-iommu/20231026024930.382898-1-baolu.lu@linux.intel.com/
 - Move all iommu refactoring patches into a sparated series and discuss
   it in a different thread. The latest patch series [v6] is available at
   https://lore.kernel.org/linux-iommu/20230928042734.16134-1-baolu.lu@linux.intel.com/
 - We discussed the timeout of the pending page fault messages. We
   agreed that we shouldn't apply any timeout policy for the page fault
   handling in user space.
   https://lore.kernel.org/linux-iommu/20230616113232.GA84678@myrica/
 - Jason suggested that we adopt a simple file descriptor interface for
   reading and responding to I/O page requests, so that user space
   applications can improve performance using io_uring.
   https://lore.kernel.org/linux-iommu/ZJWjD1ajeem6pK3I@ziepe.ca/

v1: https://lore.kernel.org/linux-iommu/20230530053724.232765-1-baolu.lu@linux.intel.com/

Lu Baolu (9):
  iommu: Introduce domain attachment handle
  iommu: Replace sva_iommu with iommu_attach_handle
  iommu: Add attachment handle to struct iopf_group
  iommufd: Add fault and response message definitions
  iommufd: Add iommufd fault object
  iommufd: Fault-capable hwpt attach/detach/replace
  iommufd: Associate fault object with iommufd_hw_pgtable
  iommufd/selftest: Add IOPF support for mock device
  iommufd/selftest: Add coverage for IOPF test

 include/linux/iommu.h                         |  32 +-
 include/linux/uacce.h                         |   2 +-
 drivers/dma/idxd/idxd.h                       |   2 +-
 drivers/iommu/iommu-priv.h                    |  17 +
 drivers/iommu/iommufd/iommufd_private.h       |  43 ++
 drivers/iommu/iommufd/iommufd_test.h          |   8 +
 include/uapi/linux/iommufd.h                  | 122 ++++++
 tools/testing/selftests/iommu/iommufd_utils.h |  84 +++-
 drivers/dma/idxd/cdev.c                       |   4 +-
 drivers/iommu/io-pgfault.c                    |  34 +-
 drivers/iommu/iommu-sva.c                     |  43 +-
 drivers/iommu/iommu.c                         | 156 +++++++-
 drivers/iommu/iommufd/device.c                |  16 +-
 drivers/iommu/iommufd/fault.c                 | 373 ++++++++++++++++++
 drivers/iommu/iommufd/hw_pagetable.c          |  35 +-
 drivers/iommu/iommufd/main.c                  |   8 +-
 drivers/iommu/iommufd/selftest.c              |  63 +++
 drivers/misc/uacce/uacce.c                    |   2 +-
 tools/testing/selftests/iommu/iommufd.c       |  18 +
 .../selftests/iommu/iommufd_fail_nth.c        |   2 +-
 drivers/iommu/iommufd/Makefile                |   1 +
 21 files changed, 959 insertions(+), 106 deletions(-)
 create mode 100644 drivers/iommu/iommufd/fault.c

-- 
2.34.1


             reply	other threads:[~2024-04-30 14:58 UTC|newest]

Thread overview: 63+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-04-30 14:57 Lu Baolu [this message]
2024-04-30 14:57 ` [PATCH v5 1/9] iommu: Introduce domain attachment handle Lu Baolu
2024-05-15  7:17   ` Tian, Kevin
2024-05-19 10:07     ` Baolu Lu
2024-04-30 14:57 ` [PATCH v5 2/9] iommu: Replace sva_iommu with iommu_attach_handle Lu Baolu
2024-05-07 23:58   ` Jason Gunthorpe
2024-05-15  7:21   ` Tian, Kevin
2024-05-19 10:14     ` Baolu Lu
2024-05-20  3:18       ` Tian, Kevin
2024-04-30 14:57 ` [PATCH v5 3/9] iommu: Add attachment handle to struct iopf_group Lu Baolu
2024-05-08  0:04   ` Jason Gunthorpe
2024-05-10  3:14     ` Baolu Lu
2024-05-10 13:38       ` Jason Gunthorpe
2024-05-10 14:30         ` Baolu Lu
2024-05-10 16:28           ` Jason Gunthorpe
2024-05-15  7:28             ` Tian, Kevin
2024-05-15  7:31   ` Tian, Kevin
2024-05-19 14:03     ` Baolu Lu
2024-05-20  3:20       ` Tian, Kevin
2024-04-30 14:57 ` [PATCH v5 4/9] iommufd: Add fault and response message definitions Lu Baolu
2024-05-15  7:43   ` Tian, Kevin
2024-05-19 14:37     ` Baolu Lu
2024-05-20  3:24       ` Tian, Kevin
2024-05-20  3:33         ` Baolu Lu
2024-05-20  4:59           ` Tian, Kevin
2024-05-24 14:15             ` Jason Gunthorpe
2024-05-27  1:27               ` Tian, Kevin
2024-04-30 14:57 ` [PATCH v5 5/9] iommufd: Add iommufd fault object Lu Baolu
2024-05-08  0:11   ` Jason Gunthorpe
2024-05-08 10:05     ` Baolu Lu
2024-05-15  7:57       ` Tian, Kevin
2024-05-20  0:41         ` Baolu Lu
2024-05-20  3:26           ` Tian, Kevin
2024-05-20  3:28             ` Baolu Lu
2024-05-08  0:22   ` Jason Gunthorpe
2024-05-10  9:13     ` Baolu Lu
2024-05-15  8:37   ` Tian, Kevin
2024-05-20  1:15     ` Baolu Lu
2024-05-20  1:24     ` Baolu Lu
2024-05-24 14:16       ` Jason Gunthorpe
2024-05-20  1:33     ` Baolu Lu
2024-05-20  3:33       ` Tian, Kevin
2024-05-20  1:38     ` Baolu Lu
2024-04-30 14:57 ` [PATCH v5 6/9] iommufd: Fault-capable hwpt attach/detach/replace Lu Baolu
2024-05-08  0:18   ` Jason Gunthorpe
2024-05-10  3:20     ` Baolu Lu
2024-05-10 13:39       ` Jason Gunthorpe
2024-05-15  8:43   ` Tian, Kevin
2024-05-20  2:10     ` Baolu Lu
2024-05-20  3:35       ` Tian, Kevin
2024-05-20  3:55         ` Baolu Lu
2024-04-30 14:57 ` [PATCH v5 7/9] iommufd: Associate fault object with iommufd_hw_pgtable Lu Baolu
2024-05-08  0:25   ` Jason Gunthorpe
2024-05-10  3:23     ` Baolu Lu
2024-05-15  8:50   ` Tian, Kevin
2024-05-20  2:18     ` Baolu Lu
2024-05-20  3:39       ` Tian, Kevin
2024-05-20  4:00         ` Baolu Lu
2024-05-24 14:24         ` Jason Gunthorpe
2024-05-27  1:33           ` Tian, Kevin
2024-05-27  3:16             ` Baolu Lu
2024-04-30 14:57 ` [PATCH v5 8/9] iommufd/selftest: Add IOPF support for mock device Lu Baolu
2024-04-30 14:57 ` [PATCH v5 9/9] iommufd/selftest: Add coverage for IOPF test 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=20240430145710.68112-1-baolu.lu@linux.intel.com \
    --to=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=jgg@ziepe.ca \
    --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;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).