• Linus Torvalds's avatar
    Merge tag 'iommu-updates-v4.2' of git://git.kernel.org/pub/scm/linux/kernel/git/joro/iommu · 6eae81a5
    Linus Torvalds authored
    Pull IOMMU updates from Joerg Roedel:
     "This time with bigger changes than usual:
    
       - A new IOMMU driver for the ARM SMMUv3.
    
         This IOMMU is pretty different from SMMUv1 and v2 in that it is
         configured through in-memory structures and not through the MMIO
         register region.  The ARM SMMUv3 also supports IO demand paging for
         PCI devices with PRI/PASID capabilities, but this is not
         implemented in the driver yet.
    
       - Lots of cleanups and device-tree support for the Exynos IOMMU
         driver.  This is part of the effort to bring Exynos DRM support
         upstream.
    
       - Introduction of default domains into the IOMMU core code.
    
         The rationale behind this is to move functionalily out of the IOMMU
         drivers to common code to get to a unified behavior between
         different drivers.  The patches here introduce a default domain for
         iommu-groups (isolation groups).
    
         A device will now always be attached to a domain, either the
         default domain or another domain handled by the device driver.  The
         IOMMU drivers have to be modified to make use of that feature.  So
         long the AMD IOMMU driver is converted, with others to follow.
    
       - Patches for the Intel VT-d drvier to fix DMAR faults that happen
         when a kdump kernel boots.
    
         When the kdump kernel boots it re-initializes the IOMMU hardware,
         which destroys all mappings from the crashed kernel.  As this
         happens before the endpoint devices are re-initialized, any
         in-flight DMA causes a DMAR fault.  These faults cause PCI master
         aborts, which some devices can't handle properly and go into an
         undefined state, so that the device driver in the kdump kernel
         fails to initialize them and the dump fails.
    
         This is now fixed by copying over the mapping structures (only
         context tables and interrupt remapping tables) from the old kernel
         and keep the old mappings in place until the device driver of the
         new kernel takes over.  This emulates the the behavior without an
         IOMMU to the best degree possible.
    
       - A couple of other small fixes and cleanups"
    
    * tag 'iommu-updates-v4.2' of git://git.kernel.org/pub/scm/linux/kernel/git/joro/iommu: (69 commits)
      iommu/amd: Handle large pages correctly in free_pagetable
      iommu/vt-d: Don't disable IR when it was previously enabled
      iommu/vt-d: Make sure copied over IR entries are not reused
      iommu/vt-d: Copy IR table from old kernel when in kdump mode
      iommu/vt-d: Set IRTA in intel_setup_irq_remapping
      iommu/vt-d: Disable IRQ remapping in intel_prepare_irq_remapping
      iommu/vt-d: Move QI initializationt to intel_setup_irq_remapping
      iommu/vt-d: Move EIM detection to intel_prepare_irq_remapping
      iommu/vt-d: Enable Translation only if it was previously disabled
      iommu/vt-d: Don't disable translation prior to OS handover
      iommu/vt-d: Don't copy translation tables if RTT bit needs to be changed
      iommu/vt-d: Don't do early domain assignment if kdump kernel
      iommu/vt-d: Allocate si_domain in init_dmars()
      iommu/vt-d: Mark copied context entries
      iommu/vt-d: Do not re-use domain-ids from the old kernel
      iommu/vt-d: Copy translation tables from old kernel
      iommu/vt-d: Detect pre enabled translation
      iommu/vt-d: Make root entry visible for hardware right after allocation
      iommu/vt-d: Init QI before root entry is allocated
      iommu/vt-d: Cleanup log messages
      ...
    6eae81a5
intel_irq_remapping.c 34.8 KB