On Wed, Oct 18, 2023 at 09:27:01PM +0100, Joao Martins wrote: > Add to iommu domain operations a set of callbacks to perform dirty > tracking, particulary to start and stop tracking and to read and clear the > dirty data. > > Drivers are generally expected to dynamically change its translation > structures to toggle the tracking and flush some form of control state > structure that stands in the IOVA translation path. Though it's not > mandatory, as drivers can also enable dirty tracking at boot, and just > clear the dirty bits before setting dirty tracking. For each of the newly > added IOMMU core APIs: > > iommu_cap::IOMMU_CAP_DIRTY: new device iommu_capable value when probing for > capabilities of the device. > > .set_dirty_tracking(): an iommu driver is expected to change its > translation structures and enable dirty tracking for the devices in the > iommu_domain. For drivers making dirty tracking always-enabled, it should > just return 0. > > .read_and_clear_dirty(): an iommu driver is expected to walk the pagetables > for the iova range passed in and use iommu_dirty_bitmap_record() to record > dirty info per IOVA. When detecting that a given IOVA is dirty it should > also clear its dirty state from the PTE, *unless* the flag > IOMMU_DIRTY_NO_CLEAR is passed in -- flushing is steered from the caller of > the domain_op via iotlb_gather. The iommu core APIs use the same data > structure in use for dirty tracking for VFIO device dirty (struct > iova_bitmap) abstracted by iommu_dirty_bitmap_record() helper function. > > domain::dirty_ops: IOMMU domains will store the dirty ops depending on > whether the iommu device supports dirty tracking or not. iommu drivers can > then use this field to figure if the dirty tracking is supported+enforced > on attach. The enforcement is enable via domain_alloc_user() which is done > via IOMMUFD hwpt flag introduced later. > > Signed-off-by: Joao Martins <joao.m.martins@xxxxxxxxxx> > --- > include/linux/io-pgtable.h | 4 +++ > include/linux/iommu.h | 56 ++++++++++++++++++++++++++++++++++++++ > 2 files changed, 60 insertions(+) Reviewed-by: Jason Gunthorpe <jgg@xxxxxxxxxx> Jason