From: Zhenzhong Duan <zhenzhong.duan@intel.com>
To: qemu-devel@nongnu.org
Cc: alex.williamson@redhat.com, clg@redhat.com,
eric.auger@redhat.com, mst@redhat.com, peterx@redhat.com,
jasowang@redhat.com, jgg@nvidia.com, nicolinc@nvidia.com,
joao.m.martins@oracle.com, kevin.tian@intel.com,
yi.l.liu@intel.com, chao.p.peng@intel.com,
Zhenzhong Duan <zhenzhong.duan@intel.com>
Subject: [PATCH v3 00/19] Add a host IOMMU device abstraction to check with vIOMMU
Date: Mon, 29 Apr 2024 14:50:27 +0800 [thread overview]
Message-ID: <20240429065046.3688701-1-zhenzhong.duan@intel.com> (raw)
Hi,
The most important change in this version is instroducing a common
HostIOMMUDeviceCaps structure in HostIOMMUDevice and a new interface
between vIOMMU and HostIOMMUDevice.
HostIOMMUDeviceClass::realize() is introduced to initialize
HostIOMMUDeviceCaps and other fields of HostIOMMUDevice variants.
HostIOMMUDeviceClass::check_cap() is introduced to query host IOMMU
device capabilities.
After the change, part2 is only 3 patches, so merge it with part1 to be
a single prerequisite series, same for changelog. If anyone doesn't like
that, I can split again.
The class tree is as below:
HostIOMMUDevice
| .caps
| .realize()
| .check_cap()
|
.-----------------------------------------------.
| | |
HostIOMMUDeviceLegacyVFIO {HostIOMMUDeviceLegacyVDPA} HostIOMMUDeviceIOMMUFD
| .vdev | {.vdev} | .iommufd
| .devid
| [.ioas_id]
| [.attach_hwpt()]
| [.detach_hwpt()]
|
.----------------------.
| |
HostIOMMUDeviceIOMMUFDVFIO {HostIOMMUDeviceIOMMUFDVDPA}
| .vdev | {.vdev}
* The attributes in [] will be implemented in nesting series.
* The classes in {} will be implemented in future.
* .vdev in different class points to different agent device,
* i.e., for VFIO it points to VFIODevice.
PATCH1-4: Introduce HostIOMMUDevice and its sub classes
PATCH5-11: Introduce HostIOMMUDeviceCaps, implement .realize() and .check_cap() handler
PATCH12-16: Create HostIOMMUDevice instance and pass to vIOMMU
PATCH17-19: Implement compatibility check between host IOMMU and vIOMMU(intel_iommu)
Qemu code can be found at:
https://github.com/yiliu1765/qemu/tree/zhenzhong/iommufd_nesting_preq_v3
Besides the compatibility check in this series, in nesting series, this
host IOMMU device is extended for much wider usage. For anyone interested
on the nesting series, here is the link:
https://github.com/yiliu1765/qemu/tree/zhenzhong/iommufd_nesting_rfcv2
Thanks
Zhenzhong
Changelog:
v3:
- refine declaration and doc for HostIOMMUDevice (Cédric, Philippe)
- introduce HostIOMMUDeviceCaps, .realize() and .check_cap() (Cédric)
- introduce helper range_get_last_bit() for range operation (Cédric)
- separate pci_device_get_iommu_bus_devfn() in a prereq patch (Cédric)
- replace HIOD_ abbreviation with HOST_IOMMU_DEVICE_ (Cédric)
- add header in include/sysemu/iommufd.h (Cédric)
v2:
- use QOM to abstract host IOMMU device and its sub-classes (Cédric)
- move host IOMMU device creation in attach_device() (Cédric)
- refine pci_device_set/unset_iommu_device doc further (Eric)
- define host IOMMU info format of different backend
- implement get_host_iommu_info() for different backend (Cédric)
- drop cap/ecap update logic (MST)
- check aw-bits from get_host_iommu_info() in legacy mode
v1:
- use HostIOMMUDevice handle instead of union in VFIODevice (Eric)
- change host_iommu_device_init to host_iommu_device_create
- allocate HostIOMMUDevice in host_iommu_device_create callback
and set the VFIODevice base_hdev handle (Eric)
- refine pci_device_set/unset_iommu_device doc (Eric)
- use HostIOMMUDevice handle instead of union in VTDHostIOMMUDevice (Eric)
- convert HostIOMMUDevice to sub object pointer in vtd_check_hdev
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 (2):
hw/pci: Introduce pci_device_[set|unset]_iommu_device()
intel_iommu: Implement [set|unset]_iommu_device() callbacks
Zhenzhong Duan (17):
backends: Introduce HostIOMMUDevice abstract
vfio/container: Introduce HostIOMMUDeviceLegacyVFIO device
backends/iommufd: Introduce abstract HostIOMMUDeviceIOMMUFD device
vfio/iommufd: Introduce HostIOMMUDeviceIOMMUFDVFIO device
backends/host_iommu_device: Introduce HostIOMMUDeviceCaps
range: Introduce range_get_last_bit()
vfio/container: Implement HostIOMMUDeviceClass::realize() handler
backends/iommufd: Introduce helper function
iommufd_backend_get_device_info()
vfio/iommufd: Implement HostIOMMUDeviceClass::realize() handler
vfio/container: Implement HostIOMMUDeviceClass::check_cap() handler
backends/iommufd: Implement HostIOMMUDeviceClass::check_cap() handler
vfio: Introduce VFIOIOMMUClass::hiod_typename attribute
vfio: Create host IOMMU device instance
hw/pci: Introduce helper function pci_device_get_iommu_bus_devfn()
vfio/pci: Pass HostIOMMUDevice to vIOMMU
intel_iommu: Extract out vtd_cap_init() to initialize cap/ecap
intel_iommu: Check compatibility with host IOMMU capabilities
MAINTAINERS | 2 +
hw/i386/intel_iommu_internal.h | 8 ++
include/hw/i386/intel_iommu.h | 3 +
include/hw/pci/pci.h | 38 ++++-
include/hw/vfio/vfio-common.h | 26 ++++
include/hw/vfio/vfio-container-base.h | 3 +
include/qemu/range.h | 11 ++
include/sysemu/host_iommu_device.h | 95 +++++++++++++
include/sysemu/iommufd.h | 34 +++++
backends/host_iommu_device.c | 59 ++++++++
backends/iommufd.c | 75 +++++++---
hw/i386/intel_iommu.c | 197 ++++++++++++++++++++------
hw/pci/pci.c | 75 +++++++++-
hw/vfio/common.c | 18 ++-
hw/vfio/container.c | 49 ++++++-
hw/vfio/iommufd.c | 52 ++++++-
hw/vfio/pci.c | 20 ++-
backends/Kconfig | 5 +
backends/meson.build | 1 +
19 files changed, 701 insertions(+), 70 deletions(-)
create mode 100644 include/sysemu/host_iommu_device.h
create mode 100644 backends/host_iommu_device.c
--
2.34.1
next reply other threads:[~2024-04-29 6:54 UTC|newest]
Thread overview: 59+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-04-29 6:50 Zhenzhong Duan [this message]
2024-04-29 6:50 ` [PATCH v3 01/19] backends: Introduce HostIOMMUDevice abstract Zhenzhong Duan
2024-04-29 6:50 ` [PATCH v3 02/19] vfio/container: Introduce HostIOMMUDeviceLegacyVFIO device Zhenzhong Duan
2024-04-30 7:51 ` Cédric Le Goater
2024-04-30 9:13 ` Duan, Zhenzhong
2024-04-30 12:00 ` Cédric Le Goater
2024-04-29 6:50 ` [PATCH v3 03/19] backends/iommufd: Introduce abstract HostIOMMUDeviceIOMMUFD device Zhenzhong Duan
2024-04-29 6:50 ` [PATCH v3 04/19] vfio/iommufd: Introduce HostIOMMUDeviceIOMMUFDVFIO device Zhenzhong Duan
2024-04-30 7:52 ` Cédric Le Goater
2024-04-30 9:25 ` Duan, Zhenzhong
2024-04-29 6:50 ` [PATCH v3 05/19] backends/host_iommu_device: Introduce HostIOMMUDeviceCaps Zhenzhong Duan
2024-04-30 9:41 ` Cédric Le Goater
2024-04-30 9:55 ` Duan, Zhenzhong
2024-04-30 12:01 ` Cédric Le Goater
2024-05-07 6:11 ` Cédric Le Goater
2024-05-07 6:24 ` Duan, Zhenzhong
2024-04-29 6:50 ` [PATCH v3 06/19] range: Introduce range_get_last_bit() Zhenzhong Duan
2024-04-30 9:41 ` Cédric Le Goater
2024-04-30 9:58 ` Duan, Zhenzhong
2024-05-02 10:30 ` Cédric Le Goater
2024-05-06 6:45 ` Duan, Zhenzhong
2024-04-29 6:50 ` [PATCH v3 07/19] vfio/container: Implement HostIOMMUDeviceClass::realize() handler Zhenzhong Duan
2024-04-30 9:41 ` Cédric Le Goater
2024-04-30 9:59 ` Duan, Zhenzhong
2024-04-29 6:50 ` [PATCH v3 08/19] backends/iommufd: Introduce helper function iommufd_backend_get_device_info() Zhenzhong Duan
2024-04-30 9:41 ` Cédric Le Goater
2024-04-30 10:06 ` Duan, Zhenzhong
2024-04-29 6:50 ` [PATCH v3 09/19] vfio/iommufd: Implement HostIOMMUDeviceClass::realize() handler Zhenzhong Duan
2024-04-29 6:50 ` [PATCH v3 10/19] vfio/container: Implement HostIOMMUDeviceClass::check_cap() handler Zhenzhong Duan
2024-04-29 6:50 ` [PATCH v3 11/19] backends/iommufd: " Zhenzhong Duan
2024-04-30 9:41 ` Cédric Le Goater
2024-04-30 10:06 ` Duan, Zhenzhong
2024-04-30 12:12 ` Cédric Le Goater
2024-05-01 12:34 ` Duan, Zhenzhong
2024-05-02 8:17 ` Cédric Le Goater
2024-05-06 1:47 ` Duan, Zhenzhong
2024-04-29 6:50 ` [PATCH v3 12/19] vfio: Introduce VFIOIOMMUClass::hiod_typename attribute Zhenzhong Duan
2024-04-29 6:50 ` [PATCH v3 13/19] vfio: Create host IOMMU device instance Zhenzhong Duan
2024-04-30 9:41 ` Cédric Le Goater
2024-04-30 10:16 ` Duan, Zhenzhong
2024-04-30 12:15 ` Cédric Le Goater
2024-04-29 6:50 ` [PATCH v3 14/19] hw/pci: Introduce helper function pci_device_get_iommu_bus_devfn() Zhenzhong Duan
2024-04-29 6:50 ` [PATCH v3 15/19] hw/pci: Introduce pci_device_[set|unset]_iommu_device() Zhenzhong Duan
2024-05-07 7:04 ` Cédric Le Goater
2024-05-07 7:48 ` Duan, Zhenzhong
2024-05-07 12:26 ` Cédric Le Goater
2024-05-08 6:24 ` Duan, Zhenzhong
2024-04-29 6:50 ` [PATCH v3 16/19] vfio/pci: Pass HostIOMMUDevice to vIOMMU Zhenzhong Duan
2024-04-29 6:50 ` [PATCH v3 17/19] intel_iommu: Extract out vtd_cap_init() to initialize cap/ecap Zhenzhong Duan
2024-04-29 6:50 ` [PATCH v3 18/19] intel_iommu: Implement [set|unset]_iommu_device() callbacks Zhenzhong Duan
2024-04-29 6:50 ` [PATCH v3 19/19] intel_iommu: Check compatibility with host IOMMU capabilities Zhenzhong Duan
2024-05-03 14:04 ` [PATCH v3 00/19] Add a host IOMMU device abstraction to check with vIOMMU Cédric Le Goater
2024-05-03 14:10 ` Jason Gunthorpe
2024-05-03 14:29 ` Cédric Le Goater
2024-05-06 2:30 ` Duan, Zhenzhong
2024-05-06 12:05 ` Jason Gunthorpe
2024-05-07 2:24 ` Duan, Zhenzhong
2024-05-07 11:58 ` Jason Gunthorpe
2024-05-08 6:36 ` 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=20240429065046.3688701-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 \
/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).