From: Nicolin Chen <nicolinc@nvidia.com>
To: <jgg@nvidia.com>, <kevin.tian@intel.com>, <corbet@lwn.net>,
<will@kernel.org>
Cc: <bagasdotme@gmail.com>, <robin.murphy@arm.com>, <joro@8bytes.org>,
<thierry.reding@gmail.com>, <vdumpa@nvidia.com>,
<jonathanh@nvidia.com>, <shuah@kernel.org>, <jsnitsel@redhat.com>,
<nathan@kernel.org>, <peterz@infradead.org>, <yi.l.liu@intel.com>,
<mshavit@google.com>, <praan@google.com>,
<zhangzekun11@huawei.com>, <iommu@lists.linux.dev>,
<linux-doc@vger.kernel.org>, <linux-kernel@vger.kernel.org>,
<linux-arm-kernel@lists.infradead.org>,
<linux-tegra@vger.kernel.org>, <linux-kselftest@vger.kernel.org>,
<patches@lists.linux.dev>, <mochs@nvidia.com>,
<alok.a.tiwari@oracle.com>, <vasant.hegde@amd.com>
Subject: [PATCH v4 02/23] iommu: Pass in a driver-level user data structure to viommu_alloc op
Date: Thu, 8 May 2025 20:02:23 -0700 [thread overview]
Message-ID: <488ee62b522dbb0eef8f02aa67386dd50ea2dc37.1746757630.git.nicolinc@nvidia.com> (raw)
In-Reply-To: <cover.1746757630.git.nicolinc@nvidia.com>
The new type of vIOMMU for tegra241-cmdqv allows user space VM to use one
of its virtual command queue HW resources exclusively. This requires user
space to mmap the corresponding MMIO page from kernel space for direct HW
control.
To forward the mmap info (offset and length), iommufd should add a driver
specific data structure to the IOMMUFD_CMD_VIOMMU_ALLOC ioctl, for driver
to output the info during the allocation back to user space.
Similar to the existing ioctls and their IOMMU handlers, add a user_data
to viommu_alloc op to bridge between iommufd and drivers.
Reviewed-by: Jason Gunthorpe <jgg@nvidia.com>
Reviewed-by: Lu Baolu <baolu.lu@linux.intel.com>
Reviewed-by: Pranjal Shrivastava <praan@google.com>
Signed-off-by: Nicolin Chen <nicolinc@nvidia.com>
---
drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.h | 3 ++-
include/linux/iommu.h | 3 ++-
drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3-iommufd.c | 3 ++-
drivers/iommu/iommufd/selftest.c | 8 ++++----
drivers/iommu/iommufd/viommu.c | 2 +-
5 files changed, 11 insertions(+), 8 deletions(-)
diff --git a/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.h b/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.h
index dd1ad56ce863..6b8f0d20dac3 100644
--- a/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.h
+++ b/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.h
@@ -1062,7 +1062,8 @@ void *arm_smmu_hw_info(struct device *dev, u32 *length, u32 *type);
struct iommufd_viommu *arm_vsmmu_alloc(struct device *dev,
struct iommu_domain *parent,
struct iommufd_ctx *ictx,
- unsigned int viommu_type);
+ unsigned int viommu_type,
+ const struct iommu_user_data *user_data);
int arm_smmu_attach_prepare_vmaster(struct arm_smmu_attach_state *state,
struct arm_smmu_nested_domain *nested_domain);
void arm_smmu_attach_commit_vmaster(struct arm_smmu_attach_state *state);
diff --git a/include/linux/iommu.h b/include/linux/iommu.h
index 3a8d35d41fda..ba7add27e9a0 100644
--- a/include/linux/iommu.h
+++ b/include/linux/iommu.h
@@ -662,7 +662,8 @@ struct iommu_ops {
struct iommufd_viommu *(*viommu_alloc)(
struct device *dev, struct iommu_domain *parent_domain,
- struct iommufd_ctx *ictx, unsigned int viommu_type);
+ struct iommufd_ctx *ictx, unsigned int viommu_type,
+ const struct iommu_user_data *user_data);
const struct iommu_domain_ops *default_domain_ops;
unsigned long pgsize_bitmap;
diff --git a/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3-iommufd.c b/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3-iommufd.c
index e4fd8d522af8..66855cae775e 100644
--- a/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3-iommufd.c
+++ b/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3-iommufd.c
@@ -385,7 +385,8 @@ static const struct iommufd_viommu_ops arm_vsmmu_ops = {
struct iommufd_viommu *arm_vsmmu_alloc(struct device *dev,
struct iommu_domain *parent,
struct iommufd_ctx *ictx,
- unsigned int viommu_type)
+ unsigned int viommu_type,
+ const struct iommu_user_data *user_data)
{
struct arm_smmu_device *smmu =
iommu_get_iommu_dev(dev, struct arm_smmu_device, iommu);
diff --git a/drivers/iommu/iommufd/selftest.c b/drivers/iommu/iommufd/selftest.c
index 18d9a216eb30..8b8ba4fb91cd 100644
--- a/drivers/iommu/iommufd/selftest.c
+++ b/drivers/iommu/iommufd/selftest.c
@@ -733,10 +733,10 @@ static struct iommufd_viommu_ops mock_viommu_ops = {
.cache_invalidate = mock_viommu_cache_invalidate,
};
-static struct iommufd_viommu *mock_viommu_alloc(struct device *dev,
- struct iommu_domain *domain,
- struct iommufd_ctx *ictx,
- unsigned int viommu_type)
+static struct iommufd_viommu *
+mock_viommu_alloc(struct device *dev, struct iommu_domain *domain,
+ struct iommufd_ctx *ictx, unsigned int viommu_type,
+ const struct iommu_user_data *user_data)
{
struct mock_iommu_device *mock_iommu =
iommu_get_iommu_dev(dev, struct mock_iommu_device, iommu_dev);
diff --git a/drivers/iommu/iommufd/viommu.c b/drivers/iommu/iommufd/viommu.c
index d4c7c5072e42..fffa57063c60 100644
--- a/drivers/iommu/iommufd/viommu.c
+++ b/drivers/iommu/iommufd/viommu.c
@@ -48,7 +48,7 @@ int iommufd_viommu_alloc_ioctl(struct iommufd_ucmd *ucmd)
}
viommu = ops->viommu_alloc(idev->dev, hwpt_paging->common.domain,
- ucmd->ictx, cmd->type);
+ ucmd->ictx, cmd->type, NULL);
if (IS_ERR(viommu)) {
rc = PTR_ERR(viommu);
goto out_put_hwpt;
--
2.43.0
next prev parent reply other threads:[~2025-05-09 3:03 UTC|newest]
Thread overview: 106+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-05-09 3:02 [PATCH v4 00/23] iommufd: Add vIOMMU infrastructure (Part-4 HW QUEUE) Nicolin Chen
2025-05-09 3:02 ` [PATCH v4 01/23] iommufd/viommu: Add driver-allocated vDEVICE support Nicolin Chen
2025-05-15 5:42 ` Tian, Kevin
2025-05-15 16:55 ` Nicolin Chen
2025-05-09 3:02 ` Nicolin Chen [this message]
2025-05-15 5:44 ` [PATCH v4 02/23] iommu: Pass in a driver-level user data structure to viommu_alloc op Tian, Kevin
2025-05-09 3:02 ` [PATCH v4 03/23] iommufd/viommu: Allow driver-specific user data for a vIOMMU object Nicolin Chen
2025-05-15 5:45 ` Tian, Kevin
2025-05-15 16:56 ` Nicolin Chen
2025-05-09 3:02 ` [PATCH v4 04/23] iommu: Add iommu_copy_struct_to_user helper Nicolin Chen
2025-05-15 5:46 ` Tian, Kevin
2025-05-09 3:02 ` [PATCH v4 05/23] iommufd/driver: Let iommufd_viommu_alloc helper save ictx to viommu->ictx Nicolin Chen
2025-05-14 17:06 ` Jason Gunthorpe
2025-05-16 2:05 ` Nicolin Chen
2025-05-16 13:28 ` Jason Gunthorpe
2025-05-16 20:56 ` Nicolin Chen
2025-05-26 13:30 ` Jason Gunthorpe
2025-05-27 18:41 ` Nicolin Chen
2025-05-30 18:27 ` Jason Gunthorpe
2025-05-30 18:34 ` Nicolin Chen
2025-05-15 5:48 ` Tian, Kevin
2025-05-09 3:02 ` [PATCH v4 06/23] iommufd/driver: Add iommufd_struct_destroy to revert iommufd_viommu_alloc Nicolin Chen
2025-05-14 18:26 ` Jason Gunthorpe
2025-05-14 19:21 ` Nicolin Chen
2025-05-15 12:49 ` Jason Gunthorpe
2025-05-15 16:55 ` Nicolin Chen
2025-05-09 3:02 ` [PATCH v4 07/23] iommufd/selftest: Support user_data in mock_viommu_alloc Nicolin Chen
2025-05-15 5:49 ` Tian, Kevin
2025-05-09 3:02 ` [PATCH v4 08/23] iommufd/selftest: Add covearge for viommu data Nicolin Chen
2025-05-15 5:50 ` Tian, Kevin
2025-05-09 3:02 ` [PATCH v4 09/23] iommufd: Abstract iopt_pin_pages and iopt_unpin_pages helpers Nicolin Chen
2025-05-14 18:45 ` Jason Gunthorpe
2025-05-15 5:54 ` Tian, Kevin
2025-05-09 3:02 ` [PATCH v4 10/23] iommufd/viommu: Introduce IOMMUFD_OBJ_HW_QUEUE and its related struct Nicolin Chen
2025-05-15 5:58 ` Tian, Kevin
2025-05-15 17:14 ` Nicolin Chen
2025-05-16 2:30 ` Nicolin Chen
2025-05-16 2:59 ` Tian, Kevin
2025-05-19 17:05 ` Vasant Hegde
2025-05-15 15:39 ` Jason Gunthorpe
2025-05-15 17:17 ` Nicolin Chen
2025-05-09 3:02 ` [PATCH v4 11/23] iommufd/viommu: Add IOMMUFD_CMD_HW_QUEUE_ALLOC ioctl Nicolin Chen
2025-05-15 6:30 ` Tian, Kevin
2025-05-15 18:44 ` Nicolin Chen
2025-05-16 2:49 ` Tian, Kevin
2025-05-16 3:16 ` Nicolin Chen
2025-05-16 3:52 ` Tian, Kevin
2025-05-16 4:05 ` Nicolin Chen
2025-05-18 15:19 ` Nicolin Chen
2025-05-15 16:06 ` Jason Gunthorpe
2025-05-15 18:16 ` Nicolin Chen
2025-05-15 18:59 ` Jason Gunthorpe
2025-05-15 20:32 ` Nicolin Chen
2025-05-16 13:26 ` Jason Gunthorpe
2025-05-16 2:42 ` Tian, Kevin
2025-05-16 13:25 ` Jason Gunthorpe
2025-05-19 17:29 ` Vasant Hegde
2025-05-19 18:14 ` Nicolin Chen
2025-05-20 8:38 ` Vasant Hegde
2025-05-23 1:51 ` Tian, Kevin
2025-05-26 13:29 ` Jason Gunthorpe
2025-05-09 3:02 ` [PATCH v4 12/23] iommufd/driver: Add iommufd_hw_queue_depend/undepend() helpers Nicolin Chen
2025-05-15 16:12 ` Jason Gunthorpe
2025-05-16 4:51 ` Nicolin Chen
2025-05-09 3:02 ` [PATCH v4 13/23] iommufd/selftest: Add coverage for IOMMUFD_CMD_HW_QUEUE_ALLOC Nicolin Chen
2025-05-09 3:02 ` [PATCH v4 14/23] iommufd: Add mmap interface Nicolin Chen
2025-05-09 14:13 ` kernel test robot
2025-05-09 19:30 ` Nicolin Chen
2025-05-15 6:41 ` Tian, Kevin
2025-05-15 16:47 ` Jason Gunthorpe
2025-05-16 4:08 ` Tian, Kevin
2025-05-16 13:29 ` Jason Gunthorpe
2025-05-16 17:42 ` Nicolin Chen
2025-05-09 3:02 ` [PATCH v4 15/23] iommufd/selftest: Add coverage for the new " Nicolin Chen
2025-05-09 3:02 ` [PATCH v4 16/23] Documentation: userspace-api: iommufd: Update HW QUEUE Nicolin Chen
2025-05-15 6:42 ` Tian, Kevin
2025-05-15 16:58 ` Jason Gunthorpe
2025-05-09 3:02 ` [PATCH v4 17/23] iommu/arm-smmu-v3-iommufd: Add vsmmu_alloc impl op Nicolin Chen
2025-05-15 7:52 ` Tian, Kevin
2025-05-15 17:19 ` Jason Gunthorpe
2025-05-15 17:32 ` Nicolin Chen
2025-05-09 3:02 ` [PATCH v4 18/23] iommu/arm-smmu-v3-iommufd: Support implementation-defined hw_info Nicolin Chen
2025-05-15 7:54 ` Tian, Kevin
2025-05-15 17:17 ` Jason Gunthorpe
2025-05-15 18:52 ` Nicolin Chen
2025-05-15 18:56 ` Jason Gunthorpe
2025-05-15 19:21 ` Nicolin Chen
2025-05-15 19:23 ` Jason Gunthorpe
2025-05-15 20:17 ` Nicolin Chen
2025-05-16 13:22 ` Jason Gunthorpe
2025-05-16 17:34 ` Nicolin Chen
2025-05-09 3:02 ` [PATCH v4 19/23] iommu/tegra241-cmdqv: Use request_threaded_irq Nicolin Chen
2025-05-15 7:57 ` Tian, Kevin
2025-05-15 17:21 ` Jason Gunthorpe
2025-05-09 3:02 ` [PATCH v4 20/23] iommu/tegra241-cmdqv: Simplify deinit flow in tegra241_cmdqv_remove_vintf() Nicolin Chen
2025-05-15 8:00 ` Tian, Kevin
2025-05-15 17:27 ` Jason Gunthorpe
2025-05-09 3:02 ` [PATCH v4 21/23] iommu/tegra241-cmdqv: Do not statically map LVCMDQs Nicolin Chen
2025-05-15 8:20 ` Tian, Kevin
2025-05-15 17:03 ` Nicolin Chen
2025-05-09 3:02 ` [PATCH v4 22/23] iommu/tegra241-cmdqv: Add user-space use support Nicolin Chen
2025-05-15 8:27 ` Tian, Kevin
2025-05-15 17:13 ` Nicolin Chen
2025-05-16 4:00 ` Tian, Kevin
2025-05-16 4:10 ` Nicolin Chen
2025-05-09 3:02 ` [PATCH v4 23/23] iommu/tegra241-cmdqv: Add IOMMU_VEVENTQ_TYPE_TEGRA241_CMDQV support 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=488ee62b522dbb0eef8f02aa67386dd50ea2dc37.1746757630.git.nicolinc@nvidia.com \
--to=nicolinc@nvidia.com \
--cc=alok.a.tiwari@oracle.com \
--cc=bagasdotme@gmail.com \
--cc=corbet@lwn.net \
--cc=iommu@lists.linux.dev \
--cc=jgg@nvidia.com \
--cc=jonathanh@nvidia.com \
--cc=joro@8bytes.org \
--cc=jsnitsel@redhat.com \
--cc=kevin.tian@intel.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-doc@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-kselftest@vger.kernel.org \
--cc=linux-tegra@vger.kernel.org \
--cc=mochs@nvidia.com \
--cc=mshavit@google.com \
--cc=nathan@kernel.org \
--cc=patches@lists.linux.dev \
--cc=peterz@infradead.org \
--cc=praan@google.com \
--cc=robin.murphy@arm.com \
--cc=shuah@kernel.org \
--cc=thierry.reding@gmail.com \
--cc=vasant.hegde@amd.com \
--cc=vdumpa@nvidia.com \
--cc=will@kernel.org \
--cc=yi.l.liu@intel.com \
--cc=zhangzekun11@huawei.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 NNTP newsgroup(s).