If a NULL domain is about to set to a device, let's set the blocking
domain instead.

Signed-off-by: Lu Baolu <[email protected]>
---
 drivers/iommu/iommu.c | 35 +++--------------------------------
 1 file changed, 3 insertions(+), 32 deletions(-)

diff --git a/drivers/iommu/iommu.c b/drivers/iommu/iommu.c
index dcbc55c9d8d7..ba0f427c2823 100644
--- a/drivers/iommu/iommu.c
+++ b/drivers/iommu/iommu.c
@@ -2058,16 +2058,6 @@ int iommu_deferred_attach(struct device *dev, struct 
iommu_domain *domain)
        return 0;
 }
 
-static void __iommu_detach_device(struct iommu_domain *domain,
-                                 struct device *dev)
-{
-       if (iommu_is_attach_deferred(dev))
-               return;
-
-       domain->ops->detach_dev(domain, dev);
-       trace_detach_device_from_domain(dev);
-}
-
 void iommu_detach_device(struct iommu_domain *domain, struct device *dev)
 {
        struct iommu_group *group;
@@ -2160,15 +2150,6 @@ int iommu_attach_group(struct iommu_domain *domain, 
struct iommu_group *group)
 }
 EXPORT_SYMBOL_GPL(iommu_attach_group);
 
-static int iommu_group_do_detach_device(struct device *dev, void *data)
-{
-       struct iommu_domain *domain = data;
-
-       __iommu_detach_device(domain, dev);
-
-       return 0;
-}
-
 static int __iommu_group_set_domain(struct iommu_group *group,
                                    struct iommu_domain *new_domain)
 {
@@ -2177,19 +2158,9 @@ static int __iommu_group_set_domain(struct iommu_group 
*group,
        if (group->domain == new_domain)
                return 0;
 
-       /*
-        * New drivers should support default domains and so the detach_dev() op
-        * will never be called. Otherwise the NULL domain represents some
-        * platform specific behavior.
-        */
-       if (!new_domain) {
-               if (WARN_ON(!group->domain->ops->detach_dev))
-                       return -EINVAL;
-               __iommu_group_for_each_dev(group, group->domain,
-                                          iommu_group_do_detach_device);
-               group->domain = NULL;
-               return 0;
-       }
+       /* The NULL domain represents some platform specific behavior. */
+       if (!new_domain)
+               new_domain = group->blocking_domain;
 
        /*
         * Changing the domain is done by calling set_dev() on the new
-- 
2.25.1

_______________________________________________
iommu mailing list
[email protected]
https://lists.linuxfoundation.org/mailman/listinfo/iommu

Reply via email to