1. 15 10月, 2015 3 次提交
    • D
      iommu/vt-d: Add initial support for PASID tables · 8a94ade4
      David Woodhouse 提交于
      Add CONFIG_INTEL_IOMMU_SVM, and allocate PASID tables on supported hardware.
      Signed-off-by: NDavid Woodhouse <David.Woodhouse@intel.com>
      8a94ade4
    • D
      iommu/vt-d: Introduce intel_iommu=pasid28, and pasid_enabled() macro · ae853ddb
      David Woodhouse 提交于
      As long as we use an identity mapping to work around the worst of the
      hardware bugs which caused us to defeature it and change the definition
      of the capability bit, we *can* use PASID support on the devices which
      advertised it in bit 28 of the Extended Capability Register.
      
      Allow people to do so with 'intel_iommu=pasid28' on the command line.
      Signed-off-by: NDavid Woodhouse <David.Woodhouse@intel.com>
      ae853ddb
    • D
      iommu/vt-d: Fix ATSR handling for Root-Complex integrated endpoints · d14053b3
      David Woodhouse 提交于
      The VT-d specification says that "Software must enable ATS on endpoint
      devices behind a Root Port only if the Root Port is reported as
      supporting ATS transactions."
      
      We walk up the tree to find a Root Port, but for integrated devices we
      don't find one — we get to the host bridge. In that case we *should*
      allow ATS. Currently we don't, which means that we are incorrectly
      failing to use ATS for the integrated graphics. Fix that.
      
      We should never break out of this loop "naturally" with bus==NULL,
      since we'll always find bridge==NULL in that case (and now return 1).
      
      So remove the check for (!bridge) after the loop, since it can never
      happen. If it did, it would be worthy of a BUG_ON(!bridge). But since
      it'll oops anyway in that case, that'll do just as well.
      
      Cc: stable@vger.kernel.org
      Signed-off-by: NDavid Woodhouse <David.Woodhouse@intel.com>
      d14053b3
  2. 14 10月, 2015 1 次提交
    • C
      iommu/vt-d: fix range computation when making room for large pages · ba2374fd
      Christian Zander 提交于
      In preparation for the installation of a large page, any small page
      tables that may still exist in the target IOV address range are
      removed.  However, if a scatter/gather list entry is large enough to
      fit more than one large page, the address space for any subsequent
      large pages is not cleared of conflicting small page tables.
      
      This can cause legitimate mapping requests to fail with errors of the
      form below, potentially followed by a series of IOMMU faults:
      
      ERROR: DMA PTE for vPFN 0xfde00 already set (to 7f83a4003 not 7e9e00083)
      
      In this example, a 4MiB scatter/gather list entry resulted in the
      successful installation of a large page @ vPFN 0xfdc00, followed by
      a failed attempt to install another large page @ vPFN 0xfde00, due to
      the presence of a pointer to a small page table @ 0x7f83a4000.
      
      To address this problem, compute the number of large pages that fit
      into a given scatter/gather list entry, and use it to derive the
      last vPFN covered by the large page(s).
      
      Cc: stable@vger.kernel.org
      Signed-off-by: NChristian Zander <christian@nervanasys.com>
      Signed-off-by: NDavid Woodhouse <David.Woodhouse@intel.com>
      ba2374fd
  3. 25 8月, 2015 1 次提交
  4. 17 8月, 2015 1 次提交
    • D
      scatterlist: use sg_phys() · db0fa0cb
      Dan Williams 提交于
      Coccinelle cleanup to replace open coded sg to physical address
      translations.  This is in preparation for introducing scatterlists that
      reference __pfn_t.
      
      // sg_phys.cocci: convert usage page_to_phys(sg_page(sg)) to sg_phys(sg)
      // usage: make coccicheck COCCI=sg_phys.cocci MODE=patch
      
      virtual patch
      
      @@
      struct scatterlist *sg;
      @@
      
      - page_to_phys(sg_page(sg)) + sg->offset
      + sg_phys(sg)
      
      @@
      struct scatterlist *sg;
      @@
      
      - page_to_phys(sg_page(sg))
      + sg_phys(sg) & PAGE_MASK
      Signed-off-by: NDan Williams <dan.j.williams@intel.com>
      Signed-off-by: NJens Axboe <axboe@fb.com>
      db0fa0cb
  5. 14 8月, 2015 3 次提交
  6. 12 8月, 2015 26 次提交
  7. 03 8月, 2015 2 次提交
  8. 28 7月, 2015 2 次提交
  9. 23 7月, 2015 1 次提交
    • A
      iommu/vt-d: Fix VM domain ID leak · 46ebb7af
      Alex Williamson 提交于
      This continues the attempt to fix commit fb170fb4 ("iommu/vt-d:
      Introduce helper functions to make code symmetric for readability").
      The previous attempt in commit 71684406 ("iommu/vt-d: Detach
      domain *only* from attached iommus") overlooked the fact that
      dmar_domain.iommu_bmp gets cleared for VM domains when devices are
      detached:
      
      intel_iommu_detach_device
        domain_remove_one_dev_info
          domain_detach_iommu
      
      The domain is detached from the iommu, but the iommu is still attached
      to the domain, for whatever reason.  Thus when we get to domain_exit(),
      we can't rely on iommu_bmp for VM domains to find the active iommus,
      we must check them all.  Without that, the corresponding bit in
      intel_iommu.domain_ids doesn't get cleared and repeated VM domain
      creation and destruction will run out of domain IDs.  Meanwhile we
      still can't call iommu_detach_domain() on arbitrary non-VM domains or
      we risk clearing in-use domain IDs, as 71684406 attempted to
      address.
      
      It's tempting to modify iommu_detach_domain() to test the domain
      iommu_bmp, but the call ordering from domain_remove_one_dev_info()
      prevents it being able to work as fb170fb4 seems to have intended.
      Caching of unused VM domains on the iommu object seems to be the root
      of the problem, but this code is far too fragile for that kind of
      rework to be proposed for stable, so we simply revert this chunk to
      its state prior to fb170fb4.
      
      Fixes: fb170fb4 ("iommu/vt-d: Introduce helper functions to make
                            code symmetric for readability")
      Fixes: 71684406 ("iommu/vt-d: Detach domain *only* from attached
                            iommus")
      Signed-off-by: NAlex Williamson <alex.williamson@redhat.com>
      Cc: Jiang Liu <jiang.liu@linux.intel.com>
      Cc: stable@vger.kernel.org # v3.17+
      Signed-off-by: NJoerg Roedel <jroedel@suse.de>
      46ebb7af