>-----Original Message-----
>From: Joao Martins <joao.m.mart...@oracle.com>
>Subject: [PATCH v4 00/12] hw/iommufd: IOMMUFD Dirty Tracking
>
>This small series adds support for IOMMU dirty tracking support via the
>IOMMUFD backend. The hardware capability is available on most recent x86
>hardware. The series is divided organized as follows:
>
>* Patch 1-2: Fixes a regression into mdev support with IOMMUFD. This
>             one is independent of the series but happened to cross it
>             while testing mdev with this series

I guess VFIO ap/ccw may need fixes too.
Will you help on that or I can take it if you want to focus on dirty tracking.
The fix may be trivial, just assign VFIODevice->mdev = true.

Thanks
Zhenzhong

>
>* Patch 3: Adds a support to iommufd_get_device_info() for capabilities
>
>* Patches 4 - 10: IOMMUFD backend support for dirty tracking;
>
>Introduce auto domains -- Patch 5 goes into more detail, but the gist is that
>we will find and attach a device to a compatible IOMMU domain, or allocate
>a new
>hardware pagetable *or* rely on kernel IOAS attach (for mdevs). Afterwards
>the
>workflow is relatively simple:
>
>1) Probe device and allow dirty tracking in the HWPT
>2) Toggling dirty tracking on/off
>3) Read-and-clear of Dirty IOVAs
>
>The heuristics selected for (1) were to always request the HWPT for
>dirty tracking if supported, or rely on device dirty page tracking. This
>is a little simplistic and we aren't necessarily utilizing IOMMU dirty
>tracking even if we ask during hwpt allocation.
>
>The unmap case is deferred until further vIOMMU support with migration
>is added[3] which will then introduce the usage of
>IOMMU_HWPT_GET_DIRTY_BITMAP_NO_CLEAR in GET_DIRTY_BITMAP ioctl
>in the
>dma unmap bitmap flow.
>
>* Patches 11-12: Don't block live migration where there's no VF dirty
>tracker, considering that we have IOMMU dirty tracking.
>
>Comments and feedback appreciated. Thanks for all the review thus far!
>
>Cheers,
>    Joao
>
>P.S. Suggest linux-next (or future v6.11) as hypervisor kernel as there's
>some bugs fixed there with regards to IOMMU hugepage dirty tracking.
>
>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.d...@intel.com/
>[1] https://lore.kernel.org/qemu-devel/20240201072818.327930-10-
>zhenzhong.d...@intel.com/
>[2] https://lore.kernel.org/qemu-devel/20220428211351.3897-1-
>joao.m.mart...@oracle.com/
>[3] https://lore.kernel.org/qemu-devel/20230622214845.3980-1-
>joao.m.mart...@oracle.com/
>[4] https://lore.kernel.org/qemu-devel/20240212135643.5858-1-
>joao.m.mart...@oracle.com/
>[5] https://lore.kernel.org/qemu-devel/20240708143420.16953-1-
>joao.m.mart...@oracle.com/
>
>Joao Martins (12):
>  vfio/pci: Extract mdev check into an helper
>  vfio/iommufd: Don't initialize nor set a HOST_IOMMU_DEVICE with mdev
>  backends/iommufd: Extend iommufd_backend_get_device_info() to fetch
>HW
>    capabilities
>  vfio/iommufd: Return errno in iommufd_cdev_attach_ioas_hwpt()
>  vfio/iommufd: Introduce auto domain creation
>  vfio/{iommufd,container}: Remove caps::aw_bits
>  vfio/{iommufd,container}: Initialize HostIOMMUDeviceCaps 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 |   2 +-
> include/sysemu/iommufd.h           |  14 ++-
> backends/iommufd.c                 |  89 ++++++++++++++-
> hw/vfio/common.c                   |  17 +--
> hw/vfio/container.c                |  11 +-
> hw/vfio/helpers.c                  |  18 +++
> hw/vfio/iommufd.c                  | 178 ++++++++++++++++++++++++++++-
> hw/vfio/migration.c                |   4 +-
> hw/vfio/pci.c                      |  22 ++--
> backends/trace-events              |   3 +
> 11 files changed, 339 insertions(+), 32 deletions(-)
>
>--
>2.17.2

Reply via email to