From: Zhenzhong Duan <zhenzhong.duan@intel.com>
To: qemu-devel@nongnu.org
Cc: alex.williamson@redhat.com, clg@redhat.com, jgg@nvidia.com,
nicolinc@nvidia.com, eric.auger@redhat.com, peterx@redhat.com,
jasonwang@redhat.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>
Subject: [RFC PATCH v4 21/24] vfio/as: Add vfio device iterator callback for iommufd
Date: Wed, 12 Jul 2023 15:25:25 +0800 [thread overview]
Message-ID: <20230712072528.275577-22-zhenzhong.duan@intel.com> (raw)
In-Reply-To: <20230712072528.275577-1-zhenzhong.duan@intel.com>
The way to get vfio device pointer is different between legacy
container and iommufd container, with iommufd backend support
added, it's time to add the iterator support for iommufd.
In order to implement it, a pointer to hwpt is added in vbasedev.
Signed-off-by: Zhenzhong Duan <zhenzhong.duan@intel.com>
---
hw/vfio/iommufd.c | 31 +++++++++++++++++++++++++++++++
include/hw/vfio/vfio-common.h | 1 +
2 files changed, 32 insertions(+)
diff --git a/hw/vfio/iommufd.c b/hw/vfio/iommufd.c
index 286ad0b766..e532eed2ac 100644
--- a/hw/vfio/iommufd.c
+++ b/hw/vfio/iommufd.c
@@ -36,6 +36,34 @@
#include "qemu/cutils.h"
#include "qemu/char_dev.h"
+static VFIODevice *iommufd_dev_iter_next(VFIOContainer *bcontainer,
+ VFIODevice *curr)
+{
+
+ VFIOIOASHwpt *hwpt;
+
+ assert(object_class_dynamic_cast(OBJECT_CLASS(bcontainer->ops),
+ TYPE_VFIO_IOMMU_BACKEND_IOMMUFD_OPS));
+
+ VFIOIOMMUFDContainer *container = container_of(bcontainer,
+ VFIOIOMMUFDContainer,
+ bcontainer);
+
+ if (!curr) {
+ hwpt = QLIST_FIRST(&container->hwpt_list);
+ } else {
+ if (curr->next.le_next) {
+ return curr->next.le_next;
+ }
+ hwpt = curr->hwpt->next.le_next;
+ }
+
+ if (!hwpt) {
+ return NULL;
+ }
+ return QLIST_FIRST(&hwpt->device_list);
+}
+
static int iommufd_map(VFIOContainer *bcontainer, hwaddr iova,
ram_addr_t size, void *vaddr, bool readonly)
{
@@ -218,6 +246,7 @@ static void vfio_device_detach_container(VFIODevice *vbasedev,
hwpt = vfio_find_hwpt_for_dev(container, vbasedev);
if (hwpt) {
QLIST_REMOVE(vbasedev, next);
+ vbasedev->hwpt = NULL;
if (QLIST_EMPTY(&hwpt->device_list)) {
vfio_container_put_hwpt(hwpt);
}
@@ -281,6 +310,7 @@ static int vfio_device_attach_container(VFIODevice *vbasedev,
hwpt = vfio_container_get_hwpt(container, attach_data.pt_id);
QLIST_INSERT_HEAD(&hwpt->device_list, vbasedev, next);
+ vbasedev->hwpt = hwpt;
return 0;
}
@@ -490,6 +520,7 @@ static void vfio_iommu_backend_iommufd_ops_class_init(ObjectClass *oc,
void *data) {
VFIOIOMMUBackendOpsClass *ops = VFIO_IOMMU_BACKEND_OPS_CLASS(oc);
+ ops->dev_iter_next = iommufd_dev_iter_next;
ops->dma_map = iommufd_map;
ops->dma_unmap = iommufd_unmap;
ops->attach_device = iommufd_attach_device;
diff --git a/include/hw/vfio/vfio-common.h b/include/hw/vfio/vfio-common.h
index 6434a442fd..d596e802b0 100644
--- a/include/hw/vfio/vfio-common.h
+++ b/include/hw/vfio/vfio-common.h
@@ -133,6 +133,7 @@ typedef struct VFIODevice {
#ifdef CONFIG_IOMMUFD
int devid;
IOMMUFDBackend *iommufd;
+ VFIOIOASHwpt *hwpt;
#endif
} VFIODevice;
--
2.34.1
next prev parent reply other threads:[~2023-07-12 7:43 UTC|newest]
Thread overview: 38+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-07-12 7:25 [RFC PATCH v4 00/24] vfio: Adopt iommufd Zhenzhong Duan
2023-07-12 7:25 ` [RFC PATCH v4 01/24] scripts/update-linux-headers: Add iommufd.h Zhenzhong Duan
2023-07-12 7:25 ` [RFC PATCH v4 02/24] Update linux-header per VFIO device cdev v14 Zhenzhong Duan
2023-07-12 7:49 ` Cornelia Huck
2023-07-12 9:28 ` Duan, Zhenzhong
2023-07-12 9:35 ` Cornelia Huck
2023-07-12 9:50 ` Duan, Zhenzhong
2023-07-12 7:25 ` [RFC PATCH v4 03/24] vfio/common: Move IOMMU agnostic helpers to a separate file Zhenzhong Duan
2023-07-12 7:25 ` [RFC PATCH v4 04/24] vfio/common: Introduce vfio_container_add|del_section_window() Zhenzhong Duan
2023-07-12 7:25 ` [RFC PATCH v4 05/24] vfio/common: Extract out vfio_kvm_device_[add/del]_fd Zhenzhong Duan
2023-07-12 7:25 ` [RFC PATCH v4 06/24] vfio/common: Add a vfio device iterator Zhenzhong Duan
2023-07-12 7:25 ` [RFC PATCH v4 07/24] vfio/common: Refactor vfio_viommu_preset() to be group agnostic Zhenzhong Duan
2023-07-12 7:25 ` [RFC PATCH v4 08/24] vfio/common: Move legacy VFIO backend code into separate container.c Zhenzhong Duan
2023-07-12 7:25 ` [RFC PATCH v4 09/24] vfio/common: Rename into as.c Zhenzhong Duan
2023-07-12 7:25 ` [RFC PATCH v4 10/24] vfio: Add base container Zhenzhong Duan
2023-07-12 7:25 ` [RFC PATCH v4 11/24] vfio/container: Introduce vfio_[attach/detach]_device Zhenzhong Duan
2023-07-12 7:25 ` [RFC PATCH v4 12/24] vfio/platform: Use vfio_[attach/detach]_device Zhenzhong Duan
2023-07-12 7:25 ` [RFC PATCH v4 13/24] vfio/ap: " Zhenzhong Duan
2023-07-12 7:25 ` [RFC PATCH v4 14/24] vfio/ccw: " Zhenzhong Duan
2023-07-12 7:25 ` [RFC PATCH v4 15/24] vfio/container-base: Introduce [attach/detach]_device container callbacks Zhenzhong Duan
2023-07-12 7:25 ` [RFC PATCH v4 16/24] vfio/as: Simplify vfio_viommu_preset() Zhenzhong Duan
2023-07-12 7:25 ` [RFC PATCH v4 17/24] Add iommufd configure option Zhenzhong Duan
2023-07-12 7:25 ` [RFC PATCH v4 18/24] backends/iommufd: Introduce the iommufd object Zhenzhong Duan
2023-07-12 7:25 ` [RFC PATCH v4 19/24] util/char_dev: Add open_cdev() Zhenzhong Duan
2023-07-12 7:25 ` [RFC PATCH v4 20/24] vfio/iommufd: Implement the iommufd backend Zhenzhong Duan
[not found] ` <CGME20230714092325eucas1p105978aa928776b6e008e08e793d0ac60@eucas1p1.samsung.com>
2023-07-14 9:23 ` Joel Granados
2023-07-14 9:35 ` Duan, Zhenzhong
2023-07-12 7:25 ` Zhenzhong Duan [this message]
2023-08-17 5:48 ` [RFC PATCH v4 21/24] vfio/as: Add vfio device iterator callback for iommufd Nicolin Chen
2023-08-17 6:05 ` Duan, Zhenzhong
2023-07-12 7:25 ` [RFC PATCH v4 22/24] vfio/pci: Adapt vfio pci hot reset support with iommufd BE Zhenzhong Duan
2023-08-17 5:25 ` Nicolin Chen
2023-08-17 6:11 ` Duan, Zhenzhong
2023-07-12 7:25 ` [RFC PATCH v4 23/24] vfio/as: Allow the selection of a given iommu backend Zhenzhong Duan
2023-07-12 7:25 ` [RFC PATCH v4 24/24] vfio/iommufd: Make vfio cdev pre-openable by passing a file handle Zhenzhong Duan
2023-08-01 8:28 ` [RFC PATCH v4 00/24] vfio: Adopt iommufd Duan, Zhenzhong
2023-08-02 22:44 ` Nicolin Chen
2023-08-03 1:31 ` 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=20230712072528.275577-22-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=jasonwang@redhat.com \
--cc=jgg@nvidia.com \
--cc=kevin.tian@intel.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 \
/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).