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>
Subject: [PATCH rfcv2 00/18] Check and sync host IOMMU cap/ecap with vIOMMU
Date: Thu, 1 Feb 2024 15:28:00 +0800 [thread overview]
Message-ID: <20240201072818.327930-1-zhenzhong.duan@intel.com> (raw)
Hi,
This enables vIOMMU to get host IOMMU cap/ecap information by introducing
a new set/unset_iommu_device interface, then vIOMMU could check or sync
with vIOMMU's own cap/ecap config.
It works by having device side, i.e. VFIO, register either an IOMMULegacyDevice
or IOMMUFDDevice to vIOMMU, which includes necessary data to archive that.
Currently only VFIO device is supported, but it could also be used for other
devices, i.e., VDPA.
For coldplugged device, we can get its host IOMMU cap/ecap during qemu init,
then check and sync into vIOMMU cap/ecap.
For hotplugged device, vIOMMU cap/ecap is frozen, we could only check with
vIOMMU cap/ecap, not allowed to update. IF check fails, hotplugged will fail.
This is also a prerequisite for incoming iommufd nesting series:
'intel_iommu: Enable stage-1 translation'.
I didn't implement cap/ecap sync for legacy VFIO backend, would like to see
what Eric want to put in IOMMULegacyDevice for virtio-iommu and if I can
utilize some of them.
PATCH1-3: Introduce HostIOMMUDevice and two sub class
PATCH4-5: Define HostIOMMUDevice instance in VFIODevice
PATCH6-9: Introdcue host_iommu_device_init callback to intialize HostIOMMUDevice
PATCH10-12: Introdcue set/unset_iommu_device to pass HostIOMMUDevice to vIOMMU
PATCH13-18: Implement cap/ecap check and sync in intel_iommu
Qemu code can be found at:
https://github.com/yiliu1765/qemu/tree/zhenzhong/iommufd_nesting_preq_rfcv2
Thanks
Zhenzhong
Changelog:
rfcv2:
- introduce common abstract HostIOMMUDevice and sub struct for different BEs (Eric, Cédric)
- remove iommufd_device.[ch] (Cédric)
- remove duplicate iommufd/devid define from VFIODevice (Eric)
- drop the p in aliased_pbus and aliased_pdevfn (Eric)
- assert devfn and iommu_bus in pci_device_get_iommu_bus_devfn (Cédric, Eric)
- use errp in iommufd_device_get_info (Eric)
- split and simplify cap/ecap check/sync code in intel_iommu.c (Cédric)
- move VTDHostIOMMUDevice declaration to intel_iommu_internal.h (Cédric)
- make '(vtd->cap_reg >> 16) & 0x3fULL' a MACRO and add missed '+1' (Cédric)
- block migration if vIOMMU cap/ecap updated based on host IOMMU cap/ecap
- add R-B
Yi Liu (3):
hw/pci: Introduce pci_device_set/unset_iommu_device()
intel_iommu: Add set/unset_iommu_device callback
intel_iommu: Add a framework to check and sync host IOMMU cap/ecap
Zhenzhong Duan (15):
Introduce a common abstract struct HostIOMMUDevice
backends/iommufd: Introduce IOMMUFDDevice
vfio: Introduce IOMMULegacyDevice
vfio: Add host iommu device instance into VFIODevice
vfio: Remove redundant iommufd and devid elements in VFIODevice
vfio: Introduce host_iommu_device_init callback
vfio/container: Implement host_iommu_device_init callback in legacy
mode
vfio/iommufd: Implement host_iommu_device_init callback in iommufd
mode
vfio/pci: Initialize host iommu device instance after attachment
vfio: Initialize host IOMMU device and pass to vIOMMU
intel_iommu: Extract out vtd_cap_init to initialize cap/ecap
backends/iommufd: Introduce helper function iommufd_device_get_info()
intel_iommu: Implement check and sync mechanism in iommufd mode
intel_iommu: Use mgaw instead of s->aw_bits
intel_iommu: Block migration if cap is updated
hw/i386/intel_iommu_internal.h | 15 ++
include/hw/i386/intel_iommu.h | 4 +
include/hw/pci/pci.h | 38 +++-
include/hw/vfio/vfio-common.h | 20 +-
include/hw/vfio/vfio-container-base.h | 1 +
include/sysemu/host_iommu_device.h | 22 ++
include/sysemu/iommufd.h | 18 ++
backends/iommufd.c | 31 ++-
hw/i386/acpi-build.c | 3 +-
hw/i386/intel_iommu.c | 279 ++++++++++++++++++++------
hw/pci/pci.c | 62 +++++-
hw/vfio/ap.c | 2 +-
hw/vfio/ccw.c | 2 +-
hw/vfio/common.c | 10 +-
hw/vfio/container.c | 7 +
hw/vfio/helpers.c | 2 +-
hw/vfio/iommufd.c | 32 +--
hw/vfio/pci.c | 25 ++-
hw/vfio/platform.c | 3 +-
19 files changed, 488 insertions(+), 88 deletions(-)
create mode 100644 include/sysemu/host_iommu_device.h
--
2.34.1
next reply other threads:[~2024-02-01 7:31 UTC|newest]
Thread overview: 35+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-02-01 7:28 Zhenzhong Duan [this message]
2024-02-01 7:28 ` [PATCH rfcv2 01/18] Introduce a common abstract struct HostIOMMUDevice Zhenzhong Duan
2024-02-01 7:28 ` [PATCH rfcv2 02/18] backends/iommufd: Introduce IOMMUFDDevice Zhenzhong Duan
2024-02-01 7:28 ` [PATCH rfcv2 03/18] vfio: Introduce IOMMULegacyDevice Zhenzhong Duan
2024-02-01 7:28 ` [PATCH rfcv2 04/18] vfio: Add host iommu device instance into VFIODevice Zhenzhong Duan
2024-02-19 15:34 ` Eric Auger
2024-02-19 15:45 ` Eric Auger
2024-02-26 6:16 ` Duan, Zhenzhong
2024-02-01 7:28 ` [PATCH rfcv2 05/18] vfio: Remove redundant iommufd and devid elements in VFIODevice Zhenzhong Duan
2024-02-01 7:28 ` [PATCH rfcv2 06/18] vfio: Introduce host_iommu_device_init callback Zhenzhong Duan
2024-02-01 7:28 ` [PATCH rfcv2 07/18] vfio/container: Implement host_iommu_device_init callback in legacy mode Zhenzhong Duan
2024-02-19 17:13 ` Eric Auger
2024-02-26 6:56 ` Duan, Zhenzhong
2024-02-01 7:28 ` [PATCH rfcv2 08/18] vfio/iommufd: Implement host_iommu_device_init callback in iommufd mode Zhenzhong Duan
2024-02-01 7:28 ` [PATCH rfcv2 09/18] vfio/pci: Initialize host iommu device instance after attachment Zhenzhong Duan
2024-02-01 7:28 ` [PATCH rfcv2 10/18] hw/pci: Introduce pci_device_set/unset_iommu_device() Zhenzhong Duan
2024-02-19 17:41 ` Eric Auger
2024-02-26 6:26 ` Duan, Zhenzhong
2024-02-01 7:28 ` [PATCH rfcv2 11/18] intel_iommu: Add set/unset_iommu_device callback Zhenzhong Duan
2024-02-19 17:46 ` Eric Auger
2024-02-26 6:52 ` Duan, Zhenzhong
2024-02-01 7:28 ` [PATCH rfcv2 12/18] vfio: Initialize host IOMMU device and pass to vIOMMU Zhenzhong Duan
2024-02-01 7:28 ` [PATCH rfcv2 13/18] intel_iommu: Extract out vtd_cap_init to initialize cap/ecap Zhenzhong Duan
2024-02-01 7:28 ` [PATCH rfcv2 14/18] intel_iommu: Add a framework to check and sync host IOMMU cap/ecap Zhenzhong Duan
2024-02-19 17:51 ` Eric Auger
2024-02-26 7:36 ` Duan, Zhenzhong
2024-02-27 17:06 ` Eric Auger
2024-02-01 7:28 ` [PATCH rfcv2 15/18] backends/iommufd: Introduce helper function iommufd_device_get_info() Zhenzhong Duan
2024-02-01 7:28 ` [PATCH rfcv2 16/18] intel_iommu: Implement check and sync mechanism in iommufd mode Zhenzhong Duan
2024-02-01 7:28 ` [PATCH rfcv2 17/18] intel_iommu: Use mgaw instead of s->aw_bits Zhenzhong Duan
2024-02-01 7:28 ` [PATCH rfcv2 18/18] intel_iommu: Block migration if cap is updated Zhenzhong Duan
2024-02-13 10:55 ` Joao Martins
2024-02-27 2:41 ` Duan, Zhenzhong
2024-02-27 11:08 ` Joao Martins
2024-02-28 2:14 ` 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=20240201072818.327930-1-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 \
/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).