Merge tag 'iommu-updates-v5.3' of git://git.kernel.org/pub/scm/linux/kernel/git/joro...
authorLinus Torvalds <torvalds@linux-foundation.org>
Tue, 9 Jul 2019 16:21:02 +0000 (09:21 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Tue, 9 Jul 2019 16:21:02 +0000 (09:21 -0700)
Pull iommu updates from Joerg Roedel:

 - Make the dma-iommu code more generic so that it can be used outside
   of the ARM context with other IOMMU drivers. Goal is to make use of
   it on x86 too.

 - Generic IOMMU domain support for the Intel VT-d driver. This driver
   now makes more use of common IOMMU code to allocate default domains
   for the devices it handles.

 - An IOMMU fault reporting API to userspace. With that the IOMMU fault
   handling can be done in user-space, for example to forward the faults
   to a VM.

 - Better handling for reserved regions requested by the firmware. These
   can be 'relaxed' now, meaning that those don't prevent a device being
   attached to a VM.

 - Suspend/Resume support for the Renesas IOMMU driver.

 - Added support for dumping SVA related fields of the DMAR table in the
   Intel VT-d driver via debugfs.

 - A pile of smaller fixes and cleanups.

* tag 'iommu-updates-v5.3' of git://git.kernel.org/pub/scm/linux/kernel/git/joro/iommu: (90 commits)
  iommu/omap: No need to check return value of debugfs_create functions
  iommu/arm-smmu-v3: Invalidate ATC when detaching a device
  iommu/arm-smmu-v3: Fix compilation when CONFIG_CMA=n
  iommu/vt-d: Cleanup unused variable
  iommu/amd: Flush not present cache in iommu_map_page
  iommu/amd: Only free resources once on init error
  iommu/amd: Move gart fallback to amd_iommu_init
  iommu/amd: Make iommu_disable safer
  iommu/io-pgtable: Support non-coherent page tables
  iommu/io-pgtable: Replace IO_PGTABLE_QUIRK_NO_DMA with specific flag
  iommu/io-pgtable-arm: Add support to use system cache
  iommu/arm-smmu-v3: Increase maximum size of queues
  iommu/vt-d: Silence a variable set but not used
  iommu/vt-d: Remove an unused variable "length"
  iommu: Fix integer truncation
  iommu: Add padding to struct iommu_fault
  iommu/vt-d: Consolidate domain_init() to avoid duplication
  iommu/vt-d: Cleanup after delegating DMA domain to generic iommu
  iommu/vt-d: Fix suspicious RCU usage in probe_acpi_namespace_devices()
  iommu/vt-d: Allow DMA domain attaching to rmrr locked device
  ...

1  2 
arch/arm64/mm/dma-mapping.c
include/linux/device.h

index 1d17dbeafe7605f6c5efe63ae192b35e27046faf,9c588a1d6ffd6b285b37f241f1cf7572dd845000..1d3f0b5a99400757bf361c4127e43f38c3916dee
@@@ -47,39 -36,12 +36,8 @@@ void arch_dma_prep_coherent(struct pag
        __dma_flush_area(page_address(page), size);
  }
  
- #ifdef CONFIG_IOMMU_DMA
- static int __swiotlb_get_sgtable_page(struct sg_table *sgt,
-                                     struct page *page, size_t size)
- {
-       int ret = sg_alloc_table(sgt, 1, GFP_KERNEL);
-       if (!ret)
-               sg_set_page(sgt->sgl, page, PAGE_ALIGN(size), 0);
-       return ret;
- }
- static int __swiotlb_mmap_pfn(struct vm_area_struct *vma,
-                             unsigned long pfn, size_t size)
- {
-       int ret = -ENXIO;
-       unsigned long nr_vma_pages = vma_pages(vma);
-       unsigned long nr_pages = PAGE_ALIGN(size) >> PAGE_SHIFT;
-       unsigned long off = vma->vm_pgoff;
-       if (off < nr_pages && nr_vma_pages <= (nr_pages - off)) {
-               ret = remap_pfn_range(vma, vma->vm_start,
-                                     pfn + off,
-                                     vma->vm_end - vma->vm_start,
-                                     vma->vm_page_prot);
-       }
-       return ret;
- }
- #endif /* CONFIG_IOMMU_DMA */
  static int __init arm64_dma_init(void)
  {
 -      WARN_TAINT(ARCH_DMA_MINALIGN < cache_line_size(),
 -                 TAINT_CPU_OUT_OF_SPEC,
 -                 "ARCH_DMA_MINALIGN smaller than CTR_EL0.CWG (%d < %d)",
 -                 ARCH_DMA_MINALIGN, cache_line_size());
        return dma_atomic_pool_init(GFP_DMA32, __pgprot(PROT_NORMAL_NC));
  }
  arch_initcall(arm64_dma_init);
@@@ -457,16 -56,9 +52,17 @@@ void arch_teardown_dma_ops(struct devic
  void arch_setup_dma_ops(struct device *dev, u64 dma_base, u64 size,
                        const struct iommu_ops *iommu, bool coherent)
  {
 +      int cls = cache_line_size_of_cpu();
 +
 +      WARN_TAINT(!coherent && cls > ARCH_DMA_MINALIGN,
 +                 TAINT_CPU_OUT_OF_SPEC,
 +                 "%s %s: ARCH_DMA_MINALIGN smaller than CTR_EL0.CWG (%d < %d)",
 +                 dev_driver_string(dev), dev_name(dev),
 +                 ARCH_DMA_MINALIGN, cls);
 +
        dev->dma_coherent = coherent;
-       __iommu_setup_dma_ops(dev, dma_base, size, iommu);
+       if (iommu)
+               iommu_setup_dma_ops(dev, dma_base, size);
  
  #ifdef CONFIG_XEN
        if (xen_initial_domain())
Simple merge