From: Yi Liu <yi.l.liu@intel.com>
To: Nicolin Chen <nicolinc@nvidia.com>, <jgg@nvidia.com>,
<kevin.tian@intel.com>, <will@kernel.org>
Cc: <joro@8bytes.org>, <suravee.suthikulpanit@amd.com>,
<robin.murphy@arm.com>, <dwmw2@infradead.org>,
<baolu.lu@linux.intel.com>, <shuah@kernel.org>,
<linux-kernel@vger.kernel.org>, <iommu@lists.linux.dev>,
<linux-arm-kernel@lists.infradead.org>,
<linux-kselftest@vger.kernel.org>, <eric.auger@redhat.com>,
<jean-philippe@linaro.org>, <mdf@kernel.org>,
<mshavit@google.com>, <shameerali.kolothum.thodi@huawei.com>,
<smostafa@google.com>
Subject: Re: [PATCH v2 00/19] iommufd: Add VIOMMU infrastructure (Part-1)
Date: Wed, 25 Sep 2024 18:30:20 +0800 [thread overview]
Message-ID: <bf95f910-e837-4d79-8218-18d234ece730@intel.com> (raw)
In-Reply-To: <cover.1724776335.git.nicolinc@nvidia.com>
Hi Nic,
On 2024/8/28 00:59, Nicolin Chen wrote:
> This series introduces a new VIOMMU infrastructure and related ioctls.
>
> IOMMUFD has been using the HWPT infrastructure for all cases, including a
> nested IO page table support. Yet, there're limitations for an HWPT-based
> structure to support some advanced HW-accelerated features, such as CMDQV
> on NVIDIA Grace, and HW-accelerated vIOMMU on AMD. Even for a multi-IOMMU
> environment, it is not straightforward for nested HWPTs to share the same
> parent HWPT (stage-2 IO pagetable), with the HWPT infrastructure alone.
could you elaborate a bit for the last sentence in the above paragraph?
>
> The new VIOMMU object is an additional layer, between the nested HWPT and
> its parent HWPT, to give to both the IOMMUFD core and an IOMMU driver an
> additional structure to support HW-accelerated feature:
> ----------------------------
> ---------------- | | paging_hwpt0 |
> | hwpt_nested0 |--->| viommu0 ------------------
> ---------------- | | HW-accel feats |
> ----------------------------
>
> On a multi-IOMMU system, the VIOMMU object can be instanced to the number
> of vIOMMUs in a guest VM, while holding the same parent HWPT to share the
> stage-2 IO pagetable. Each VIOMMU then just need to only allocate its own
> VMID to attach the shared stage-2 IO pagetable to the physical IOMMU:
> ----------------------------
> ---------------- | | paging_hwpt0 |
> | hwpt_nested0 |--->| viommu0 ------------------
> ---------------- | | VMID0 |
> ----------------------------
> ----------------------------
> ---------------- | | paging_hwpt0 |
> | hwpt_nested1 |--->| viommu1 ------------------
> ---------------- | | VMID1 |
> ----------------------------
>
> As an initial part-1, add ioctls to support a VIOMMU-based invalidation:
> IOMMUFD_CMD_VIOMMU_ALLOC to allocate a VIOMMU object
> IOMMUFD_CMD_VIOMMU_SET/UNSET_VDEV_ID to set/clear device's virtual ID
> (Resue IOMMUFD_CMD_HWPT_INVALIDATE for a VIOMMU object to flush cache
> by a given driver data)
>
> Worth noting that the VDEV_ID is for a per-VIOMMU device list for drivers
> to look up the device's physical instance from its virtual ID in a VM. It
> is essential for a VIOMMU-based invalidation where the request contains a
> device's virtual ID for its device cache flush, e.g. ATC invalidation.
>
> As for the implementation of the series, add an IOMMU_VIOMMU_TYPE_DEFAULT
> type for a core-allocated-core-managed VIOMMU object, allowing drivers to
> simply hook a default viommu ops for viommu-based invalidation alone. And
> provide some viommu helpers to drivers for VDEV_ID translation and parent
> domain lookup. Add VIOMMU invalidation support to ARM SMMUv3 driver for a
> real world use case. This adds supports of arm-smmuv-v3's CMDQ_OP_ATC_INV
> and CMDQ_OP_CFGI_CD/ALL commands, supplementing HWPT-based invalidations.
>
> In the future, drivers will also be able to choose a driver-managed type
> to hold its own structure by adding a new type to enum iommu_viommu_type.
> More VIOMMU-based structures and ioctls will be introduced in part-2/3 to
> support a driver-managed VIOMMU, e.g. VQUEUE object for a HW accelerated
> queue, VIRQ (or VEVENT) object for IRQ injections. Although we repurposed
> the VIOMMU object from an earlier RFC discussion, for a referece:
> https://lore.kernel.org/all/cover.1712978212.git.nicolinc@nvidia.com/
>
> This series is on Github:
> https://github.com/nicolinc/iommufd/commits/iommufd_viommu_p1-v2
> Paring QEMU branch for testing:
> https://github.com/nicolinc/qemu/commits/wip/for_iommufd_viommu_p1-v2
>
> Changelog
> v2
> * Limited vdev_id to one per idev
> * Added a rw_sem to protect the vdev_id list
> * Reworked driver-level APIs with proper lockings
> * Added a new viommu_api file for IOMMUFD_DRIVER config
> * Dropped useless iommu_dev point from the viommu structure
> * Added missing index numnbers to new types in the uAPI header
> * Dropped IOMMU_VIOMMU_INVALIDATE uAPI; Instead, reuse the HWPT one
> * Reworked mock_viommu_cache_invalidate() using the new iommu helper
> * Reordered details of set/unset_vdev_id handlers for proper lockings
> * Added arm_smmu_cache_invalidate_user patch from Jason's nesting series
> v1
> https://lore.kernel.org/all/cover.1723061377.git.nicolinc@nvidia.com/
>
> Thanks!
> Nicolin
>
> Jason Gunthorpe (3):
> iommu: Add iommu_copy_struct_from_full_user_array helper
> iommu/arm-smmu-v3: Allow ATS for IOMMU_DOMAIN_NESTED
> iommu/arm-smmu-v3: Update comments about ATS and bypass
>
> Nicolin Chen (16):
> iommufd: Reorder struct forward declarations
> iommufd/viommu: Add IOMMUFD_OBJ_VIOMMU and IOMMU_VIOMMU_ALLOC ioctl
> iommu: Pass in a viommu pointer to domain_alloc_user op
> iommufd: Allow pt_id to carry viommu_id for IOMMU_HWPT_ALLOC
> iommufd/selftest: Add IOMMU_VIOMMU_ALLOC test coverage
> iommufd/viommu: Add IOMMU_VIOMMU_SET/UNSET_VDEV_ID ioctl
> iommufd/selftest: Add IOMMU_VIOMMU_SET/UNSET_VDEV_ID test coverage
> iommufd/viommu: Add cache_invalidate for IOMMU_VIOMMU_TYPE_DEFAULT
> iommufd: Allow hwpt_id to carry viommu_id for IOMMU_HWPT_INVALIDATE
> iommufd/viommu: Add vdev_id helpers for IOMMU drivers
> iommufd/selftest: Add mock_viommu_invalidate_user op
> iommufd/selftest: Add IOMMU_TEST_OP_DEV_CHECK_CACHE test command
> iommufd/selftest: Add VIOMMU coverage for IOMMU_HWPT_INVALIDATE ioctl
> iommufd/viommu: Add iommufd_viommu_to_parent_domain helper
> iommu/arm-smmu-v3: Add arm_smmu_cache_invalidate_user
> iommu/arm-smmu-v3: Add arm_smmu_viommu_cache_invalidate
>
> drivers/iommu/amd/iommu.c | 1 +
> drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c | 218 ++++++++++++++-
> drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.h | 3 +
> drivers/iommu/intel/iommu.c | 1 +
> drivers/iommu/iommufd/Makefile | 5 +-
> drivers/iommu/iommufd/device.c | 12 +
> drivers/iommu/iommufd/hw_pagetable.c | 59 +++-
> drivers/iommu/iommufd/iommufd_private.h | 37 +++
> drivers/iommu/iommufd/iommufd_test.h | 30 ++
> drivers/iommu/iommufd/main.c | 12 +
> drivers/iommu/iommufd/selftest.c | 101 ++++++-
> drivers/iommu/iommufd/viommu.c | 196 +++++++++++++
> drivers/iommu/iommufd/viommu_api.c | 53 ++++
> include/linux/iommu.h | 56 +++-
> include/linux/iommufd.h | 51 +++-
> include/uapi/linux/iommufd.h | 117 +++++++-
> tools/testing/selftests/iommu/iommufd.c | 259 +++++++++++++++++-
> tools/testing/selftests/iommu/iommufd_utils.h | 126 +++++++++
> 18 files changed, 1299 insertions(+), 38 deletions(-)
> create mode 100644 drivers/iommu/iommufd/viommu.c
> create mode 100644 drivers/iommu/iommufd/viommu_api.c
>
--
Regards,
Yi Liu
next prev parent reply other threads:[~2024-09-25 10:25 UTC|newest]
Thread overview: 149+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-08-27 16:59 [PATCH v2 00/19] iommufd: Add VIOMMU infrastructure (Part-1) Nicolin Chen
2024-08-27 16:59 ` [PATCH v2 01/19] iommufd: Reorder struct forward declarations Nicolin Chen
2024-09-05 15:44 ` Jason Gunthorpe
2024-08-27 16:59 ` [PATCH v2 02/19] iommufd/viommu: Add IOMMUFD_OBJ_VIOMMU and IOMMU_VIOMMU_ALLOC ioctl Nicolin Chen
2024-09-01 2:39 ` Baolu Lu
2024-09-02 5:27 ` Nicolin Chen
2024-09-04 16:26 ` Jason Gunthorpe
2024-09-04 17:29 ` Nicolin Chen
2024-09-04 23:37 ` Jason Gunthorpe
2024-09-05 3:07 ` Nicolin Chen
2024-09-12 3:39 ` Nicolin Chen
2024-09-15 21:10 ` Jason Gunthorpe
2024-09-05 15:53 ` Jason Gunthorpe
2024-09-05 17:10 ` Nicolin Chen
2024-09-05 17:41 ` Jason Gunthorpe
2024-09-05 18:04 ` Nicolin Chen
2024-08-27 16:59 ` [PATCH v2 03/19] iommu: Pass in a viommu pointer to domain_alloc_user op Nicolin Chen
2024-09-05 15:54 ` Jason Gunthorpe
2024-09-05 17:19 ` Nicolin Chen
2024-08-27 16:59 ` [PATCH v2 04/19] iommufd: Allow pt_id to carry viommu_id for IOMMU_HWPT_ALLOC Nicolin Chen
2024-09-05 15:56 ` Jason Gunthorpe
2024-09-26 8:50 ` Yi Liu
2024-09-26 20:10 ` Nicolin Chen
2024-09-27 0:43 ` Tian, Kevin
2024-09-27 1:25 ` Nicolin Chen
2024-09-27 2:23 ` Tian, Kevin
2024-09-27 2:57 ` Nicolin Chen
2024-09-27 5:38 ` Yi Liu
2024-09-27 6:02 ` Nicolin Chen
2024-09-27 11:59 ` Jason Gunthorpe
2024-09-27 19:52 ` Nicolin Chen
2024-09-27 12:12 ` Yi Liu
2024-09-27 20:29 ` Nicolin Chen
2024-08-27 16:59 ` [PATCH v2 05/19] iommufd/selftest: Add IOMMU_VIOMMU_ALLOC test coverage Nicolin Chen
2024-08-27 16:59 ` [PATCH v2 06/19] iommufd/viommu: Add IOMMU_VIOMMU_SET/UNSET_VDEV_ID ioctl Nicolin Chen
2024-09-05 16:03 ` Jason Gunthorpe
2024-09-05 17:37 ` Nicolin Chen
2024-09-05 17:43 ` Jason Gunthorpe
2024-09-05 20:14 ` Nicolin Chen
2024-09-11 6:19 ` Tian, Kevin
2024-09-11 7:11 ` Nicolin Chen
2024-09-11 7:18 ` Tian, Kevin
2024-09-11 7:47 ` Nicolin Chen
2024-10-01 8:54 ` Nicolin Chen
2024-10-01 13:46 ` Jason Gunthorpe
2024-10-01 18:45 ` Nicolin Chen
2024-09-27 13:50 ` Mostafa Saleh
2024-09-27 14:01 ` Jason Gunthorpe
2024-09-27 14:22 ` Mostafa Saleh
2024-09-27 14:58 ` Jason Gunthorpe
2024-09-27 15:59 ` Mostafa Saleh
2024-10-04 4:32 ` Alexey Kardashevskiy
2024-10-04 5:33 ` Nicolin Chen
2024-10-04 11:41 ` Jason Gunthorpe
2024-10-04 18:13 ` Nicolin Chen
2024-10-04 18:50 ` Jason Gunthorpe
2024-10-04 19:25 ` Nicolin Chen
2024-10-04 20:17 ` Jason Gunthorpe
2024-10-04 20:33 ` Nicolin Chen
2024-10-07 17:18 ` Jason Gunthorpe
2025-04-30 7:54 ` Alexey Kardashevskiy
2025-04-30 7:58 ` Nicolin Chen
2025-05-05 17:08 ` Jason Gunthorpe
2025-05-06 2:53 ` Nicolin Chen
2025-05-06 4:35 ` Alexey Kardashevskiy
2025-05-06 4:46 ` Tian, Kevin
2025-05-06 12:58 ` Jason Gunthorpe
2025-05-06 19:55 ` Nicolin Chen
2025-05-07 12:28 ` Jason Gunthorpe
2025-05-07 11:18 ` Alexey Kardashevskiy
2025-05-07 12:24 ` Jason Gunthorpe
2025-05-09 2:57 ` Alexey Kardashevskiy
2025-05-09 22:07 ` Jason Gunthorpe
2025-05-10 12:51 ` Alexey Kardashevskiy
2025-05-12 15:31 ` Jason Gunthorpe
2024-08-27 16:59 ` [PATCH v2 07/19] iommufd/selftest: Add IOMMU_VIOMMU_SET/UNSET_VDEV_ID test coverage Nicolin Chen
2024-08-27 16:59 ` [PATCH v2 08/19] iommufd/viommu: Add cache_invalidate for IOMMU_VIOMMU_TYPE_DEFAULT Nicolin Chen
2024-09-05 16:05 ` Jason Gunthorpe
2024-08-27 16:59 ` [PATCH v2 09/19] iommufd: Allow hwpt_id to carry viommu_id for IOMMU_HWPT_INVALIDATE Nicolin Chen
2024-09-05 16:10 ` Jason Gunthorpe
2024-08-27 16:59 ` [PATCH v2 10/19] iommufd/viommu: Add vdev_id helpers for IOMMU drivers Nicolin Chen
2024-09-05 16:14 ` Jason Gunthorpe
2024-09-05 17:53 ` Nicolin Chen
2024-09-11 23:11 ` Jason Gunthorpe
2024-09-12 3:17 ` Nicolin Chen
2024-10-05 5:19 ` Nicolin Chen
2024-10-07 15:38 ` Jason Gunthorpe
2024-10-07 16:36 ` Nicolin Chen
2024-10-07 17:11 ` Jason Gunthorpe
2024-10-07 17:25 ` Nicolin Chen
2024-10-07 18:28 ` Jason Gunthorpe
2024-10-07 19:56 ` Nicolin Chen
2024-08-27 16:59 ` [PATCH v2 11/19] iommu: Add iommu_copy_struct_from_full_user_array helper Nicolin Chen
2024-08-27 16:59 ` [PATCH v2 12/19] iommufd/selftest: Add mock_viommu_invalidate_user op Nicolin Chen
2024-08-27 16:59 ` [PATCH v2 13/19] iommufd/selftest: Add IOMMU_TEST_OP_DEV_CHECK_CACHE test command Nicolin Chen
2024-08-27 16:59 ` [PATCH v2 14/19] iommufd/selftest: Add VIOMMU coverage for IOMMU_HWPT_INVALIDATE ioctl Nicolin Chen
2024-08-27 16:59 ` [PATCH v2 15/19] iommufd/viommu: Add iommufd_viommu_to_parent_domain helper Nicolin Chen
2024-08-27 16:59 ` [PATCH v2 16/19] iommu/arm-smmu-v3: Add arm_smmu_cache_invalidate_user Nicolin Chen
2024-09-05 16:23 ` Jason Gunthorpe
2024-09-05 17:56 ` Nicolin Chen
2024-08-27 16:59 ` [PATCH v2 17/19] iommu/arm-smmu-v3: Add arm_smmu_viommu_cache_invalidate Nicolin Chen
2024-09-05 16:20 ` Jason Gunthorpe
2024-09-05 18:00 ` Nicolin Chen
2024-09-05 18:21 ` Jason Gunthorpe
2024-09-11 6:25 ` Tian, Kevin
2024-09-11 7:20 ` Nicolin Chen
2024-09-11 7:50 ` Baolu Lu
2024-09-11 8:17 ` Tian, Kevin
2024-09-11 8:19 ` Baolu Lu
2024-09-11 21:08 ` Nicolin Chen
2024-09-12 4:45 ` Baolu Lu
2024-09-11 8:13 ` Tian, Kevin
2024-09-11 20:53 ` Nicolin Chen
2024-09-11 23:07 ` Jason Gunthorpe
2024-09-13 2:33 ` Tian, Kevin
2024-09-14 14:50 ` Jason Gunthorpe
2024-09-18 8:10 ` Tian, Kevin
2024-09-23 18:34 ` Jason Gunthorpe
2024-09-11 23:00 ` Jason Gunthorpe
2024-08-27 16:59 ` [PATCH v2 18/19] iommu/arm-smmu-v3: Allow ATS for IOMMU_DOMAIN_NESTED Nicolin Chen
2024-08-27 16:59 ` [PATCH v2 19/19] iommu/arm-smmu-v3: Update comments about ATS and bypass Nicolin Chen
2024-09-11 6:12 ` [PATCH v2 00/19] iommufd: Add VIOMMU infrastructure (Part-1) Tian, Kevin
2024-09-11 7:08 ` Nicolin Chen
2024-09-11 7:18 ` Tian, Kevin
2024-09-11 7:40 ` Nicolin Chen
2024-09-11 8:08 ` Tian, Kevin
2024-09-11 20:21 ` Nicolin Chen
2024-10-01 1:55 ` Alexey Kardashevskiy
2024-10-01 3:36 ` Nicolin Chen
2024-10-01 5:06 ` Alexey Kardashevskiy
2024-10-01 13:44 ` Jason Gunthorpe
2024-09-25 10:30 ` Yi Liu [this message]
2024-09-25 18:55 ` Nicolin Chen
2024-09-26 8:47 ` Yi Liu
2024-09-26 20:03 ` Nicolin Chen
2024-09-27 2:05 ` Baolu Lu
2024-09-27 6:14 ` Yi Liu
2024-09-27 5:54 ` Yi Liu
2024-09-27 6:32 ` Nicolin Chen
2024-09-27 12:12 ` Yi Liu
2024-09-27 12:20 ` Jason Gunthorpe
2024-09-29 7:19 ` Yi Liu
2024-10-01 13:48 ` Jason Gunthorpe
2024-10-01 18:40 ` Nicolin Chen
2024-09-27 20:44 ` Nicolin Chen
2024-09-29 7:16 ` Yi Liu
2024-09-30 21:59 ` Nicolin Chen
2024-10-09 7:20 ` Yi Liu
2024-10-09 12:31 ` Jason Gunthorpe
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=bf95f910-e837-4d79-8218-18d234ece730@intel.com \
--to=yi.l.liu@intel.com \
--cc=baolu.lu@linux.intel.com \
--cc=dwmw2@infradead.org \
--cc=eric.auger@redhat.com \
--cc=iommu@lists.linux.dev \
--cc=jean-philippe@linaro.org \
--cc=jgg@nvidia.com \
--cc=joro@8bytes.org \
--cc=kevin.tian@intel.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-kselftest@vger.kernel.org \
--cc=mdf@kernel.org \
--cc=mshavit@google.com \
--cc=nicolinc@nvidia.com \
--cc=robin.murphy@arm.com \
--cc=shameerali.kolothum.thodi@huawei.com \
--cc=shuah@kernel.org \
--cc=smostafa@google.com \
--cc=suravee.suthikulpanit@amd.com \
--cc=will@kernel.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.