qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v3 0/4] VFIO and IOMMU prerequisite stuff for IOMMU nesting support
@ 2025-06-04  6:21 Zhenzhong Duan
  2025-06-04  6:21 ` [PATCH v3 1/4] backends/iommufd: Add a helper to invalidate user-managed HWPT Zhenzhong Duan
                   ` (4 more replies)
  0 siblings, 5 replies; 9+ messages in thread
From: Zhenzhong Duan @ 2025-06-04  6:21 UTC (permalink / raw)
  To: qemu-devel
  Cc: alex.williamson, clg, eric.auger, mst, jasowang, peterx, ddutile,
	jgg, nicolinc, shameerali.kolothum.thodi, joao.m.martins,
	clement.mathieu--drif, kevin.tian, yi.l.liu, chao.p.peng,
	Zhenzhong Duan

Hi,

The first 6 patches of [1] are all VFIO or IOMMUFD related additions.
Split them out per Cédric and seek for quick acceptance.

I didn't copy changelog from [1] as it's a mix of the whole nesting series.

For who want a quick view of the whole nesting series [2].

Test done:
- VFIO devices hotplug/unplug
- build test on Windows

[1] https://lists.gnu.org/archive/html/qemu-devel/2025-05/msg05002.html
[2] https://github.com/yiliu1765/qemu/tree/zhenzhong/iommufd_nesting.v1.wip

Thanks
Zhenzhong

Changelog:
v3:
- add doc comment update for new field vendor_caps (Eric)

v2:
- report kernel BUG as error instead of assert (Cédric)
- merge patch2 and patch3 (Cédric)
- handle vendor cap check directly from vtd_check_hiod, so patch6 removed (Cédric)
- s/data_ptr/data (Cédric)
- s/totally/total (Donald)

v1:
- changed to save raw data in VendorCaps, so we can keep all vendor structure
  decoding inside the backend and VFIO wouldn't need to care about types nor
  what's inside the data.


Zhenzhong Duan (4):
  backends/iommufd: Add a helper to invalidate user-managed HWPT
  vfio/iommufd: Add properties and handlers to
    TYPE_HOST_IOMMU_DEVICE_IOMMUFD
  vfio/iommufd: Implement [at|de]tach_hwpt handlers
  vfio/iommufd: Save vendor specific device info

 include/system/host_iommu_device.h | 15 ++++++++
 include/system/iommufd.h           | 54 ++++++++++++++++++++++++++++
 backends/iommufd.c                 | 58 ++++++++++++++++++++++++++++++
 hw/vfio/iommufd.c                  | 36 ++++++++++++++++---
 backends/trace-events              |  1 +
 5 files changed, 159 insertions(+), 5 deletions(-)

-- 
2.34.1



^ permalink raw reply	[flat|nested] 9+ messages in thread

* [PATCH v3 1/4] backends/iommufd: Add a helper to invalidate user-managed HWPT
  2025-06-04  6:21 [PATCH v3 0/4] VFIO and IOMMU prerequisite stuff for IOMMU nesting support Zhenzhong Duan
@ 2025-06-04  6:21 ` Zhenzhong Duan
  2025-06-04  6:21 ` [PATCH v3 2/4] vfio/iommufd: Add properties and handlers to TYPE_HOST_IOMMU_DEVICE_IOMMUFD Zhenzhong Duan
                   ` (3 subsequent siblings)
  4 siblings, 0 replies; 9+ messages in thread
From: Zhenzhong Duan @ 2025-06-04  6:21 UTC (permalink / raw)
  To: qemu-devel
  Cc: alex.williamson, clg, eric.auger, mst, jasowang, peterx, ddutile,
	jgg, nicolinc, shameerali.kolothum.thodi, joao.m.martins,
	clement.mathieu--drif, kevin.tian, yi.l.liu, chao.p.peng,
	Zhenzhong Duan

This helper passes cache invalidation request from guest to invalidate
stage-1 page table cache in host hardware.

Signed-off-by: Nicolin Chen <nicolinc@nvidia.com>
Signed-off-by: Zhenzhong Duan <zhenzhong.duan@intel.com>
Reviewed-by: Cédric Le Goater <clg@redhat.com>
Reviewed-by: Eric Auger <eric.auger@redhat.com>
---
 include/system/iommufd.h |  4 ++++
 backends/iommufd.c       | 36 ++++++++++++++++++++++++++++++++++++
 backends/trace-events    |  1 +
 3 files changed, 41 insertions(+)

diff --git a/include/system/iommufd.h b/include/system/iommufd.h
index cbab75bfbf..83ab8e1e4c 100644
--- a/include/system/iommufd.h
+++ b/include/system/iommufd.h
@@ -61,6 +61,10 @@ bool iommufd_backend_get_dirty_bitmap(IOMMUFDBackend *be, uint32_t hwpt_id,
                                       uint64_t iova, ram_addr_t size,
                                       uint64_t page_size, uint64_t *data,
                                       Error **errp);
+bool iommufd_backend_invalidate_cache(IOMMUFDBackend *be, uint32_t id,
+                                      uint32_t data_type, uint32_t entry_len,
+                                      uint32_t *entry_num, void *data,
+                                      Error **errp);
 
 #define TYPE_HOST_IOMMU_DEVICE_IOMMUFD TYPE_HOST_IOMMU_DEVICE "-iommufd"
 #endif
diff --git a/backends/iommufd.c b/backends/iommufd.c
index b73f75cd0b..8bcdb60fe7 100644
--- a/backends/iommufd.c
+++ b/backends/iommufd.c
@@ -311,6 +311,42 @@ bool iommufd_backend_get_device_info(IOMMUFDBackend *be, uint32_t devid,
     return true;
 }
 
+bool iommufd_backend_invalidate_cache(IOMMUFDBackend *be, uint32_t id,
+                                      uint32_t data_type, uint32_t entry_len,
+                                      uint32_t *entry_num, void *data,
+                                      Error **errp)
+{
+    int ret, fd = be->fd;
+    uint32_t total_entries = *entry_num;
+    struct iommu_hwpt_invalidate cache = {
+        .size = sizeof(cache),
+        .hwpt_id = id,
+        .data_type = data_type,
+        .entry_len = entry_len,
+        .entry_num = total_entries,
+        .data_uptr = (uintptr_t)data,
+    };
+
+    ret = ioctl(fd, IOMMU_HWPT_INVALIDATE, &cache);
+    trace_iommufd_backend_invalidate_cache(fd, id, data_type, entry_len,
+                                           total_entries, cache.entry_num,
+                                           (uintptr_t)data, ret ? errno : 0);
+    *entry_num = cache.entry_num;
+
+    if (ret) {
+        error_setg_errno(errp, errno, "IOMMU_HWPT_INVALIDATE failed:"
+                         " total %d entries, processed %d entries",
+                         total_entries, cache.entry_num);
+    } else if (total_entries != cache.entry_num) {
+        error_setg(errp, "IOMMU_HWPT_INVALIDATE succeed but with unprocessed"
+                         " entries: total %d entries, processed %d entries."
+                         " Kernel BUG?!", total_entries, cache.entry_num);
+        return false;
+    }
+
+    return !ret;
+}
+
 static int hiod_iommufd_get_cap(HostIOMMUDevice *hiod, int cap, Error **errp)
 {
     HostIOMMUDeviceCaps *caps = &hiod->caps;
diff --git a/backends/trace-events b/backends/trace-events
index 40811a3162..7278214ea5 100644
--- a/backends/trace-events
+++ b/backends/trace-events
@@ -18,3 +18,4 @@ iommufd_backend_alloc_hwpt(int iommufd, uint32_t dev_id, uint32_t pt_id, uint32_
 iommufd_backend_free_id(int iommufd, uint32_t id, int ret) " iommufd=%d id=%d (%d)"
 iommufd_backend_set_dirty(int iommufd, uint32_t hwpt_id, bool start, int ret) " iommufd=%d hwpt=%u enable=%d (%d)"
 iommufd_backend_get_dirty_bitmap(int iommufd, uint32_t hwpt_id, uint64_t iova, uint64_t size, uint64_t page_size, int ret) " iommufd=%d hwpt=%u iova=0x%"PRIx64" size=0x%"PRIx64" page_size=0x%"PRIx64" (%d)"
+iommufd_backend_invalidate_cache(int iommufd, uint32_t id, uint32_t data_type, uint32_t entry_len, uint32_t entry_num, uint32_t done_num, uint64_t data_ptr, int ret) " iommufd=%d id=%u data_type=%u entry_len=%u entry_num=%u done_num=%u data_ptr=0x%"PRIx64" (%d)"
-- 
2.34.1



^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [PATCH v3 2/4] vfio/iommufd: Add properties and handlers to TYPE_HOST_IOMMU_DEVICE_IOMMUFD
  2025-06-04  6:21 [PATCH v3 0/4] VFIO and IOMMU prerequisite stuff for IOMMU nesting support Zhenzhong Duan
  2025-06-04  6:21 ` [PATCH v3 1/4] backends/iommufd: Add a helper to invalidate user-managed HWPT Zhenzhong Duan
@ 2025-06-04  6:21 ` Zhenzhong Duan
  2025-06-04  6:21 ` [PATCH v3 3/4] vfio/iommufd: Implement [at|de]tach_hwpt handlers Zhenzhong Duan
                   ` (2 subsequent siblings)
  4 siblings, 0 replies; 9+ messages in thread
From: Zhenzhong Duan @ 2025-06-04  6:21 UTC (permalink / raw)
  To: qemu-devel
  Cc: alex.williamson, clg, eric.auger, mst, jasowang, peterx, ddutile,
	jgg, nicolinc, shameerali.kolothum.thodi, joao.m.martins,
	clement.mathieu--drif, kevin.tian, yi.l.liu, chao.p.peng,
	Zhenzhong Duan

Enhance HostIOMMUDeviceIOMMUFD object with 3 new members, specific
to the iommufd BE + 2 new class functions.

IOMMUFD BE includes IOMMUFD handle, devid and hwpt_id. IOMMUFD handle
and devid are used to allocate/free ioas and hwpt. hwpt_id is used to
re-attach IOMMUFD backed device to its default VFIO sub-system created
hwpt, i.e., when vIOMMU is disabled by guest. These properties are
initialized in hiod::realize() after attachment.

2 new class functions are [at|de]tach_hwpt(). They are used to
attach/detach hwpt. VFIO and VDPA can have different implementions,
so implementation will be in sub-class instead of HostIOMMUDeviceIOMMUFD,
e.g., in HostIOMMUDeviceIOMMUFDVFIO.

Add two wrappers host_iommu_device_iommufd_[at|de]tach_hwpt to wrap the
two functions.

Signed-off-by: Zhenzhong Duan <zhenzhong.duan@intel.com>
Reviewed-by: Cédric Le Goater <clg@redhat.com>
Reviewed-by: Eric Auger <eric.auger@redhat.com>
---
 include/system/iommufd.h | 50 ++++++++++++++++++++++++++++++++++++++++
 backends/iommufd.c       | 22 ++++++++++++++++++
 hw/vfio/iommufd.c        |  6 +++++
 3 files changed, 78 insertions(+)

diff --git a/include/system/iommufd.h b/include/system/iommufd.h
index 83ab8e1e4c..283861b924 100644
--- a/include/system/iommufd.h
+++ b/include/system/iommufd.h
@@ -67,4 +67,54 @@ bool iommufd_backend_invalidate_cache(IOMMUFDBackend *be, uint32_t id,
                                       Error **errp);
 
 #define TYPE_HOST_IOMMU_DEVICE_IOMMUFD TYPE_HOST_IOMMU_DEVICE "-iommufd"
+OBJECT_DECLARE_TYPE(HostIOMMUDeviceIOMMUFD, HostIOMMUDeviceIOMMUFDClass,
+                    HOST_IOMMU_DEVICE_IOMMUFD)
+
+/* Overload of the host IOMMU device for the iommufd backend */
+struct HostIOMMUDeviceIOMMUFD {
+    HostIOMMUDevice parent_obj;
+
+    IOMMUFDBackend *iommufd;
+    uint32_t devid;
+    uint32_t hwpt_id;
+};
+
+struct HostIOMMUDeviceIOMMUFDClass {
+    HostIOMMUDeviceClass parent_class;
+
+    /**
+     * @attach_hwpt: attach host IOMMU device to IOMMUFD hardware page table.
+     * VFIO and VDPA device can have different implementation.
+     *
+     * Mandatory callback.
+     *
+     * @idev: host IOMMU device backed by IOMMUFD backend.
+     *
+     * @hwpt_id: ID of IOMMUFD hardware page table.
+     *
+     * @errp: pass an Error out when attachment fails.
+     *
+     * Returns: true on success, false on failure.
+     */
+    bool (*attach_hwpt)(HostIOMMUDeviceIOMMUFD *idev, uint32_t hwpt_id,
+                        Error **errp);
+    /**
+     * @detach_hwpt: detach host IOMMU device from IOMMUFD hardware page table.
+     * VFIO and VDPA device can have different implementation.
+     *
+     * Mandatory callback.
+     *
+     * @idev: host IOMMU device backed by IOMMUFD backend.
+     *
+     * @errp: pass an Error out when attachment fails.
+     *
+     * Returns: true on success, false on failure.
+     */
+    bool (*detach_hwpt)(HostIOMMUDeviceIOMMUFD *idev, Error **errp);
+};
+
+bool host_iommu_device_iommufd_attach_hwpt(HostIOMMUDeviceIOMMUFD *idev,
+                                           uint32_t hwpt_id, Error **errp);
+bool host_iommu_device_iommufd_detach_hwpt(HostIOMMUDeviceIOMMUFD *idev,
+                                           Error **errp);
 #endif
diff --git a/backends/iommufd.c b/backends/iommufd.c
index 8bcdb60fe7..c2c47abf7e 100644
--- a/backends/iommufd.c
+++ b/backends/iommufd.c
@@ -347,6 +347,26 @@ bool iommufd_backend_invalidate_cache(IOMMUFDBackend *be, uint32_t id,
     return !ret;
 }
 
+bool host_iommu_device_iommufd_attach_hwpt(HostIOMMUDeviceIOMMUFD *idev,
+                                           uint32_t hwpt_id, Error **errp)
+{
+    HostIOMMUDeviceIOMMUFDClass *idevc =
+        HOST_IOMMU_DEVICE_IOMMUFD_GET_CLASS(idev);
+
+    g_assert(idevc->attach_hwpt);
+    return idevc->attach_hwpt(idev, hwpt_id, errp);
+}
+
+bool host_iommu_device_iommufd_detach_hwpt(HostIOMMUDeviceIOMMUFD *idev,
+                                           Error **errp)
+{
+    HostIOMMUDeviceIOMMUFDClass *idevc =
+        HOST_IOMMU_DEVICE_IOMMUFD_GET_CLASS(idev);
+
+    g_assert(idevc->detach_hwpt);
+    return idevc->detach_hwpt(idev, errp);
+}
+
 static int hiod_iommufd_get_cap(HostIOMMUDevice *hiod, int cap, Error **errp)
 {
     HostIOMMUDeviceCaps *caps = &hiod->caps;
@@ -385,6 +405,8 @@ static const TypeInfo types[] = {
     }, {
         .name = TYPE_HOST_IOMMU_DEVICE_IOMMUFD,
         .parent = TYPE_HOST_IOMMU_DEVICE,
+        .instance_size = sizeof(HostIOMMUDeviceIOMMUFD),
+        .class_size = sizeof(HostIOMMUDeviceIOMMUFDClass),
         .class_init = hiod_iommufd_class_init,
         .abstract = true,
     }
diff --git a/hw/vfio/iommufd.c b/hw/vfio/iommufd.c
index c42ca64526..82fcd5c6a5 100644
--- a/hw/vfio/iommufd.c
+++ b/hw/vfio/iommufd.c
@@ -819,6 +819,7 @@ static bool hiod_iommufd_vfio_realize(HostIOMMUDevice *hiod, void *opaque,
                                       Error **errp)
 {
     VFIODevice *vdev = opaque;
+    HostIOMMUDeviceIOMMUFD *idev;
     HostIOMMUDeviceCaps *caps = &hiod->caps;
     enum iommu_hw_info_type type;
     union {
@@ -838,6 +839,11 @@ static bool hiod_iommufd_vfio_realize(HostIOMMUDevice *hiod, void *opaque,
     caps->type = type;
     caps->hw_caps = hw_caps;
 
+    idev = HOST_IOMMU_DEVICE_IOMMUFD(hiod);
+    idev->iommufd = vdev->iommufd;
+    idev->devid = vdev->devid;
+    idev->hwpt_id = vdev->hwpt->hwpt_id;
+
     return true;
 }
 
-- 
2.34.1



^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [PATCH v3 3/4] vfio/iommufd: Implement [at|de]tach_hwpt handlers
  2025-06-04  6:21 [PATCH v3 0/4] VFIO and IOMMU prerequisite stuff for IOMMU nesting support Zhenzhong Duan
  2025-06-04  6:21 ` [PATCH v3 1/4] backends/iommufd: Add a helper to invalidate user-managed HWPT Zhenzhong Duan
  2025-06-04  6:21 ` [PATCH v3 2/4] vfio/iommufd: Add properties and handlers to TYPE_HOST_IOMMU_DEVICE_IOMMUFD Zhenzhong Duan
@ 2025-06-04  6:21 ` Zhenzhong Duan
  2025-06-04  6:21 ` [PATCH v3 4/4] vfio/iommufd: Save vendor specific device info Zhenzhong Duan
  2025-06-04  6:59 ` [PATCH v3 0/4] VFIO and IOMMU prerequisite stuff for IOMMU nesting support Cédric Le Goater
  4 siblings, 0 replies; 9+ messages in thread
From: Zhenzhong Duan @ 2025-06-04  6:21 UTC (permalink / raw)
  To: qemu-devel
  Cc: alex.williamson, clg, eric.auger, mst, jasowang, peterx, ddutile,
	jgg, nicolinc, shameerali.kolothum.thodi, joao.m.martins,
	clement.mathieu--drif, kevin.tian, yi.l.liu, chao.p.peng,
	Zhenzhong Duan

Implement [at|de]tach_hwpt handlers in VFIO subsystem. vIOMMU
utilizes them to attach to or detach from hwpt on host side.

Signed-off-by: Yi Liu <yi.l.liu@intel.com>
Signed-off-by: Zhenzhong Duan <zhenzhong.duan@intel.com>
Reviewed-by: Cédric Le Goater <clg@redhat.com>
Reviewed-by: Eric Auger <eric.auger@redhat.com>
---
 hw/vfio/iommufd.c | 22 ++++++++++++++++++++++
 1 file changed, 22 insertions(+)

diff --git a/hw/vfio/iommufd.c b/hw/vfio/iommufd.c
index 82fcd5c6a5..3910b4b2b9 100644
--- a/hw/vfio/iommufd.c
+++ b/hw/vfio/iommufd.c
@@ -815,6 +815,24 @@ static void vfio_iommu_iommufd_class_init(ObjectClass *klass, const void *data)
     vioc->query_dirty_bitmap = iommufd_query_dirty_bitmap;
 };
 
+static bool
+host_iommu_device_iommufd_vfio_attach_hwpt(HostIOMMUDeviceIOMMUFD *idev,
+                                           uint32_t hwpt_id, Error **errp)
+{
+    VFIODevice *vbasedev = HOST_IOMMU_DEVICE(idev)->agent;
+
+    return !iommufd_cdev_attach_ioas_hwpt(vbasedev, hwpt_id, errp);
+}
+
+static bool
+host_iommu_device_iommufd_vfio_detach_hwpt(HostIOMMUDeviceIOMMUFD *idev,
+                                           Error **errp)
+{
+    VFIODevice *vbasedev = HOST_IOMMU_DEVICE(idev)->agent;
+
+    return iommufd_cdev_detach_ioas_hwpt(vbasedev, errp);
+}
+
 static bool hiod_iommufd_vfio_realize(HostIOMMUDevice *hiod, void *opaque,
                                       Error **errp)
 {
@@ -869,10 +887,14 @@ hiod_iommufd_vfio_get_page_size_mask(HostIOMMUDevice *hiod)
 static void hiod_iommufd_vfio_class_init(ObjectClass *oc, const void *data)
 {
     HostIOMMUDeviceClass *hiodc = HOST_IOMMU_DEVICE_CLASS(oc);
+    HostIOMMUDeviceIOMMUFDClass *idevc = HOST_IOMMU_DEVICE_IOMMUFD_CLASS(oc);
 
     hiodc->realize = hiod_iommufd_vfio_realize;
     hiodc->get_iova_ranges = hiod_iommufd_vfio_get_iova_ranges;
     hiodc->get_page_size_mask = hiod_iommufd_vfio_get_page_size_mask;
+
+    idevc->attach_hwpt = host_iommu_device_iommufd_vfio_attach_hwpt;
+    idevc->detach_hwpt = host_iommu_device_iommufd_vfio_detach_hwpt;
 };
 
 static const TypeInfo types[] = {
-- 
2.34.1



^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [PATCH v3 4/4] vfio/iommufd: Save vendor specific device info
  2025-06-04  6:21 [PATCH v3 0/4] VFIO and IOMMU prerequisite stuff for IOMMU nesting support Zhenzhong Duan
                   ` (2 preceding siblings ...)
  2025-06-04  6:21 ` [PATCH v3 3/4] vfio/iommufd: Implement [at|de]tach_hwpt handlers Zhenzhong Duan
@ 2025-06-04  6:21 ` Zhenzhong Duan
  2025-06-04  6:59 ` [PATCH v3 0/4] VFIO and IOMMU prerequisite stuff for IOMMU nesting support Cédric Le Goater
  4 siblings, 0 replies; 9+ messages in thread
From: Zhenzhong Duan @ 2025-06-04  6:21 UTC (permalink / raw)
  To: qemu-devel
  Cc: alex.williamson, clg, eric.auger, mst, jasowang, peterx, ddutile,
	jgg, nicolinc, shameerali.kolothum.thodi, joao.m.martins,
	clement.mathieu--drif, kevin.tian, yi.l.liu, chao.p.peng,
	Zhenzhong Duan

Some device information returned by ioctl(IOMMU_GET_HW_INFO) are vendor
specific. Save them as raw data in a union supporting different vendors,
then vendor IOMMU can query the raw data with its fixed format for
capability directly.

Because IOMMU_GET_HW_INFO is only supported in linux, so declare those
capability related structures with CONFIG_LINUX.

Suggested-by: Eric Auger <eric.auger@redhat.com>
Suggested-by: Nicolin Chen <nicolinc@nvidia.com>
Signed-off-by: Zhenzhong Duan <zhenzhong.duan@intel.com>
Reviewed-by: Nicolin Chen <nicolinc@nvidia.com>
Reviewed-by: Eric Auger <eric.auger@redhat.com>
---
 include/system/host_iommu_device.h | 15 +++++++++++++++
 hw/vfio/iommufd.c                  |  8 +++-----
 2 files changed, 18 insertions(+), 5 deletions(-)

diff --git a/include/system/host_iommu_device.h b/include/system/host_iommu_device.h
index 809cced4ba..ab849a4a82 100644
--- a/include/system/host_iommu_device.h
+++ b/include/system/host_iommu_device.h
@@ -14,6 +14,13 @@
 
 #include "qom/object.h"
 #include "qapi/error.h"
+#ifdef CONFIG_LINUX
+#include "linux/iommufd.h"
+
+typedef union VendorCaps {
+    struct iommu_hw_info_vtd vtd;
+    struct iommu_hw_info_arm_smmuv3 smmuv3;
+} VendorCaps;
 
 /**
  * struct HostIOMMUDeviceCaps - Define host IOMMU device capabilities.
@@ -22,11 +29,17 @@
  *
  * @hw_caps: host platform IOMMU capabilities (e.g. on IOMMUFD this represents
  *           the @out_capabilities value returned from IOMMU_GET_HW_INFO ioctl)
+ *
+ * @vendor_caps: host platform IOMMU vendor specific capabilities (e.g. on
+ *               IOMMUFD this represents a user-space buffer filled by kernel
+ *               with host IOMMU @type specific hardware information data)
  */
 typedef struct HostIOMMUDeviceCaps {
     uint32_t type;
     uint64_t hw_caps;
+    VendorCaps vendor_caps;
 } HostIOMMUDeviceCaps;
+#endif
 
 #define TYPE_HOST_IOMMU_DEVICE "host-iommu-device"
 OBJECT_DECLARE_TYPE(HostIOMMUDevice, HostIOMMUDeviceClass, HOST_IOMMU_DEVICE)
@@ -38,7 +51,9 @@ struct HostIOMMUDevice {
     void *agent; /* pointer to agent device, ie. VFIO or VDPA device */
     PCIBus *aliased_bus;
     int aliased_devfn;
+#ifdef CONFIG_LINUX
     HostIOMMUDeviceCaps caps;
+#endif
 };
 
 /**
diff --git a/hw/vfio/iommufd.c b/hw/vfio/iommufd.c
index 3910b4b2b9..d3efef71af 100644
--- a/hw/vfio/iommufd.c
+++ b/hw/vfio/iommufd.c
@@ -839,16 +839,14 @@ static bool hiod_iommufd_vfio_realize(HostIOMMUDevice *hiod, void *opaque,
     VFIODevice *vdev = opaque;
     HostIOMMUDeviceIOMMUFD *idev;
     HostIOMMUDeviceCaps *caps = &hiod->caps;
+    VendorCaps *vendor_caps = &caps->vendor_caps;
     enum iommu_hw_info_type type;
-    union {
-        struct iommu_hw_info_vtd vtd;
-    } data;
     uint64_t hw_caps;
 
     hiod->agent = opaque;
 
-    if (!iommufd_backend_get_device_info(vdev->iommufd, vdev->devid,
-                                         &type, &data, sizeof(data),
+    if (!iommufd_backend_get_device_info(vdev->iommufd, vdev->devid, &type,
+                                         vendor_caps, sizeof(*vendor_caps),
                                          &hw_caps, errp)) {
         return false;
     }
-- 
2.34.1



^ permalink raw reply related	[flat|nested] 9+ messages in thread

* Re: [PATCH v3 0/4] VFIO and IOMMU prerequisite stuff for IOMMU nesting support
  2025-06-04  6:21 [PATCH v3 0/4] VFIO and IOMMU prerequisite stuff for IOMMU nesting support Zhenzhong Duan
                   ` (3 preceding siblings ...)
  2025-06-04  6:21 ` [PATCH v3 4/4] vfio/iommufd: Save vendor specific device info Zhenzhong Duan
@ 2025-06-04  6:59 ` Cédric Le Goater
  2025-06-04 12:08   ` Jason Gunthorpe
  4 siblings, 1 reply; 9+ messages in thread
From: Cédric Le Goater @ 2025-06-04  6:59 UTC (permalink / raw)
  To: Zhenzhong Duan, qemu-devel
  Cc: alex.williamson, eric.auger, mst, jasowang, peterx, ddutile, jgg,
	nicolinc, shameerali.kolothum.thodi, joao.m.martins,
	clement.mathieu--drif, kevin.tian, yi.l.liu, chao.p.peng

On 6/4/25 08:21, Zhenzhong Duan wrote:
> Hi,
> 
> The first 6 patches of [1] are all VFIO or IOMMUFD related additions.
> Split them out per Cédric and seek for quick acceptance.
> 
> I didn't copy changelog from [1] as it's a mix of the whole nesting series.
> 
> For who want a quick view of the whole nesting series [2].
> 
> Test done:
> - VFIO devices hotplug/unplug
> - build test on Windows
> 
> [1] https://lists.gnu.org/archive/html/qemu-devel/2025-05/msg05002.html
> [2] https://github.com/yiliu1765/qemu/tree/zhenzhong/iommufd_nesting.v1.wip
> 
> Thanks
> Zhenzhong
> 
> Changelog:
> v3:
> - add doc comment update for new field vendor_caps (Eric)
> 
> v2:
> - report kernel BUG as error instead of assert (Cédric)
> - merge patch2 and patch3 (Cédric)
> - handle vendor cap check directly from vtd_check_hiod, so patch6 removed (Cédric)
> - s/data_ptr/data (Cédric)
> - s/totally/total (Donald)
> 
> v1:
> - changed to save raw data in VendorCaps, so we can keep all vendor structure
>    decoding inside the backend and VFIO wouldn't need to care about types nor
>    what's inside the data.
> 
> 
> Zhenzhong Duan (4):
>    backends/iommufd: Add a helper to invalidate user-managed HWPT
>    vfio/iommufd: Add properties and handlers to
>      TYPE_HOST_IOMMU_DEVICE_IOMMUFD
>    vfio/iommufd: Implement [at|de]tach_hwpt handlers
>    vfio/iommufd: Save vendor specific device info
> 
>   include/system/host_iommu_device.h | 15 ++++++++
>   include/system/iommufd.h           | 54 ++++++++++++++++++++++++++++
>   backends/iommufd.c                 | 58 ++++++++++++++++++++++++++++++
>   hw/vfio/iommufd.c                  | 36 ++++++++++++++++---
>   backends/trace-events              |  1 +
>   5 files changed, 159 insertions(+), 5 deletions(-)
> 

vfio-next updated.

b4 complained for a couple of trailers :

     Reviewed-by: Nicolin Chen <nicolinc@nvidia.com> (✗ DKIM/nvidia.com)

I included them nevertheless.


Cheers,

C.




^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH v3 0/4] VFIO and IOMMU prerequisite stuff for IOMMU nesting support
  2025-06-04  6:59 ` [PATCH v3 0/4] VFIO and IOMMU prerequisite stuff for IOMMU nesting support Cédric Le Goater
@ 2025-06-04 12:08   ` Jason Gunthorpe
  2025-06-04 12:20     ` Cédric Le Goater
  0 siblings, 1 reply; 9+ messages in thread
From: Jason Gunthorpe @ 2025-06-04 12:08 UTC (permalink / raw)
  To: Cédric Le Goater
  Cc: Zhenzhong Duan, qemu-devel, alex.williamson, eric.auger, mst,
	jasowang, peterx, ddutile, nicolinc, shameerali.kolothum.thodi,
	joao.m.martins, clement.mathieu--drif, kevin.tian, yi.l.liu,
	chao.p.peng

On Wed, Jun 04, 2025 at 08:59:37AM +0200, Cédric Le Goater wrote:

> b4 complained for a couple of trailers :

He re-reviewed patches he contributed to making :)

>     Reviewed-by: Nicolin Chen <nicolinc@nvidia.com> (✗ DKIM/nvidia.com)

But why do you have an X? The messages are properly formed leaving the
nvidia server, I checked.. And my b4 is happy:

$ b4 am https://lore.kernel.org/qemu-devel/aBUHLWY1Qdapgl+Y@Asurada-Nvidia/
Grabbing thread from lore.kernel.org/all/aBUHLWY1Qdapgl%2BY@Asurada-Nvidia/t.mbox.gz
Analyzing 50 messages in the thread
Looking for additional code-review trailers on lore.kernel.org
Analyzing 7 code-review messages
Checking attestation on all messages, may take a moment...
---
  [PATCH v2 1/6] hw/arm/smmuv3: Add support to associate a PCIe RC
    + Reviewed-by: Nicolin Chen <nicolinc@nvidia.com> (✓ DKIM/nvidia.com)
  [PATCH v2 2/6] hw/arm/virt-acpi-build: Update IORT for multiple smmuv3 devices
    + Reviewed-by: Nicolin Chen <nicolinc@nvidia.com> (✓ DKIM/nvidia.com)
  [PATCH v2 3/6] hw/arm/virt: Factor out common SMMUV3 dt bindings code
    + Reviewed-by: Nicolin Chen <nicolinc@nvidia.com> (✓ DKIM/nvidia.com)
    + Reviewed-by: Eric Auger <eric.auger@redhat.com> (✓ DKIM/redhat.com)
  [PATCH v2 4/6] hw/arm/virt: Add an SMMU_IO_LEN macro
    + Reviewed-by: Eric Auger <eric.auger@redhat.com> (✓ DKIM/redhat.com)
    + Reviewed-by: Donald Dutile <ddutile@redhat.com> (✓ DKIM/redhat.com)
  [PATCH v2 5/6] hw/arm/virt: Add support for smmuv3 device
  [PATCH v2 6/6] hw/arm/smmuv3: Enable smmuv3 device creation
    + Reviewed-by: Nicolin Chen <nicolinc@nvidia.com> (✓ DKIM/nvidia.com)

Jason


^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH v3 0/4] VFIO and IOMMU prerequisite stuff for IOMMU nesting support
  2025-06-04 12:08   ` Jason Gunthorpe
@ 2025-06-04 12:20     ` Cédric Le Goater
  2025-06-04 12:28       ` Jason Gunthorpe
  0 siblings, 1 reply; 9+ messages in thread
From: Cédric Le Goater @ 2025-06-04 12:20 UTC (permalink / raw)
  To: Jason Gunthorpe
  Cc: Zhenzhong Duan, qemu-devel, alex.williamson, eric.auger, mst,
	jasowang, peterx, ddutile, nicolinc, shameerali.kolothum.thodi,
	joao.m.martins, clement.mathieu--drif, kevin.tian, yi.l.liu,
	chao.p.peng

On 6/4/25 14:08, Jason Gunthorpe wrote:
> On Wed, Jun 04, 2025 at 08:59:37AM +0200, Cédric Le Goater wrote:
> 
>> b4 complained for a couple of trailers :
> 
> He re-reviewed patches he contributed to making :)
> 
>>      Reviewed-by: Nicolin Chen <nicolinc@nvidia.com> (✗ DKIM/nvidia.com)
> 
> But why do you have an X? The messages are properly formed leaving the
> nvidia server, I checked.. And my b4 is happy:
> 
> $ b4 am https://lore.kernel.org/qemu-devel/aBUHLWY1Qdapgl+Y@Asurada-Nvidia/
> Grabbing thread from lore.kernel.org/all/aBUHLWY1Qdapgl%2BY@Asurada-Nvidia/t.mbox.gz
> Analyzing 50 messages in the thread
> Looking for additional code-review trailers on lore.kernel.org
> Analyzing 7 code-review messages
> Checking attestation on all messages, may take a moment...
> ---
>    [PATCH v2 1/6] hw/arm/smmuv3: Add support to associate a PCIe RC
>      + Reviewed-by: Nicolin Chen <nicolinc@nvidia.com> (✓ DKIM/nvidia.com)
>    [PATCH v2 2/6] hw/arm/virt-acpi-build: Update IORT for multiple smmuv3 devices
>      + Reviewed-by: Nicolin Chen <nicolinc@nvidia.com> (✓ DKIM/nvidia.com)
>    [PATCH v2 3/6] hw/arm/virt: Factor out common SMMUV3 dt bindings code
>      + Reviewed-by: Nicolin Chen <nicolinc@nvidia.com> (✓ DKIM/nvidia.com)
>      + Reviewed-by: Eric Auger <eric.auger@redhat.com> (✓ DKIM/redhat.com)
>    [PATCH v2 4/6] hw/arm/virt: Add an SMMU_IO_LEN macro
>      + Reviewed-by: Eric Auger <eric.auger@redhat.com> (✓ DKIM/redhat.com)
>      + Reviewed-by: Donald Dutile <ddutile@redhat.com> (✓ DKIM/redhat.com)
>    [PATCH v2 5/6] hw/arm/virt: Add support for smmuv3 device
>    [PATCH v2 6/6] hw/arm/smmuv3: Enable smmuv3 device creation
>      + Reviewed-by: Nicolin Chen <nicolinc@nvidia.com> (✓ DKIM/nvidia.com)

Ah ! Interesting, using the link doesn't report issues.

I use the message-id on v3 :

$ b4 am 20250604062115.4004200-1-zhenzhong.duan@intel.com
Analyzing 7 messages in the thread
Analyzing 76 code-review messages
Checking attestation on all messages, may take a moment...
---
   ✓ [PATCH v3 1/4] backends/iommufd: Add a helper to invalidate user-managed HWPT
   ✓ [PATCH v3 2/4] vfio/iommufd: Add properties and handlers to TYPE_HOST_IOMMU_DEVICE_IOMMUFD
   ✓ [PATCH v3 3/4] vfio/iommufd: Implement [at|de]tach_hwpt handlers
   ✓ [PATCH v3 4/4] vfio/iommufd: Save vendor specific device info
   ---
   ✓ Signed: DKIM/intel.com
---
Total patches: 4
---
NOTE: some trailers ignored due to from/email mismatches:
     ! Trailer: Reviewed-by: Nicolin Chen <nicolinc@nvidia.com>
      Msg From: Nicolin Chen via <qemu-devel@nongnu.org>
     ! Trailer: Reviewed-by: Nicolin Chen <nicolinc@nvidia.com>
      Msg From: Cédric Le Goater <clg@redhat.com>
NOTE: Rerun with -S to apply them anyway
---
Cover: ./v3_20250604_zhenzhong_duan_vfio_and_iommu_prerequisite_stuff_for_iommu_nesting_support.cover
  Link: https://lore.kernel.org/r/20250604062115.4004200-1-zhenzhong.duan@intel.com
  Base: not specified
        git am ./v3_20250604_zhenzhong_duan_vfio_and_iommu_prerequisite_stuff_for_iommu_nesting_support.mbx



C.



^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH v3 0/4] VFIO and IOMMU prerequisite stuff for IOMMU nesting support
  2025-06-04 12:20     ` Cédric Le Goater
@ 2025-06-04 12:28       ` Jason Gunthorpe
  0 siblings, 0 replies; 9+ messages in thread
From: Jason Gunthorpe @ 2025-06-04 12:28 UTC (permalink / raw)
  To: Cédric Le Goater
  Cc: Zhenzhong Duan, qemu-devel, alex.williamson, eric.auger, mst,
	jasowang, peterx, ddutile, nicolinc, shameerali.kolothum.thodi,
	joao.m.martins, clement.mathieu--drif, kevin.tian, yi.l.liu,
	chao.p.peng

On Wed, Jun 04, 2025 at 02:20:23PM +0200, Cédric Le Goater wrote:
> NOTE: some trailers ignored due to from/email mismatches:
>     ! Trailer: Reviewed-by: Nicolin Chen <nicolinc@nvidia.com>
>      Msg From: Nicolin Chen via <qemu-devel@nongnu.org>

Oh this is some some mailman dysfunction causing this :(

mailman starts mangling messages when DKIM is turned on in some configurations.

Jason


^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2025-06-04 12:29 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-06-04  6:21 [PATCH v3 0/4] VFIO and IOMMU prerequisite stuff for IOMMU nesting support Zhenzhong Duan
2025-06-04  6:21 ` [PATCH v3 1/4] backends/iommufd: Add a helper to invalidate user-managed HWPT Zhenzhong Duan
2025-06-04  6:21 ` [PATCH v3 2/4] vfio/iommufd: Add properties and handlers to TYPE_HOST_IOMMU_DEVICE_IOMMUFD Zhenzhong Duan
2025-06-04  6:21 ` [PATCH v3 3/4] vfio/iommufd: Implement [at|de]tach_hwpt handlers Zhenzhong Duan
2025-06-04  6:21 ` [PATCH v3 4/4] vfio/iommufd: Save vendor specific device info Zhenzhong Duan
2025-06-04  6:59 ` [PATCH v3 0/4] VFIO and IOMMU prerequisite stuff for IOMMU nesting support Cédric Le Goater
2025-06-04 12:08   ` Jason Gunthorpe
2025-06-04 12:20     ` Cédric Le Goater
2025-06-04 12:28       ` Jason Gunthorpe

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).