All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Aneesh Kumar K.V (Arm)" <aneesh.kumar@kernel.org>
To: linux-coco@lists.linux.dev, kvmarm@lists.linux.dev
Cc: linux-pci@vger.kernel.org, linux-kernel@vger.kernel.org,
	aik@amd.com, lukas@wunner.de, Samuel Ortiz <sameo@rivosinc.com>,
	Xu Yilun <yilun.xu@linux.intel.com>,
	Jason Gunthorpe <jgg@ziepe.ca>,
	Suzuki K Poulose <Suzuki.Poulose@arm.com>,
	Steven Price <steven.price@arm.com>,
	Catalin Marinas <catalin.marinas@arm.com>,
	Marc Zyngier <maz@kernel.org>, Will Deacon <will@kernel.org>,
	Oliver Upton <oliver.upton@linux.dev>,
	"Aneesh Kumar K.V (Arm)" <aneesh.kumar@kernel.org>
Subject: [RFC PATCH v1 07/38] iommufd/viommu: Add support to associate viommu with kvm instance
Date: Mon, 28 Jul 2025 19:21:44 +0530	[thread overview]
Message-ID: <20250728135216.48084-8-aneesh.kumar@kernel.org> (raw)
In-Reply-To: <20250728135216.48084-1-aneesh.kumar@kernel.org>

The associated kvm instance will be used in later patch by iommufd to
bind a tdi to kvm.

Signed-off-by: Aneesh Kumar K.V (Arm) <aneesh.kumar@kernel.org>
---
 drivers/iommu/iommufd/viommu.c | 45 +++++++++++++++++++++++++++++++++-
 include/linux/iommufd.h        |  3 +++
 include/uapi/linux/iommufd.h   | 12 +++++++++
 3 files changed, 59 insertions(+), 1 deletion(-)

diff --git a/drivers/iommu/iommufd/viommu.c b/drivers/iommu/iommufd/viommu.c
index 2ca5809b238b..59f1e1176f7f 100644
--- a/drivers/iommu/iommufd/viommu.c
+++ b/drivers/iommu/iommufd/viommu.c
@@ -2,6 +2,36 @@
 /* Copyright (c) 2024, NVIDIA CORPORATION & AFFILIATES
  */
 #include "iommufd_private.h"
+#include "linux/tsm.h"
+
+#if IS_ENABLED(CONFIG_KVM)
+#include <linux/kvm_host.h>
+
+static int viommu_get_kvm(struct iommufd_viommu *viommu, int kvm_vm_fd)
+{
+	int rc = -EBADF;
+	struct file *filp;
+
+	filp = fget(kvm_vm_fd);
+
+	if (!file_is_kvm(filp))
+		goto err_out;
+
+	/* hold the kvm reference via file descriptor */
+	viommu->kvm_filp = filp;
+	return 0;
+err_out:
+	viommu->kvm_filp = NULL;
+	fput(filp);
+	return rc;
+}
+
+static void viommu_put_kvm(struct iommufd_viommu *viommu)
+{
+	fput(viommu->kvm_filp);
+	viommu->kvm_filp = NULL;
+}
+#endif
 
 void iommufd_viommu_destroy(struct iommufd_object *obj)
 {
@@ -12,6 +42,8 @@ void iommufd_viommu_destroy(struct iommufd_object *obj)
 		viommu->ops->destroy(viommu);
 	refcount_dec(&viommu->hwpt->common.obj.users);
 	xa_destroy(&viommu->vdevs);
+
+	viommu_put_kvm(viommu);
 }
 
 int iommufd_viommu_alloc_ioctl(struct iommufd_ucmd *ucmd)
@@ -29,7 +61,9 @@ int iommufd_viommu_alloc_ioctl(struct iommufd_ucmd *ucmd)
 	size_t viommu_size;
 	int rc;
 
-	if (cmd->flags || cmd->type == IOMMU_VIOMMU_TYPE_DEFAULT)
+	if (cmd->flags & ~IOMMU_VIOMMU_KVM_FD)
+		return -EOPNOTSUPP;
+	if (cmd->type == IOMMU_VIOMMU_TYPE_DEFAULT)
 		return -EOPNOTSUPP;
 
 	idev = iommufd_get_device(ucmd, cmd->dev_id);
@@ -100,8 +134,17 @@ int iommufd_viommu_alloc_ioctl(struct iommufd_ucmd *ucmd)
 		goto out_put_hwpt;
 	}
 
+	/* get the kvm details if specified. */
+	if (cmd->flags & IOMMU_VIOMMU_KVM_FD) {
+		rc = viommu_get_kvm(viommu, cmd->kvm_vm_fd);
+		if (rc)
+			goto out_put_hwpt;
+	}
+
 	cmd->out_viommu_id = viommu->obj.id;
 	rc = iommufd_ucmd_respond(ucmd, sizeof(*cmd));
+	if (rc)
+		viommu_put_kvm(viommu);
 
 out_put_hwpt:
 	iommufd_put_object(ucmd->ictx, &hwpt_paging->common.obj);
diff --git a/include/linux/iommufd.h b/include/linux/iommufd.h
index 55ae02581f9b..b7617ba7a536 100644
--- a/include/linux/iommufd.h
+++ b/include/linux/iommufd.h
@@ -12,6 +12,7 @@
 #include <linux/refcount.h>
 #include <linux/types.h>
 #include <linux/xarray.h>
+#include <linux/file.h>
 #include <uapi/linux/iommufd.h>
 
 struct device;
@@ -58,6 +59,7 @@ struct iommufd_object {
 	unsigned int id;
 };
 
+struct kvm;
 struct iommufd_device *iommufd_device_bind(struct iommufd_ctx *ictx,
 					   struct device *dev, u32 *id);
 void iommufd_device_unbind(struct iommufd_device *idev);
@@ -102,6 +104,7 @@ struct iommufd_viommu {
 	struct iommufd_ctx *ictx;
 	struct iommu_device *iommu_dev;
 	struct iommufd_hwpt_paging *hwpt;
+	struct file *kvm_filp;
 
 	const struct iommufd_viommu_ops *ops;
 
diff --git a/include/uapi/linux/iommufd.h b/include/uapi/linux/iommufd.h
index 548d4b5afcd4..9014c61a97d4 100644
--- a/include/uapi/linux/iommufd.h
+++ b/include/uapi/linux/iommufd.h
@@ -1023,6 +1023,17 @@ struct iommu_viommu_tegra241_cmdqv {
 	__aligned_u64 out_vintf_mmap_length;
 };
 
+/**
+ * define IOMMU_VIOMMU_KVM_FD - Flag indicating a valid KVM VM file descriptor
+ *
+ * This flag must be set when allocating a viommu instance that will be
+ * associated with a specific KVM VM. When allocating a viommu instance for a
+ * KVM VM, this flag must be set to inform the initialization logic that
+ * @iommu_viommu_alloc::kvm_vm_fd is properly initialized. If this flag is not
+ * provided but @iommu_viommu_alloc::kvm_vm_fd field will be ignored.
+ */
+#define IOMMU_VIOMMU_KVM_FD	BIT(0)
+
 /**
  * struct iommu_viommu_alloc - ioctl(IOMMU_VIOMMU_ALLOC)
  * @size: sizeof(struct iommu_viommu_alloc)
@@ -1057,6 +1068,7 @@ struct iommu_viommu_alloc {
 	__u32 data_len;
 	__u32 __reserved;
 	__aligned_u64 data_uptr;
+	__u32 kvm_vm_fd;
 };
 #define IOMMU_VIOMMU_ALLOC _IO(IOMMUFD_TYPE, IOMMUFD_CMD_VIOMMU_ALLOC)
 
-- 
2.43.0


  parent reply	other threads:[~2025-07-28 13:53 UTC|newest]

Thread overview: 188+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-07-28 13:51 [RFC PATCH v1 00/38] ARM CCA Device Assignment support Aneesh Kumar K.V (Arm)
2025-07-28 13:51 ` [RFC PATCH v1 01/38] tsm: Add tsm_bind/unbind helpers Aneesh Kumar K.V (Arm)
2025-07-28 13:51 ` [RFC PATCH v1 02/38] tsm: Move tsm core outside the host directory Aneesh Kumar K.V (Arm)
2025-07-28 13:51 ` [RFC PATCH v1 03/38] tsm: Move dsm_dev from pci_tdi to pci_tsm Aneesh Kumar K.V (Arm)
2025-08-04 21:52   ` Bjorn Helgaas
2025-08-05  9:24     ` Aneesh Kumar K.V
2025-07-28 13:51 ` [RFC PATCH v1 04/38] tsm: Support DMA Allocation from private memory Aneesh Kumar K.V (Arm)
2025-07-28 14:33   ` Jason Gunthorpe
2025-07-29  8:23     ` Aneesh Kumar K.V
2025-07-29 14:33       ` Jason Gunthorpe
2025-07-30 10:09         ` Suzuki K Poulose
2025-07-31 12:17           ` Jason Gunthorpe
2025-07-31 13:48             ` Suzuki K Poulose
2025-07-31 16:44               ` Jason Gunthorpe
2025-08-01  9:30                 ` Suzuki K Poulose
2025-08-01 14:53                   ` Jason Gunthorpe
2025-08-02  8:44         ` Aneesh Kumar K.V
2025-08-02 13:41           ` Jason Gunthorpe
2025-08-04  6:58             ` Aneesh Kumar K.V
2025-08-05 15:54               ` Jason Gunthorpe
2025-08-05 10:22     ` Alexey Kardashevskiy
2025-08-05 16:08       ` Jason Gunthorpe
2025-08-04 21:54   ` Bjorn Helgaas
2025-09-15  8:36   ` Mostafa Saleh
2025-09-16  4:15     ` Aneesh Kumar K.V
2025-09-16  8:16       ` Mostafa Saleh
2025-07-28 13:51 ` [RFC PATCH v1 05/38] tsm: Don't overload connect Aneesh Kumar K.V (Arm)
2025-08-04 22:00   ` Bjorn Helgaas
2025-07-28 13:51 ` [RFC PATCH v1 06/38] iommufd: Add and option to request for bar mapping with IORESOURCE_EXCLUSIVE Aneesh Kumar K.V (Arm)
2025-07-28 14:08   ` Jason Gunthorpe
2025-07-29  8:28     ` Aneesh Kumar K.V
2025-07-29 14:29       ` Jason Gunthorpe
2025-07-30  6:55         ` Xu Yilun
2025-07-31 12:22           ` Jason Gunthorpe
2025-08-05  2:26             ` Xu Yilun
2025-08-05 16:10               ` Jason Gunthorpe
2025-07-30  6:43   ` Xu Yilun
2025-08-06 21:18   ` dan.j.williams
2025-07-28 13:51 ` Aneesh Kumar K.V (Arm) [this message]
2025-07-28 14:10   ` [RFC PATCH v1 07/38] iommufd/viommu: Add support to associate viommu with kvm instance Jason Gunthorpe
2025-07-29  8:30     ` Aneesh Kumar K.V
2025-07-29 16:26   ` Jonathan Cameron
2025-07-29 23:16     ` Jason Gunthorpe
2025-07-28 13:51 ` [RFC PATCH v1 08/38] iommufd/tsm: Add tsm_op iommufd ioctls Aneesh Kumar K.V (Arm)
2025-07-29 16:34   ` Jonathan Cameron
2025-08-02  9:03     ` Aneesh Kumar K.V
2025-08-04 22:25   ` Bjorn Helgaas
2025-07-28 13:51 ` [RFC PATCH v1 09/38] iommufd/vdevice: Add TSM Guest request uAPI Aneesh Kumar K.V (Arm)
2025-08-04 22:03   ` Bjorn Helgaas
2025-07-28 13:51 ` [RFC PATCH v1 10/38] iommufd/vdevice: Add TSM map ioctl Aneesh Kumar K.V (Arm)
2025-07-28 14:17   ` Jason Gunthorpe
2025-07-29  8:37     ` Aneesh Kumar K.V
2025-07-29 14:31       ` Jason Gunthorpe
2025-08-04  2:32     ` Alexey Kardashevskiy
2025-08-04  8:28       ` Aneesh Kumar K.V
2025-08-05  1:29         ` Alexey Kardashevskiy
2025-08-05 15:48       ` Jason Gunthorpe
2025-07-28 13:51 ` [RFC PATCH v1 11/38] KVM: arm64: CCA: register host tsm platform device Aneesh Kumar K.V (Arm)
2025-07-29 17:10   ` Jonathan Cameron
2025-07-29 23:19     ` Jason Gunthorpe
2025-07-30  8:42       ` Aneesh Kumar K.V
2025-07-30 10:38         ` Jonathan Cameron
2025-07-30 12:23           ` Jonathan Cameron
2025-07-30 13:07             ` Greg KH
2025-10-10 12:10               ` Jeremy Linton
2025-10-10 12:38                 ` Greg KH
2025-10-10 15:14                   ` Jeremy Linton
2025-10-10 13:59                 ` Jason Gunthorpe
2025-10-10 15:28                   ` Jeremy Linton
2025-10-10 15:30                     ` Jason Gunthorpe
2025-10-10 15:37                       ` Greg KH
2025-10-10 15:50                       ` Jeremy Linton
2025-10-10 18:44                         ` dan.j.williams
2025-10-10 22:34                           ` Jason Gunthorpe
2025-10-13 20:42                             ` Jeremy Linton
2025-10-15  9:52                   ` Aneesh Kumar K.V
2025-10-15  9:58                     ` Greg KH
2025-10-15 11:50                       ` Jason Gunthorpe
2025-10-15 11:57                         ` Greg KH
2025-10-15 12:15                           ` Jason Gunthorpe
2025-10-15 12:37                             ` Greg KH
2025-10-15 15:19                         ` James Bottomley
2025-10-15 16:03                           ` Greg KH
2025-10-15 16:34                           ` Jason Gunthorpe
2025-07-31 12:11           ` Jason Gunthorpe
2025-07-31 13:22             ` Jonathan Cameron
2025-07-31 16:46               ` Jason Gunthorpe
2025-08-01  8:31                 ` Greg KH
2025-08-02  0:54             ` dan.j.williams
2025-10-09  7:17               ` Aneesh Kumar K.V
2025-07-28 13:51 ` [RFC PATCH v1 12/38] coco: host: arm64: CCA host platform device driver Aneesh Kumar K.V (Arm)
2025-07-29 17:22   ` Jonathan Cameron
2025-07-29 23:22     ` Jason Gunthorpe
2025-07-30 10:28       ` Jonathan Cameron
2025-07-31 12:26         ` Jason Gunthorpe
2025-07-30  8:58     ` Aneesh Kumar K.V
2025-07-30 10:25       ` Jonathan Cameron
2025-07-28 13:51 ` [RFC PATCH v1 13/38] coco: host: arm64: Create a PDEV with rmm Aneesh Kumar K.V (Arm)
2025-07-30 12:39   ` Jonathan Cameron
2025-08-02 10:54     ` Aneesh Kumar K.V
2025-07-31 11:47   ` Arto Merilainen
2025-08-02 10:57     ` Aneesh Kumar K.V
2025-08-04 22:28   ` Bjorn Helgaas
2025-07-28 13:51 ` [RFC PATCH v1 14/38] coco: host: arm64: Device communication support Aneesh Kumar K.V (Arm)
2025-07-30 13:52   ` Jonathan Cameron
2025-07-31 12:28     ` Jason Gunthorpe
2025-08-04  4:17     ` Aneesh Kumar K.V
2025-08-04 22:29   ` Bjorn Helgaas
2025-07-28 13:51 ` [RFC PATCH v1 15/38] coco: host: arm64: Stop and destroy the physical device Aneesh Kumar K.V (Arm)
2025-07-30 13:57   ` Jonathan Cameron
2025-08-04  4:22     ` Aneesh Kumar K.V
2025-07-28 13:51 ` [RFC PATCH v1 16/38] X.509: Make certificate parser public Aneesh Kumar K.V (Arm)
2025-07-28 13:51 ` [RFC PATCH v1 17/38] X.509: Parse Subject Alternative Name in certificates Aneesh Kumar K.V (Arm)
2025-07-28 13:51 ` [RFC PATCH v1 18/38] X.509: Move certificate length retrieval into new helper Aneesh Kumar K.V (Arm)
2025-08-04 22:27   ` Bjorn Helgaas
2025-07-28 13:51 ` [RFC PATCH v1 19/38] coco: host: arm64: set_pubkey support Aneesh Kumar K.V (Arm)
2025-07-30 14:08   ` Jonathan Cameron
2025-08-04  4:29     ` Aneesh Kumar K.V
2025-08-04 22:26   ` Bjorn Helgaas
2025-07-28 13:51 ` [RFC PATCH v1 20/38] coco: host: arm64: Add support for creating a virtual device Aneesh Kumar K.V (Arm)
2025-07-30 14:12   ` Jonathan Cameron
2025-07-28 13:51 ` [RFC PATCH v1 21/38] coco: host: arm64: Add support for virtual device communication Aneesh Kumar K.V (Arm)
2025-07-30 14:13   ` Jonathan Cameron
2025-08-04  4:45     ` Aneesh Kumar K.V
2025-07-28 13:51 ` [RFC PATCH v1 22/38] coco: host: arm64: Stop and destroy virtual device Aneesh Kumar K.V (Arm)
2025-07-30 14:15   ` Jonathan Cameron
2025-07-28 13:52 ` [RFC PATCH v1 23/38] coco: guest: arm64: Update arm CCA guest driver Aneesh Kumar K.V (Arm)
2025-07-30 14:22   ` Jonathan Cameron
2025-07-31 12:29     ` Jason Gunthorpe
2025-07-31 13:54       ` Jonathan Cameron
2025-07-28 13:52 ` [RFC PATCH v1 24/38] arm64: CCA: Register guest tsm callback Aneesh Kumar K.V (Arm)
2025-07-30 14:26   ` Jonathan Cameron
2025-08-04  4:50     ` Aneesh Kumar K.V
2025-07-28 13:52 ` [RFC PATCH v1 25/38] cca: guest: arm64: Realm device lock support Aneesh Kumar K.V (Arm)
2025-07-30 14:32   ` Jonathan Cameron
2025-07-28 13:52 ` [RFC PATCH v1 26/38] KVM: arm64: Add exit handler related to device assignment Aneesh Kumar K.V (Arm)
2025-07-30 14:35   ` Jonathan Cameron
2025-07-28 13:52 ` [RFC PATCH v1 27/38] coco: host: arm64: add RSI_RDEV_GET_INSTANCE_ID related exit handler Aneesh Kumar K.V (Arm)
2025-07-28 13:52 ` [RFC PATCH v1 28/38] coco: host: arm64: Add support for device communication " Aneesh Kumar K.V (Arm)
2025-07-28 13:52 ` [RFC PATCH v1 29/38] coco: guest: arm64: Add support for collecting interface reports Aneesh Kumar K.V (Arm)
2025-07-28 13:52 ` [RFC PATCH v1 30/38] coco: host: arm64: Add support for realm host interface (RHI) Aneesh Kumar K.V (Arm)
2025-07-30 14:43   ` Jonathan Cameron
2025-07-28 13:52 ` [RFC PATCH v1 31/38] coco: guest: arm64: Add support for fetching interface report and certificate chain from host Aneesh Kumar K.V (Arm)
2025-07-30 14:46   ` Jonathan Cameron
2025-07-28 13:52 ` [RFC PATCH v1 32/38] coco: guest: arm64: Add support for guest initiated TDI bind/unbind Aneesh Kumar K.V (Arm)
2025-07-30 14:51   ` Jonathan Cameron
2025-08-04 22:28   ` Bjorn Helgaas
2025-07-28 13:52 ` [RFC PATCH v1 33/38] KVM: arm64: CCA: handle dev mem map/unmap Aneesh Kumar K.V (Arm)
2025-07-28 13:52 ` [RFC PATCH v1 34/38] coco: guest: arm64: Validate mmio range found in the interface report Aneesh Kumar K.V (Arm)
2025-07-30 15:06   ` Jonathan Cameron
2025-07-31 11:39   ` Arto Merilainen
2025-07-31 16:53     ` Jason Gunthorpe
2025-08-04  6:37     ` Aneesh Kumar K.V
2025-08-04  8:27       ` Arto Merilainen
2025-09-10  5:47     ` Arto Merilainen
2025-09-10 14:21       ` Jason Gunthorpe
2025-09-11  5:33       ` Aneesh Kumar K.V
2025-09-11  8:31         ` Alexey Kardashevskiy
2025-09-11 13:41         ` Jason Gunthorpe
2025-09-11 17:47         ` dan.j.williams
2025-08-04 22:31   ` Bjorn Helgaas
2025-07-28 13:52 ` [RFC PATCH v1 35/38] coco: guest: arm64: Add Realm device start and stop support Aneesh Kumar K.V (Arm)
2025-07-31 10:40   ` Jonathan Cameron
2025-08-04 22:27   ` Bjorn Helgaas
2025-07-28 13:52 ` [RFC PATCH v1 36/38] KVM: arm64: CCA: enable DA in realm create parameters Aneesh Kumar K.V (Arm)
2025-08-04 22:31   ` Bjorn Helgaas
2025-07-28 13:52 ` [RFC PATCH v1 37/38] coco: guest: arm64: Add support for fetching device measurements Aneesh Kumar K.V (Arm)
2025-07-31 10:16   ` Jonathan Cameron
2025-08-04 22:27   ` Bjorn Helgaas
2025-07-28 13:52 ` [RFC PATCH v1 38/38] coco: guest: arm64: Add support for fetching device info Aneesh Kumar K.V (Arm)
2025-07-31 10:36   ` Jonathan Cameron
2025-08-04  6:48     ` Aneesh Kumar K.V
2025-08-04 10:23       ` Jonathan Cameron
2025-08-08 23:37   ` Eric Biggers
2025-07-30 16:03 ` [RFC PATCH v1 00/38] ARM CCA Device Assignment support Jason Gunthorpe
2025-08-01  2:07 ` dan.j.williams
2025-08-01 15:51   ` Jason Gunthorpe
2025-08-01 21:19     ` dan.j.williams
2025-08-02 14:17       ` Jason Gunthorpe
2025-08-02 23:50         ` dan.j.williams
2025-08-03 22:26           ` Jason Gunthorpe
2025-08-05  5:07       ` Aneesh Kumar K.V
2025-08-05 17:27         ` Jason Gunthorpe
2025-08-05 18:27           ` dan.j.williams
2025-08-05 18:42             ` Jason Gunthorpe
2025-08-05 19:06               ` dan.j.williams
2025-08-05 19:38                 ` Jason Gunthorpe
2025-08-05  4:50   ` Aneesh Kumar K.V

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=20250728135216.48084-8-aneesh.kumar@kernel.org \
    --to=aneesh.kumar@kernel.org \
    --cc=Suzuki.Poulose@arm.com \
    --cc=aik@amd.com \
    --cc=catalin.marinas@arm.com \
    --cc=jgg@ziepe.ca \
    --cc=kvmarm@lists.linux.dev \
    --cc=linux-coco@lists.linux.dev \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-pci@vger.kernel.org \
    --cc=lukas@wunner.de \
    --cc=maz@kernel.org \
    --cc=oliver.upton@linux.dev \
    --cc=sameo@rivosinc.com \
    --cc=steven.price@arm.com \
    --cc=will@kernel.org \
    --cc=yilun.xu@linux.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.