• Linus Torvalds's avatar
    Merge tag 'for-linus-iommufd' of git://git.kernel.org/pub/scm/linux/kernel/git/jgg/iommufd · 463f46e1
    Linus Torvalds authored
    Pull iommufd updates from Jason Gunthorpe:
     "This brings three new iommufd capabilities:
    
       - Dirty tracking for DMA.
    
         AMD/ARM/Intel CPUs can now record if a DMA writes to a page in the
         IOPTEs within the IO page table. This can be used to generate a
         record of what memory is being dirtied by DMA activities during a
         VM migration process. A VMM like qemu will combine the IOMMU dirty
         bits with the CPU's dirty log to determine what memory to transfer.
    
         VFIO already has a DMA dirty tracking framework that requires PCI
         devices to implement tracking HW internally. The iommufd version
         provides an alternative that the VMM can select, if available. The
         two are designed to have very similar APIs.
    
       - Userspace controlled attributes for hardware page tables
         (HWPT/iommu_domain). There are currently a few generic attributes
         for HWPTs (support dirty tracking, and parent of a nest). This is
         an entry point for the userspace iommu driver to control the HW in
         detail.
    
       - Nested translation support for HWPTs. This is a 2D translation
         scheme similar to the CPU where a DMA goes through a first stage to
         determine an intermediate address which is then translated trough a
         second stage to a physical address.
    
         Like for CPU translation the first stage table would exist in VM
         controlled memory and the second stage is in the kernel and matches
         the VM's guest to physical map.
    
         As every IOMMU has a unique set of parameter to describe the S1 IO
         page table and its associated parameters the userspace IOMMU driver
         has to marshal the information into the correct format.
    
         This is 1/3 of the feature, it allows creating the nested
         translation and binding it to VFIO devices, however the API to
         support IOTLB and ATC invalidation of the stage 1 io page table,
         and forwarding of IO faults are still in progress.
    
      The series includes AMD and Intel support for dirty tracking. Intel
      support for nested translation.
    
      Along the way are a number of internal items:
    
       - New iommu core items: ops->domain_alloc_user(),
         ops->set_dirty_tracking, ops->read_and_clear_dirty(),
         IOMMU_DOMAIN_NESTED, and iommu_copy_struct_from_user
    
       - UAF fix in iopt_area_split()
    
       - Spelling fixes and some test suite improvement"
    
    * tag 'for-linus-iommufd' of git://git.kernel.org/pub/scm/linux/kernel/git/jgg/iommufd: (52 commits)
      iommufd: Organize the mock domain alloc functions closer to Joerg's tree
      iommufd/selftest: Fix page-size check in iommufd_test_dirty()
      iommufd: Add iopt_area_alloc()
      iommufd: Fix missing update of domains_itree after splitting iopt_area
      iommu/vt-d: Disallow read-only mappings to nest parent domain
      iommu/vt-d: Add nested domain allocation
      iommu/vt-d: Set the nested domain to a device
      iommu/vt-d: Make domain attach helpers to be extern
      iommu/vt-d: Add helper to setup pasid nested translation
      iommu/vt-d: Add helper for nested domain allocation
      iommu/vt-d: Extend dmar_domain to support nested domain
      iommufd: Add data structure for Intel VT-d stage-1 domain allocation
      iommu/vt-d: Enhance capability check for nested parent domain allocation
      iommufd/selftest: Add coverage for IOMMU_HWPT_ALLOC with nested HWPTs
      iommufd/selftest: Add nested domain allocation for mock domain
      iommu: Add iommu_copy_struct_from_user helper
      iommufd: Add a nested HW pagetable object
      iommu: Pass in parent domain with user_data to domain_alloc_user op
      iommufd: Share iommufd_hwpt_alloc with IOMMUFD_OBJ_HWPT_NESTED
      iommufd: Derive iommufd_hwpt_paging from iommufd_hw_pagetable
      ...
    463f46e1
iommu.h 31.6 KB