• Joao Martins's avatar
    iommufd: Add IOMMU_HWPT_GET_DIRTY_BITMAP · b9a60d6f
    Joao Martins authored
    Connect a hw_pagetable to the IOMMU core dirty tracking
    read_and_clear_dirty iommu domain op. It exposes all of the functionality
    for the UAPI that read the dirtied IOVAs while clearing the Dirty bits from
    the PTEs.
    
    In doing so, add an IO pagetable API iopt_read_and_clear_dirty_data() that
    performs the reading of dirty IOPTEs for a given IOVA range and then
    copying back to userspace bitmap.
    
    Underneath it uses the IOMMU domain kernel API which will read the dirty
    bits, as well as atomically clearing the IOPTE dirty bit and flushing the
    IOTLB at the end. The IOVA bitmaps usage takes care of the iteration of the
    bitmaps user pages efficiently and without copies. Within the iterator
    function we iterate over io-pagetable contigous areas that have been
    mapped.
    
    Contrary to past incantation of a similar interface in VFIO the IOVA range
    to be scanned is tied in to the bitmap size, thus the application needs to
    pass a appropriately sized bitmap address taking into account the iova
    range being passed *and* page size ... as opposed to allowing bitmap-iova
    != iova.
    
    Link: https://lore.kernel.org/r/20231024135109.73787-8-joao.m.martins@oracle.comSigned-off-by: default avatarJoao Martins <joao.m.martins@oracle.com>
    Reviewed-by: default avatarJason Gunthorpe <jgg@nvidia.com>
    Reviewed-by: default avatarKevin Tian <kevin.tian@intel.com>
    Signed-off-by: default avatarJason Gunthorpe <jgg@nvidia.com>
    b9a60d6f
iommufd_private.h 12 KB