Merge branch 'core-iommu-for-linus' of git://git.kernel.org/pub/scm/linux/kernel...
authorLinus Torvalds <torvalds@linux-foundation.org>
Fri, 6 Aug 2010 16:22:39 +0000 (09:22 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Fri, 6 Aug 2010 16:22:39 +0000 (09:22 -0700)
* 'core-iommu-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip:
  x86/amd-iommu: Export cache-coherency capability
  iommu-api: Extension to check for interrupt remapping
  x86/amd-iommu: Use for_each_pci_dev()

arch/x86/kernel/amd_iommu.c
drivers/pci/intel-iommu.c
include/linux/iommu.h

index 0d20286..fa044e1 100644 (file)
@@ -2572,6 +2572,11 @@ static phys_addr_t amd_iommu_iova_to_phys(struct iommu_domain *dom,
 static int amd_iommu_domain_has_cap(struct iommu_domain *domain,
                                    unsigned long cap)
 {
+       switch (cap) {
+       case IOMMU_CAP_CACHE_COHERENCY:
+               return 1;
+       }
+
        return 0;
 }
 
@@ -2609,8 +2614,7 @@ int __init amd_iommu_init_passthrough(void)
 
        pt_domain->mode |= PAGE_MODE_NONE;
 
-       while ((dev = pci_get_device(PCI_ANY_ID, PCI_ANY_ID, dev)) != NULL) {
-
+       for_each_pci_dev(dev) {
                if (!check_device(&dev->dev))
                        continue;
 
index c9171be..6a5af18 100644 (file)
@@ -3698,6 +3698,8 @@ static int intel_iommu_domain_has_cap(struct iommu_domain *domain,
 
        if (cap == IOMMU_CAP_CACHE_COHERENCY)
                return dmar_domain->iommu_snooping;
+       if (cap == IOMMU_CAP_INTR_REMAP)
+               return intr_remapping_enabled;
 
        return 0;
 }
index be22ad8..0a2ba40 100644 (file)
@@ -30,6 +30,7 @@ struct iommu_domain {
 };
 
 #define IOMMU_CAP_CACHE_COHERENCY      0x1
+#define IOMMU_CAP_INTR_REMAP           0x2     /* isolates device intrs */
 
 struct iommu_ops {
        int (*domain_init)(struct iommu_domain *domain);