Cheers,
Joao
P.S. Suggest v6.11-rc as hypervisor kernel as there's
some bugs fixed there with regards to IOMMU hugepage dirty tracking.
Changes since v5[6]:
* Remove patches 1-4 as these were commited to vfio-next
* Add the Rb by Cedric and Zhenzhong (previously patches 7, 8, 10, 11)
* Introduce VFIODevice::iommu_dirty_tracking and use it on patch 5, 8
to store whether we can use IOMMU dirty tracking.
Changes since v4[5]:
* Add various Reviewed-by in patches 2,3,4,6,8,11
* Change error messages to mention IOMMU (Zhenzhong)
* Better improve the checking of dirty page tracking in
vfio_migration_realize() to detect per-device IOMMU instead of using
container dirty_page_supported().
* Improve various commit messages (Eric)
* Extract the caps::hw_caps into its own patch as it was miosleading to
be hidden in another patch (new patch 7)
* Restructure patch 1 helper to be vfio_device_is_mdev() and use
vfio::mdev directly in rest of patches (Cedric)
* Improve error messages of set,query dirty tracking (Cedric)
* Add missing casts to uintptr and uint64_t* (Cedric)
* Add missing commens to struct doc from aw_bits removal (and hw_caps
addition) (Eric)
* Fix the detach flow in auto domains (Eric)
* Set hwpt to NULL on detach (Eric)
* Spurious line (Eric)
Changes since v3[5]:
* Skip HostIOMMUDevice::realize for mdev, and introduce a helper to check if
the VFIO
device is mdev. (Zhenzhong)
* Skip setting IOMMU device for mdev (Zhenzhong)
* Add Zhenzhong review tag in patch 3
* Utilize vbasedev::bcontainer::dirty_pages_supported instead of introducing
a new HostIOMMUDevice capability and thus remove the cap patch from the
series (Zhenzhong)
* Move the HostIOMMUDevice::realize() to be part of VFIODevice initialization
in attach_device()
while skipping it all together for mdev. (Cedric)
* Due to the previous item, had to remove aw_bits because it depends on device
attach being
finished, instead defer it to when get_cap() gets called.
* Skip auto domains for mdev instead of purposedly erroring out (Zhenzhong)
* Pass errp in all cases, and instead just free the error in case of -EINVAL
in most of all patches, and also pass Error* in iommufd_backend_alloc_hwpt()
amd
set/query dirty. This is made better thanks in part to skipping auto domains
for mdev (Cedric)
Changes since RFCv2[4]:
* Always allocate hwpt with IOMMU_HWPT_ALLOC_DIRTY_TRACKING even if
we end up not actually toggling dirty tracking. (Avihai)
* Fix error handling widely in auto domains logic and all patches (Avihai)
* Reuse iommufd_backend_get_device_info() for capabilities (Zhenzhong)
* New patches 1 and 2 taking into consideration previous comments.
* Store hwpt::flags to know if we have dirty tracking (Avihai)
* New patch 8, that allows to query dirty tracking support after
provisioning. This is a cleaner way to check IOMMU dirty tracking support
when vfio::migration is iniitalized, as opposed to RFCv2 via device caps.
device caps way is still used because at vfio attach we aren't yet with
a fully initialized migration state.
* Adopt error propagation in query,set dirty tracking
* Misc improvements overall broadly and Avihai
* Drop hugepages as it's a bit unrelated; I can pursue that patch
* separately. The main motivation is to provide a way to test
without hugepages similar to what vfio_type1_iommu.disable_hugepages=1
does.
Changes since RFCv1[2]:
* Remove intel/amd dirty tracking emulation enabling
* Remove the dirtyrate improvement for VF/IOMMU dirty tracking
[Will pursue these two in separate series]
* Introduce auto domains support
* Enforce dirty tracking following the IOMMUFD UAPI for this
* Add support for toggling hugepages in IOMMUFD
* Auto enable support when VF supports migration to use IOMMU
when it doesn't have VF dirty tracking
* Add a parameter to toggle VF dirty tracking
[0]
https://lore.kernel.org/qemu-devel/20240201072818.327930-1-zhenzhong.duan@intel.com/
[1]
https://lore.kernel.org/qemu-devel/20240201072818.327930-10-zhenzhong.duan@intel.com/
[2]
https://lore.kernel.org/qemu-devel/20220428211351.3897-1-joao.m.martins@oracle.com/
[3]
https://lore.kernel.org/qemu-devel/20230622214845.3980-1-joao.m.martins@oracle.com/
[4]
https://lore.kernel.org/qemu-devel/20240212135643.5858-1-joao.m.martins@oracle.com/
[5]
20240708143420.16953-1-joao.m.martins@oracle.com/">https://lore.kernel.org/qemu-devel/20240708143420.16953-1-joao.m.martins@oracle.com/
[6]
20240719120501.81279-1-joao.m.martins@oracle.com/">https://lore.kernel.org/qemu-devel/20240719120501.81279-1-joao.m.martins@oracle.com/
Joao Martins (9):
vfio/iommufd: Introduce auto domain creation
vfio/{iommufd,container}: Remove caps::aw_bits
vfio/iommufd: Add hw_caps field to HostIOMMUDeviceCaps
vfio/{iommufd,container}: Invoke HostIOMMUDevice::realize() during
attach_device()
vfio/iommufd: Probe and request hwpt dirty tracking capability
vfio/iommufd: Implement VFIOIOMMUClass::set_dirty_tracking support
vfio/iommufd: Implement VFIOIOMMUClass::query_dirty_bitmap support
vfio/migration: Don't block migration device dirty tracking is
unsupported
vfio/common: Allow disabling device dirty page tracking
include/hw/vfio/vfio-common.h | 13 +++
include/sysemu/host_iommu_device.h | 5 +-
include/sysemu/iommufd.h | 11 ++
backends/iommufd.c | 85 ++++++++++++++-
hw/vfio/common.c | 19 ++--
hw/vfio/container.c | 9 +-
hw/vfio/helpers.c | 11 ++
hw/vfio/iommufd.c | 170 ++++++++++++++++++++++++++++-
hw/vfio/migration.c | 12 +-
hw/vfio/pci.c | 3 +
backends/trace-events | 3 +
11 files changed, 318 insertions(+), 23 deletions(-)