From: Nicolin Chen <nicolinc@nvidia.com>
To: <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>, <yi.l.liu@intel.com>, <aik@amd.com>,
<patches@lists.linux.dev>
Subject: [PATCH v3 00/16] cover-letter: iommufd: Add vIOMMU infrastructure (Part-2: vDEVICE)
Date: Wed, 9 Oct 2024 09:38:12 -0700 [thread overview]
Message-ID: <cover.1728491532.git.nicolinc@nvidia.com> (raw)
In-Reply-To: <cover.1728491453.git.nicolinc@nvidia.com>
Following the previous vIOMMU series, this adds another vDEVICE structure,
representing the association from an iommufd_device to an iommufd_viommu.
This gives the whole architecture a new "v" layer:
_______________________________________________________________________
| iommufd (with vIOMMU/vDEVICE) |
| _____________ _____________ |
| | | | | |
| |----------------| vIOMMU |<---| vDEVICE |<------| |
| | | | |_____________| | |
| | ______ | | _____________ ___|____ |
| | | | | | | | | | |
| | | IOAS |<---|(HWPT_PAGING)|<---| HWPT_NESTED |<--| DEVICE | |
| | |______| |_____________| |_____________| |________| |
|______|________|______________|__________________|_______________|_____|
| | | | |
______v_____ | ______v_____ ______v_____ ___v__
| struct | | PFN | (paging) | | (nested) | |struct|
|iommu_device| |------>|iommu_domain|<----|iommu_domain|<----|device|
|____________| storage|____________| |____________| |______|
This vDEVICE object is used to collect and store all vIOMMU-related device
information/attributes in a VM. As an initial series for vDEVICE, add only
the virt_id to the vDEVICE, which is a vIOMMU specific device ID in a VM:
e.g. vSID of ARM SMMUv3, vDeviceID of AMD IOMMU, and vID of Intel VT-d to
a Context Table. This virt_id helps IOMMU drivers to link the vID to a pID
of the device against the physical IOMMU instance. This is essential for a
vIOMMU-based invalidation, where the request contains a device's vID for a
device cache flush, e.g. ATC invalidation.
Therefore, with this vDEVICE object, support a vIOMMU-based invalidation,
by reusing IOMMUFD_CMD_HWPT_INVALIDATE for a vIOMMU object to flush cache
with a given driver data.
As for the implementation of the series, add driver support in ARM SMMUv3
for a real world use case.
This series is on Github:
https://github.com/nicolinc/iommufd/commits/iommufd_viommu_p2-v3
Paring QEMU branch for testing:
https://github.com/nicolinc/qemu/commits/wip/for_iommufd_viommu_p2-v3
Changelog
v3
* Added Jason's Reviewed-by
* Split this invalidation part out of the part-1 series
* Repurposed VDEV_ID ioctl to a wider vDEVICE structure and ioctl
* Reduced viommu_api functions by allowing drivers to access viommu
and vdevice structure directly
* Dropped vdevs_rwsem by using xa_lock instead
* Dropped arm_smmu_cache_invalidate_user
v2
https://lore.kernel.org/all/cover.1724776335.git.nicolinc@nvidia.com/
* 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
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 (13):
iommufd/viommu: Introduce IOMMUFD_OBJ_VDEVICE and its related struct
iommufd/viommu: Add a default_viommu_ops for IOMMU_VIOMMU_TYPE_DEFAULT
iommufd/viommu: Add IOMMU_VDEVICE_ALLOC ioctl
iommufd/selftest: Add IOMMU_VDEVICE_ALLOC test coverage
iommu/viommu: Add cache_invalidate for IOMMU_VIOMMU_TYPE_DEFAULT
iommufd/hw_pagetable: Allow viommu->ops->cache_invalidate for
hwpt_nested
iommufd: Allow hwpt_id to carry viommu_id for IOMMU_HWPT_INVALIDATE
iommufd/viommu: Add vdev_to_dev helper
iommufd/selftest: Add mock_viommu_cache_invalidate
iommufd/selftest: Add IOMMU_TEST_OP_DEV_CHECK_CACHE test command
iommufd/selftest: Add vIOMMU coverage for IOMMU_HWPT_INVALIDATE ioctl
Documentation: userspace-api: iommufd: Update vDEVICE
iommu/arm-smmu-v3: Add arm_vsmmu_cache_invalidate
drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.h | 9 +-
drivers/iommu/iommufd/iommufd_private.h | 12 ++
drivers/iommu/iommufd/iommufd_test.h | 30 +++
include/linux/iommu.h | 53 ++++-
include/linux/iommufd.h | 50 +++++
include/uapi/linux/iommufd.h | 61 +++++-
tools/testing/selftests/iommu/iommufd_utils.h | 83 +++++++
.../arm/arm-smmu-v3/arm-smmu-v3-iommufd.c | 162 +++++++++++++-
drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c | 50 +++--
drivers/iommu/iommufd/hw_pagetable.c | 45 +++-
drivers/iommu/iommufd/main.c | 6 +
drivers/iommu/iommufd/selftest.c | 122 ++++++++++-
drivers/iommu/iommufd/viommu.c | 93 +++++++-
drivers/iommu/iommufd/viommu_api.c | 21 ++
tools/testing/selftests/iommu/iommufd.c | 204 +++++++++++++++++-
Documentation/userspace-api/iommufd.rst | 58 +++--
16 files changed, 1007 insertions(+), 52 deletions(-)
--
2.43.0
next prev parent reply other threads:[~2024-10-09 16:39 UTC|newest]
Thread overview: 92+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-10-09 16:38 [PATCH v3 00/11] cover-letter: iommufd: Add vIOMMU infrastructure (Part-1) Nicolin Chen
2024-10-09 16:38 ` [PATCH v3 01/11] iommufd: Move struct iommufd_object to public iommufd header Nicolin Chen
2024-10-09 16:38 ` [PATCH v3 02/11] iommufd: Rename _iommufd_object_alloc to iommufd_object_alloc_elm Nicolin Chen
2024-10-17 14:14 ` Jason Gunthorpe
2024-10-17 15:37 ` Jason Gunthorpe
2024-10-17 16:12 ` Nicolin Chen
2024-10-17 16:35 ` Jason Gunthorpe
2024-10-17 16:48 ` Nicolin Chen
2024-10-17 16:54 ` Jason Gunthorpe
2024-10-21 1:26 ` Alexey Kardashevskiy
2024-10-21 18:21 ` Nicolin Chen
2024-10-09 16:38 ` [PATCH v3 03/11] iommufd: Introduce IOMMUFD_OBJ_VIOMMU and its related struct Nicolin Chen
2024-10-12 3:23 ` Zhangfei Gao
2024-10-12 4:49 ` Nicolin Chen
2024-10-12 10:18 ` Zhangfei Gao
2024-10-14 7:58 ` Zhangfei Gao
2024-10-14 15:46 ` Nicolin Chen
2024-10-15 1:15 ` Zhangfei Gao
2024-10-15 2:01 ` Nicolin Chen
2024-10-15 18:44 ` Nicolin Chen
2024-10-16 1:56 ` Zhangfei Gao
2024-10-16 6:51 ` Nicolin Chen
2024-10-16 7:08 ` Zhangfei Gao
2024-10-17 16:33 ` Jason Gunthorpe
2024-10-17 17:01 ` Nicolin Chen
2024-10-17 17:07 ` Jason Gunthorpe
2024-10-09 16:38 ` [PATCH v3 04/11] iommufd/viommu: Add IOMMU_VIOMMU_ALLOC ioctl Nicolin Chen
2024-10-16 6:38 ` Nicolin Chen
2024-10-17 16:40 ` Jason Gunthorpe
2024-10-21 8:11 ` Alexey Kardashevskiy
2024-10-21 12:19 ` Jason Gunthorpe
2024-10-21 23:41 ` Nicolin Chen
2024-10-09 16:38 ` [PATCH v3 05/11] iommu: Pass in a viommu pointer to domain_alloc_user op Nicolin Chen
2024-10-17 16:51 ` Jason Gunthorpe
2024-10-17 17:21 ` Nicolin Chen
2024-10-17 17:38 ` Jason Gunthorpe
2024-10-17 17:40 ` Nicolin Chen
2024-10-09 16:38 ` [PATCH v3 06/11] iommufd: Allow pt_id to carry viommu_id for IOMMU_HWPT_ALLOC Nicolin Chen
2024-10-17 17:06 ` Jason Gunthorpe
2024-10-09 16:38 ` [PATCH v3 07/11] iommufd/selftest: Add refcount to mock_iommu_device Nicolin Chen
2024-10-17 17:13 ` Jason Gunthorpe
2024-10-09 16:38 ` [PATCH v3 08/11] iommufd/selftest: Add IOMMU_VIOMMU_TYPE_SELFTEST Nicolin Chen
2024-10-17 17:15 ` Jason Gunthorpe
2024-10-17 17:25 ` Nicolin Chen
2024-10-09 16:38 ` [PATCH v3 09/11] iommufd/selftest: Add IOMMU_VIOMMU_ALLOC test coverage Nicolin Chen
2024-10-21 8:30 ` Alexey Kardashevskiy
2024-10-21 18:25 ` Nicolin Chen
2024-10-09 16:38 ` [PATCH v3 10/11] Documentation: userspace-api: iommufd: Update vIOMMU Nicolin Chen
2024-10-17 19:12 ` Jason Gunthorpe
2024-10-09 16:38 ` [PATCH v3 11/11] iommu/arm-smmu-v3: Add IOMMU_VIOMMU_TYPE_ARM_SMMUV3 support Nicolin Chen
2024-10-17 16:28 ` Nicolin Chen
2024-10-17 16:41 ` Jason Gunthorpe
2024-10-17 16:43 ` Nicolin Chen
2024-10-17 16:48 ` Jason Gunthorpe
2024-10-17 18:40 ` Jason Gunthorpe
2024-10-17 18:48 ` Nicolin Chen
2024-10-09 16:38 ` Nicolin Chen [this message]
2024-10-09 16:38 ` [PATCH v3 01/16] iommufd/viommu: Introduce IOMMUFD_OBJ_VDEVICE and its related struct Nicolin Chen
2024-10-17 18:45 ` Jason Gunthorpe
2024-10-20 1:35 ` Nicolin Chen
2024-10-21 12:21 ` Jason Gunthorpe
2024-10-21 16:42 ` Nicolin Chen
2024-10-09 16:38 ` [PATCH v3 02/16] iommufd/viommu: Add a default_viommu_ops for IOMMU_VIOMMU_TYPE_DEFAULT Nicolin Chen
2024-10-17 18:47 ` Jason Gunthorpe
2024-10-17 18:50 ` Nicolin Chen
2024-10-17 18:52 ` Jason Gunthorpe
2024-10-09 16:38 ` [PATCH v3 03/16] iommufd/viommu: Add IOMMU_VDEVICE_ALLOC ioctl Nicolin Chen
2024-10-17 18:52 ` Jason Gunthorpe
2024-10-20 1:42 ` Nicolin Chen
2024-10-21 12:22 ` Jason Gunthorpe
2024-10-21 16:42 ` Nicolin Chen
2024-10-09 16:38 ` [PATCH v3 04/16] iommufd/selftest: Add IOMMU_VDEVICE_ALLOC test coverage Nicolin Chen
2024-10-09 16:38 ` [PATCH v3 05/16] iommu/viommu: Add cache_invalidate for IOMMU_VIOMMU_TYPE_DEFAULT Nicolin Chen
2024-10-09 16:38 ` [PATCH v3 06/16] iommufd/hw_pagetable: Allow viommu->ops->cache_invalidate for hwpt_nested Nicolin Chen
2024-10-17 18:54 ` Jason Gunthorpe
2024-10-09 16:38 ` [PATCH v3 07/16] iommufd: Allow hwpt_id to carry viommu_id for IOMMU_HWPT_INVALIDATE Nicolin Chen
2024-10-17 19:08 ` Jason Gunthorpe
2024-10-09 16:38 ` [PATCH v3 08/16] iommu: Add iommu_copy_struct_from_full_user_array helper Nicolin Chen
2024-10-09 16:38 ` [PATCH v3 09/16] iommufd/viommu: Add vdev_to_dev helper Nicolin Chen
2024-10-17 19:09 ` Jason Gunthorpe
2024-10-09 16:38 ` [PATCH v3 10/16] iommufd/selftest: Add mock_viommu_cache_invalidate Nicolin Chen
2024-10-09 16:38 ` [PATCH v3 11/16] iommufd/selftest: Add IOMMU_TEST_OP_DEV_CHECK_CACHE test command Nicolin Chen
2024-10-09 16:38 ` [PATCH v3 12/16] iommufd/selftest: Add vIOMMU coverage for IOMMU_HWPT_INVALIDATE ioctl Nicolin Chen
2024-10-09 16:38 ` [PATCH v3 13/16] Documentation: userspace-api: iommufd: Update vDEVICE Nicolin Chen
2024-10-17 19:12 ` Jason Gunthorpe
2024-10-09 16:38 ` [PATCH v3 14/16] iommu/arm-smmu-v3: Add arm_vsmmu_cache_invalidate Nicolin Chen
2024-10-12 3:12 ` Zhangfei Gao
2024-10-12 4:56 ` Nicolin Chen
2024-10-09 16:38 ` [PATCH v3 15/16] iommu/arm-smmu-v3: Allow ATS for IOMMU_DOMAIN_NESTED Nicolin Chen
2024-10-09 16:38 ` [PATCH v3 16/16] iommu/arm-smmu-v3: Update comments about ATS and bypass Nicolin Chen
2024-10-17 19:14 ` [PATCH v3 00/16] cover-letter: iommufd: Add vIOMMU infrastructure (Part-2: vDEVICE) Jason Gunthorpe
2024-10-17 19:19 ` Nicolin Chen
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.1728491532.git.nicolinc@nvidia.com \
--to=nicolinc@nvidia.com \
--cc=aik@amd.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=patches@lists.linux.dev \
--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 \
--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.