From: Zhenzhong Duan <zhenzhong.duan@intel.com>
To: qemu-devel@nongnu.org
Cc: alex.williamson@redhat.com, clg@redhat.com,
eric.auger@redhat.com, peterx@redhat.com, jasowang@redhat.com,
mst@redhat.com, jgg@nvidia.com, nicolinc@nvidia.com,
joao.m.martins@oracle.com, kevin.tian@intel.com,
yi.l.liu@intel.com, yi.y.sun@intel.com, chao.p.peng@intel.com,
Zhenzhong Duan <zhenzhong.duan@intel.com>,
Yi Sun <yi.y.sun@linux.intel.com>
Subject: [PATCH rfcv1 1/6] backends/iommufd_device: introduce IOMMUFDDevice
Date: Mon, 15 Jan 2024 18:13:08 +0800 [thread overview]
Message-ID: <20240115101313.131139-2-zhenzhong.duan@intel.com> (raw)
In-Reply-To: <20240115101313.131139-1-zhenzhong.duan@intel.com>
IOMMUFDDevice represents a device in iommufd and can be used as
a communication interface between devices (i.e., VFIO, VDPA) and
vIOMMU.
Currently it includes iommufd handler and device id information
which could be used by vIOMMU to get hw IOMMU information.
In future nested translation support, vIOMMU is going to have
more iommufd related operations like allocate hwpt for a device,
attach/detach hwpt, etc. So IOMMUFDDevice will be further expanded.
IOMMUFDDevice is willingly not a QOM object because we don't want
it to be visible from the user interface.
Introduce a helper iommufd_device_init to initialize IOMMUFDDevice.
Originally-by: Yi Liu <yi.l.liu@intel.com>
Signed-off-by: Yi Sun <yi.y.sun@linux.intel.com>
Signed-off-by: Zhenzhong Duan <zhenzhong.duan@intel.com>
---
MAINTAINERS | 4 +--
include/sysemu/iommufd_device.h | 31 ++++++++++++++++++++
backends/iommufd_device.c | 50 +++++++++++++++++++++++++++++++++
backends/meson.build | 2 +-
4 files changed, 84 insertions(+), 3 deletions(-)
create mode 100644 include/sysemu/iommufd_device.h
create mode 100644 backends/iommufd_device.c
diff --git a/MAINTAINERS b/MAINTAINERS
index 00ec1f7eca..606dfeb2b1 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -2171,8 +2171,8 @@ M: Yi Liu <yi.l.liu@intel.com>
M: Eric Auger <eric.auger@redhat.com>
M: Zhenzhong Duan <zhenzhong.duan@intel.com>
S: Supported
-F: backends/iommufd.c
-F: include/sysemu/iommufd.h
+F: backends/iommufd*.c
+F: include/sysemu/iommufd*.h
F: include/qemu/chardev_open.h
F: util/chardev_open.c
F: docs/devel/vfio-iommufd.rst
diff --git a/include/sysemu/iommufd_device.h b/include/sysemu/iommufd_device.h
new file mode 100644
index 0000000000..795630324b
--- /dev/null
+++ b/include/sysemu/iommufd_device.h
@@ -0,0 +1,31 @@
+/*
+ * IOMMUFD Device
+ *
+ * Copyright (C) 2024 Intel Corporation.
+ *
+ * Authors: Yi Liu <yi.l.liu@intel.com>
+ * Zhenzhong Duan <zhenzhong.duan@intel.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0-or-later
+ */
+
+#ifndef SYSEMU_IOMMUFD_DEVICE_H
+#define SYSEMU_IOMMUFD_DEVICE_H
+
+#include <linux/iommufd.h>
+#include "sysemu/iommufd.h"
+
+typedef struct IOMMUFDDevice IOMMUFDDevice;
+
+/* This is an abstraction of host IOMMUFD device */
+struct IOMMUFDDevice {
+ IOMMUFDBackend *iommufd;
+ uint32_t dev_id;
+};
+
+int iommufd_device_get_info(IOMMUFDDevice *idev,
+ enum iommu_hw_info_type *type,
+ uint32_t len, void *data);
+void iommufd_device_init(void *_idev, size_t instance_size,
+ IOMMUFDBackend *iommufd, uint32_t dev_id);
+#endif
diff --git a/backends/iommufd_device.c b/backends/iommufd_device.c
new file mode 100644
index 0000000000..f6e7ca1dbf
--- /dev/null
+++ b/backends/iommufd_device.c
@@ -0,0 +1,50 @@
+/*
+ * QEMU abstract of Host IOMMU
+ *
+ * Copyright (C) 2024 Intel Corporation.
+ *
+ * Authors: Yi Liu <yi.l.liu@intel.com>
+ * Zhenzhong Duan <zhenzhong.duan@intel.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0-or-later
+ */
+
+#include <sys/ioctl.h>
+#include "qemu/osdep.h"
+#include "qemu/error-report.h"
+#include "sysemu/iommufd_device.h"
+
+int iommufd_device_get_info(IOMMUFDDevice *idev,
+ enum iommu_hw_info_type *type,
+ uint32_t len, void *data)
+{
+ struct iommu_hw_info info = {
+ .size = sizeof(info),
+ .flags = 0,
+ .dev_id = idev->dev_id,
+ .data_len = len,
+ .__reserved = 0,
+ .data_uptr = (uintptr_t)data,
+ };
+ int ret;
+
+ ret = ioctl(idev->iommufd->fd, IOMMU_GET_HW_INFO, &info);
+ if (ret) {
+ error_report("Failed to get info %m");
+ } else {
+ *type = info.out_data_type;
+ }
+
+ return ret;
+}
+
+void iommufd_device_init(void *_idev, size_t instance_size,
+ IOMMUFDBackend *iommufd, uint32_t dev_id)
+{
+ IOMMUFDDevice *idev = (IOMMUFDDevice *)_idev;
+
+ g_assert(sizeof(IOMMUFDDevice) <= instance_size);
+
+ idev->iommufd = iommufd;
+ idev->dev_id = dev_id;
+}
diff --git a/backends/meson.build b/backends/meson.build
index 8b2b111497..c437cdb363 100644
--- a/backends/meson.build
+++ b/backends/meson.build
@@ -24,7 +24,7 @@ if have_vhost_user
system_ss.add(when: 'CONFIG_VIRTIO', if_true: files('vhost-user.c'))
endif
system_ss.add(when: 'CONFIG_VIRTIO_CRYPTO', if_true: files('cryptodev-vhost.c'))
-system_ss.add(when: 'CONFIG_IOMMUFD', if_true: files('iommufd.c'))
+system_ss.add(when: 'CONFIG_IOMMUFD', if_true: files('iommufd.c', 'iommufd_device.c'))
if have_vhost_user_crypto
system_ss.add(when: 'CONFIG_VIRTIO_CRYPTO', if_true: files('cryptodev-vhost-user.c'))
endif
--
2.34.1
next prev parent reply other threads:[~2024-01-15 10:17 UTC|newest]
Thread overview: 46+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-01-15 10:13 [PATCH rfcv1 0/6] Check and sync host IOMMU cap/ecap with vIOMMU Zhenzhong Duan
2024-01-15 10:13 ` Zhenzhong Duan [this message]
2024-01-17 14:11 ` [PATCH rfcv1 1/6] backends/iommufd_device: introduce IOMMUFDDevice Eric Auger
2024-01-18 2:58 ` Duan, Zhenzhong
2024-01-18 12:42 ` Eric Auger
2024-01-19 7:31 ` Duan, Zhenzhong
2024-01-22 16:25 ` Cédric Le Goater
2024-01-23 5:51 ` Duan, Zhenzhong
2024-01-23 10:10 ` Eric Auger
2024-01-15 10:13 ` [PATCH rfcv1 2/6] hw/pci: introduce pci_device_set/unset_iommu_device() Zhenzhong Duan
2024-01-17 14:11 ` Eric Auger
2024-01-18 7:58 ` Duan, Zhenzhong
2024-01-22 16:55 ` Cédric Le Goater
2024-01-23 6:37 ` Duan, Zhenzhong
2024-01-23 7:40 ` Cédric Le Goater
2024-01-23 9:25 ` Duan, Zhenzhong
2024-01-23 10:18 ` Eric Auger
2024-01-24 9:23 ` Duan, Zhenzhong
2024-01-15 10:13 ` [PATCH rfcv1 3/6] intel_iommu: add set/unset_iommu_device callback Zhenzhong Duan
2024-01-17 15:44 ` Eric Auger
2024-01-18 8:43 ` Duan, Zhenzhong
2024-01-18 12:34 ` Eric Auger
2024-01-19 7:27 ` Duan, Zhenzhong
2024-01-22 17:09 ` Cédric Le Goater
2024-01-23 9:46 ` Duan, Zhenzhong
2024-01-15 10:13 ` [PATCH rfcv1 4/6] vfio: initialize IOMMUFDDevice and pass to vIOMMU Zhenzhong Duan
2024-01-17 15:37 ` Joao Martins
2024-01-18 8:17 ` Duan, Zhenzhong
2024-01-18 10:17 ` Yi Liu
2024-01-18 10:20 ` Joao Martins
2024-01-17 17:30 ` Eric Auger
2024-01-18 9:23 ` Duan, Zhenzhong
2024-01-22 17:15 ` Cédric Le Goater
2024-01-23 9:46 ` Duan, Zhenzhong
2024-01-23 12:54 ` Cédric Le Goater
2024-01-24 9:26 ` Duan, Zhenzhong
2024-01-15 10:13 ` [PATCH rfcv1 5/6] intel_iommu: extract out vtd_cap_init to initialize cap/ecap Zhenzhong Duan
2024-01-17 17:36 ` Eric Auger
2024-01-15 10:13 ` [PATCH rfcv1 6/6] intel_iommu: add a framework to check and sync host IOMMU cap/ecap Zhenzhong Duan
2024-01-17 17:56 ` Eric Auger
2024-01-18 9:30 ` Duan, Zhenzhong
2024-01-18 12:40 ` Eric Auger
2024-01-19 11:55 ` Duan, Zhenzhong
2024-01-23 13:10 ` Eric Auger
2024-01-23 8:39 ` Cédric Le Goater
2024-01-23 10:01 ` Duan, Zhenzhong
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=20240115101313.131139-2-zhenzhong.duan@intel.com \
--to=zhenzhong.duan@intel.com \
--cc=alex.williamson@redhat.com \
--cc=chao.p.peng@intel.com \
--cc=clg@redhat.com \
--cc=eric.auger@redhat.com \
--cc=jasowang@redhat.com \
--cc=jgg@nvidia.com \
--cc=joao.m.martins@oracle.com \
--cc=kevin.tian@intel.com \
--cc=mst@redhat.com \
--cc=nicolinc@nvidia.com \
--cc=peterx@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=yi.l.liu@intel.com \
--cc=yi.y.sun@intel.com \
--cc=yi.y.sun@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 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).