The pci_ats_supported() function checks if a device supports ATS and is
allowed to use it.  In addition to checking that the device has an ATS
capability and that the global pci=noats is not set
(pci_ats_disabled()), it also checks if a device is untrusted (plugged
into an external-facing port such as thunderbolt).

Signed-off-by: Jean-Philippe Brucker <jean-phili...@linaro.org>
---
 drivers/iommu/amd_iommu.c | 12 ++++--------
 1 file changed, 4 insertions(+), 8 deletions(-)

diff --git a/drivers/iommu/amd_iommu.c b/drivers/iommu/amd_iommu.c
index aac132bd1ef0..084f0b2e132e 100644
--- a/drivers/iommu/amd_iommu.c
+++ b/drivers/iommu/amd_iommu.c
@@ -291,16 +291,15 @@ static struct iommu_group *acpihid_device_group(struct 
device *dev)
 static bool pci_iommuv2_capable(struct pci_dev *pdev)
 {
        static const int caps[] = {
-               PCI_EXT_CAP_ID_ATS,
                PCI_EXT_CAP_ID_PRI,
                PCI_EXT_CAP_ID_PASID,
        };
        int i, pos;
 
-       if (pci_ats_disabled())
+       if (!pci_ats_supported(pdev))
                return false;
 
-       for (i = 0; i < 3; ++i) {
+       for (i = 0; i < 2; ++i) {
                pos = pci_find_ext_capability(pdev, caps[i]);
                if (pos == 0)
                        return false;
@@ -3040,11 +3039,8 @@ int amd_iommu_device_info(struct pci_dev *pdev,
 
        memset(info, 0, sizeof(*info));
 
-       if (!pci_ats_disabled()) {
-               pos = pci_find_ext_capability(pdev, PCI_EXT_CAP_ID_ATS);
-               if (pos)
-                       info->flags |= AMD_IOMMU_DEVICE_FLAG_ATS_SUP;
-       }
+       if (pci_ats_supported(pdev))
+               info->flags |= AMD_IOMMU_DEVICE_FLAG_ATS_SUP;
 
        pos = pci_find_ext_capability(pdev, PCI_EXT_CAP_ID_PRI);
        if (pos)
-- 
2.25.0

_______________________________________________
iommu mailing list
iommu@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/iommu

Reply via email to