So that the vendor iommu drivers are no more required to provide the
def_domain_type callback to always isolate the untrusted devices.

Link: 
https://lore.kernel.org/linux-iommu/243ce89c33fe4b9da4c56ba35aceb...@huawei.com/
Cc: Shameerali Kolothum Thodi <shameerali.kolothum.th...@huawei.com>
Signed-off-by: Lu Baolu <baolu...@linux.intel.com>
---
 drivers/iommu/intel/iommu.c |  7 -------
 drivers/iommu/iommu.c       | 16 +++++++---------
 2 files changed, 7 insertions(+), 16 deletions(-)

diff --git a/drivers/iommu/intel/iommu.c b/drivers/iommu/intel/iommu.c
index 0233d2438c44..8f51980023a2 100644
--- a/drivers/iommu/intel/iommu.c
+++ b/drivers/iommu/intel/iommu.c
@@ -2916,13 +2916,6 @@ static int device_def_domain_type(struct device *dev)
        if (dev_is_pci(dev)) {
                struct pci_dev *pdev = to_pci_dev(dev);
 
-               /*
-                * Prevent any device marked as untrusted from getting
-                * placed into the statically identity mapping domain.
-                */
-               if (pdev->untrusted)
-                       return IOMMU_DOMAIN_DMA;
-
                if ((iommu_identity_mapping & IDENTMAP_AZALIA) && 
IS_AZALIA(pdev))
                        return IOMMU_DOMAIN_IDENTITY;
 
diff --git a/drivers/iommu/iommu.c b/drivers/iommu/iommu.c
index 5236c4e4dd4c..f8ee0e86b7fb 100644
--- a/drivers/iommu/iommu.c
+++ b/drivers/iommu/iommu.c
@@ -1462,12 +1462,14 @@ EXPORT_SYMBOL_GPL(fsl_mc_device_group);
 static int iommu_get_def_domain_type(struct device *dev)
 {
        const struct iommu_ops *ops = dev->bus->iommu_ops;
-       unsigned int type = 0;
+
+       if (dev_is_pci(dev) && to_pci_dev(dev)->untrusted)
+               return IOMMU_DOMAIN_DMA;
 
        if (ops->def_domain_type)
-               type = ops->def_domain_type(dev);
+               return ops->def_domain_type(dev);
 
-       return (type == 0) ? iommu_def_domain_type : type;
+       return 0;
 }
 
 static int iommu_group_alloc_default_domain(struct bus_type *bus,
@@ -1509,7 +1511,7 @@ static int iommu_alloc_default_domain(struct iommu_group 
*group,
        if (group->default_domain)
                return 0;
 
-       type = iommu_get_def_domain_type(dev);
+       type = iommu_get_def_domain_type(dev) ? : iommu_def_domain_type;
 
        return iommu_group_alloc_default_domain(dev->bus, group, type);
 }
@@ -1647,12 +1649,8 @@ struct __group_domain_type {
 
 static int probe_get_default_domain_type(struct device *dev, void *data)
 {
-       const struct iommu_ops *ops = dev->bus->iommu_ops;
        struct __group_domain_type *gtype = data;
-       unsigned int type = 0;
-
-       if (ops->def_domain_type)
-               type = ops->def_domain_type(dev);
+       unsigned int type = iommu_get_def_domain_type(dev);
 
        if (type) {
                if (gtype->type && gtype->type != type) {
-- 
2.25.1

Reply via email to