iommu/amd: Allow non-ATS devices in IOMMUv2 domains
authorJoerg Roedel <jroedel@suse.de>
Thu, 30 Jul 2015 09:24:45 +0000 (11:24 +0200)
committerJoerg Roedel <jroedel@suse.de>
Fri, 31 Jul 2015 13:15:41 +0000 (15:15 +0200)
With the grouping of multi-function devices a non-ATS
capable device might also end up in the same domain as an
IOMMUv2 capable device.
So handle this situation gracefully and don't consider it a
bug anymore.

Tested-by: Oded Gabbay <oded.gabbay@gmail.com>
Signed-off-by: Joerg Roedel <jroedel@suse.de>
drivers/iommu/amd_iommu.c

index fa9508bb76dda3c85b8bfce60491ea9a6f72315c..658ee39e65696898422bcd9c825d8a49fbc37359 100644 (file)
@@ -3318,7 +3318,12 @@ static int __flush_pasid(struct protection_domain *domain, int pasid,
                struct amd_iommu *iommu;
                int qdep;
 
-               BUG_ON(!dev_data->ats.enabled);
+               /*
+                  There might be non-IOMMUv2 capable devices in an IOMMUv2
+                * domain.
+                */
+               if (!dev_data->ats.enabled)
+                       continue;
 
                qdep  = dev_data->ats.qdep;
                iommu = amd_iommu_rlookup_table[dev_data->devid];