From: Eric Auger <eric.auger@redhat.com>
To: Zhenzhong Duan <zhenzhong.duan@intel.com>, qemu-devel@nongnu.org
Cc: alex.williamson@redhat.com, clg@redhat.com, nicolinc@nvidia.com,
joao.m.martins@oracle.com, chao.p.peng@intel.com,
Yi Liu <yi.l.liu@intel.com>
Subject: Re: [PATCH 1/5] vfio/iommufd: Save host iommu capabilities in VFIODevice.caps
Date: Mon, 5 May 2025 18:22:53 +0200 [thread overview]
Message-ID: <2a2f61dc-1d2f-4cb2-94f2-b8f14d218aa0@redhat.com> (raw)
In-Reply-To: <20250411101707.3460429-2-zhenzhong.duan@intel.com>
On 4/11/25 12:17 PM, Zhenzhong Duan wrote:
> The saved caps copy can be used to check dirty tracking capability.
>
> The capabilities is gotten through IOMMUFD interface, so define a
> new structure HostIOMMUDeviceIOMMUFDCaps which contains vendor
> caps raw data in "include/system/iommufd.h".
>
> This is a prepare work for moving .realize() after .attach_device().
>
> Suggested-by: Cédric Le Goater <clg@redhat.com>
> Suggested-by: Eric Auger <eric.auger@redhat.com>
> Suggested-by: Nicolin Chen <nicolinc@nvidia.com>
> Signed-off-by: Zhenzhong Duan <zhenzhong.duan@intel.com>
> ---
> include/hw/vfio/vfio-device.h | 1 +
> include/system/iommufd.h | 22 ++++++++++++++++++++++
> hw/vfio/iommufd.c | 10 +++++++++-
> 3 files changed, 32 insertions(+), 1 deletion(-)
>
> diff --git a/include/hw/vfio/vfio-device.h b/include/hw/vfio/vfio-device.h
> index 66797b4c92..09a7af891a 100644
> --- a/include/hw/vfio/vfio-device.h
> +++ b/include/hw/vfio/vfio-device.h
> @@ -77,6 +77,7 @@ typedef struct VFIODevice {
> bool dirty_tracking; /* Protected by BQL */
> bool iommu_dirty_tracking;
> HostIOMMUDevice *hiod;
> + HostIOMMUDeviceIOMMUFDCaps caps;
> int devid;
> IOMMUFDBackend *iommufd;
> VFIOIOASHwpt *hwpt;
> diff --git a/include/system/iommufd.h b/include/system/iommufd.h
> index cbab75bfbf..0f337585c9 100644
> --- a/include/system/iommufd.h
> +++ b/include/system/iommufd.h
> @@ -18,6 +18,9 @@
> #include "exec/hwaddr.h"
> #include "exec/cpu-common.h"
> #include "system/host_iommu_device.h"
> +#ifdef CONFIG_LINUX
> +#include <linux/iommufd.h>
> +#endif
>
> #define TYPE_IOMMUFD_BACKEND "iommufd"
> OBJECT_DECLARE_TYPE(IOMMUFDBackend, IOMMUFDBackendClass, IOMMUFD_BACKEND)
> @@ -63,4 +66,23 @@ bool iommufd_backend_get_dirty_bitmap(IOMMUFDBackend *be, uint32_t hwpt_id,
> Error **errp);
>
> #define TYPE_HOST_IOMMU_DEVICE_IOMMUFD TYPE_HOST_IOMMU_DEVICE "-iommufd"
> +
> +typedef union VendorCaps {
> + struct iommu_hw_info_vtd vtd;
> + struct iommu_hw_info_arm_smmuv3 smmuv3;
> +} VendorCaps;
> +
> +/**
> + * struct HostIOMMUDeviceIOMMUFDCaps - Define host IOMMU device capabilities.
> + *
> + * @type: host platform IOMMU type.
> + *
> + * @hw_caps: host platform IOMMU capabilities (e.g. on IOMMUFD this represents
> + * the @out_capabilities value returned from IOMMU_GET_HW_INFO ioctl)
> + */
> +typedef struct HostIOMMUDeviceIOMMUFDCaps {
> + uint32_t type;
> + uint64_t hw_caps;
> + VendorCaps vendor_caps;
> +} HostIOMMUDeviceIOMMUFDCaps;
Why can't we extend the existing HostIOMMUDeviceCaps in host_iommu_device.h?
Eric
> #endif
> diff --git a/hw/vfio/iommufd.c b/hw/vfio/iommufd.c
> index 48db105422..530cde6740 100644
> --- a/hw/vfio/iommufd.c
> +++ b/hw/vfio/iommufd.c
> @@ -324,7 +324,7 @@ static bool iommufd_cdev_autodomains_get(VFIODevice *vbasedev,
> * vfio_migration_realize() may decide to use VF dirty tracking
> * instead.
> */
> - if (vbasedev->hiod->caps.hw_caps & IOMMU_HW_CAP_DIRTY_TRACKING) {
> + if (vbasedev->caps.hw_caps & IOMMU_HW_CAP_DIRTY_TRACKING) {
> flags = IOMMU_HWPT_ALLOC_DIRTY_TRACKING;
> }
>
> @@ -475,6 +475,7 @@ static bool iommufd_cdev_attach(const char *name, VFIODevice *vbasedev,
> int ret, devfd;
> uint32_t ioas_id;
> Error *err = NULL;
> + HostIOMMUDeviceIOMMUFDCaps *caps = &vbasedev->caps;
> const VFIOIOMMUClass *iommufd_vioc =
> VFIO_IOMMU_CLASS(object_class_by_name(TYPE_VFIO_IOMMU_IOMMUFD));
>
> @@ -505,6 +506,13 @@ static bool iommufd_cdev_attach(const char *name, VFIODevice *vbasedev,
> goto err_alloc_ioas;
> }
>
> + if (!iommufd_backend_get_device_info(vbasedev->iommufd, vbasedev->devid,
> + &caps->type, &caps->vendor_caps,
> + sizeof(VendorCaps), &caps->hw_caps,
> + errp)) {
> + goto err_alloc_ioas;
> + }
> +
> /* try to attach to an existing container in this space */
> QLIST_FOREACH(bcontainer, &space->containers, next) {
> container = container_of(bcontainer, VFIOIOMMUFDContainer, bcontainer);
next prev parent reply other threads:[~2025-05-05 16:23 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-04-11 10:17 [PATCH 0/5] cleanup interfaces Zhenzhong Duan
2025-04-11 10:17 ` [PATCH 1/5] vfio/iommufd: Save host iommu capabilities in VFIODevice.caps Zhenzhong Duan
2025-04-11 10:49 ` Joao Martins
2025-04-14 9:11 ` Duan, Zhenzhong
2025-04-11 11:28 ` Cédric Le Goater
2025-04-14 9:30 ` Duan, Zhenzhong
[not found] ` <Z/7z2RZyqhy43S/O@Asurada-Nvidia>
2025-04-16 5:49 ` Duan, Zhenzhong
[not found] ` <Z//4pYO/Xs/7U+dW@Asurada-Nvidia>
2025-04-17 4:08 ` Duan, Zhenzhong
2025-05-05 16:14 ` Eric Auger
2025-05-06 9:25 ` Duan, Zhenzhong
2025-05-05 16:22 ` Eric Auger [this message]
2025-05-05 16:38 ` Eric Auger
2025-05-06 6:22 ` Nicolin Chen
2025-04-11 10:17 ` [PATCH 2/5] vfio: Move realize() after attach_device() Zhenzhong Duan
2025-04-11 10:54 ` Philippe Mathieu-Daudé
2025-04-14 9:12 ` Duan, Zhenzhong
2025-04-11 11:33 ` Cédric Le Goater
2025-04-14 9:37 ` Duan, Zhenzhong
2025-04-18 20:56 ` Donald Dutile
2025-04-11 10:17 ` [PATCH 3/5] vfio/iommufd: Implement .get_cap() in TYPE_HOST_IOMMU_DEVICE_IOMMUFD_VFIO sub-class Zhenzhong Duan
[not found] ` <Z/702atFa6kyCI/D@Asurada-Nvidia>
2025-04-16 5:54 ` Duan, Zhenzhong
2025-04-11 10:17 ` [PATCH 4/5] backends/iommufd: Drop hiod_iommufd_get_cap() Zhenzhong Duan
2025-04-11 10:17 ` [PATCH 5/5] vfio/iommufd: Drop HostIOMMUDeviceCaps from HostIOMMUDevice Zhenzhong Duan
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=2a2f61dc-1d2f-4cb2-94f2-b8f14d218aa0@redhat.com \
--to=eric.auger@redhat.com \
--cc=alex.williamson@redhat.com \
--cc=chao.p.peng@intel.com \
--cc=clg@redhat.com \
--cc=joao.m.martins@oracle.com \
--cc=nicolinc@nvidia.com \
--cc=qemu-devel@nongnu.org \
--cc=yi.l.liu@intel.com \
--cc=zhenzhong.duan@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).