# git rev-parse -q --verify 463f46e114f74465cf8d01b124e7b74ad1ce2afd^{commit} 463f46e114f74465cf8d01b124e7b74ad1ce2afd already have revision, skipping fetch # git checkout -q -f -B kisskb 463f46e114f74465cf8d01b124e7b74ad1ce2afd # git clean -qxdf # < git log -1 # commit 463f46e114f74465cf8d01b124e7b74ad1ce2afd # Merge: ff269e2cd5ad b2b67c997bf7 # Author: Linus Torvalds # Date: Wed Nov 1 16:44:56 2023 -1000 # # Merge tag 'for-linus-iommufd' of git://git.kernel.org/pub/scm/linux/kernel/git/jgg/iommufd # # 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 # ... # < /opt/cross/kisskb/korg/gcc-8.5.0-nolibc/x86_64-linux/bin/x86_64-linux-gcc --version # < /opt/cross/kisskb/korg/gcc-8.5.0-nolibc/x86_64-linux/bin/x86_64-linux-ld --version # < git log --format=%s --max-count=1 463f46e114f74465cf8d01b124e7b74ad1ce2afd # make -s -j 40 ARCH=x86 O=/kisskb/build/linus_x86_64_defconfig_x86_64-gcc8 CROSS_COMPILE=/opt/cross/kisskb/korg/gcc-8.5.0-nolibc/x86_64-linux/bin/x86_64-linux- x86_64_defconfig # < make -s -j 40 ARCH=x86 O=/kisskb/build/linus_x86_64_defconfig_x86_64-gcc8 CROSS_COMPILE=/opt/cross/kisskb/korg/gcc-8.5.0-nolibc/x86_64-linux/bin/x86_64-linux- help # make -s -j 40 ARCH=x86 O=/kisskb/build/linus_x86_64_defconfig_x86_64-gcc8 CROSS_COMPILE=/opt/cross/kisskb/korg/gcc-8.5.0-nolibc/x86_64-linux/bin/x86_64-linux- olddefconfig # make -s -j 40 ARCH=x86 O=/kisskb/build/linus_x86_64_defconfig_x86_64-gcc8 CROSS_COMPILE=/opt/cross/kisskb/korg/gcc-8.5.0-nolibc/x86_64-linux/bin/x86_64-linux- Completed OK # rm -rf /kisskb/build/linus_x86_64_defconfig_x86_64-gcc8 # Build took: 0:01:35.801287