The requirement for consistent super page support across all the IOMMU
hardware in the system has been removed. In the past, if a new IOMMU
was hot-added and lacked consistent super page capability, the hot-add
process would be aborted. However, with the updated attachment semantics,
it is now permissible for the super page capability to vary among
different IOMMU hardware units.

Signed-off-by: Lu Baolu <baolu...@linux.intel.com>
---
 drivers/iommu/intel/iommu.c | 39 +------------------------------------
 1 file changed, 1 insertion(+), 38 deletions(-)

diff --git a/drivers/iommu/intel/iommu.c b/drivers/iommu/intel/iommu.c
index 74e005b1c4b4..660d2b6c531b 100644
--- a/drivers/iommu/intel/iommu.c
+++ b/drivers/iommu/intel/iommu.c
@@ -366,36 +366,6 @@ static bool iommu_paging_structure_coherency(struct 
intel_iommu *iommu)
                        ecap_smpwc(iommu->ecap) : ecap_coherent(iommu->ecap);
 }
 
-static int domain_update_iommu_superpage(struct dmar_domain *domain,
-                                        struct intel_iommu *skip)
-{
-       struct dmar_drhd_unit *drhd;
-       struct intel_iommu *iommu;
-       int mask = 0x3;
-
-       if (!intel_iommu_superpage)
-               return 0;
-
-       /* set iommu_superpage to the smallest common denominator */
-       rcu_read_lock();
-       for_each_active_iommu(iommu, drhd) {
-               if (iommu != skip) {
-                       if (domain && domain->use_first_level) {
-                               if (!cap_fl1gp_support(iommu->cap))
-                                       mask = 0x1;
-                       } else {
-                               mask &= cap_super_page_val(iommu->cap);
-                       }
-
-                       if (!mask)
-                               break;
-               }
-       }
-       rcu_read_unlock();
-
-       return fls(mask);
-}
-
 /* Return the super pagesize bitmap if supported. */
 static unsigned long domain_super_pgsize_bitmap(struct dmar_domain *domain)
 {
@@ -2845,8 +2815,8 @@ int dmar_parse_one_satc(struct acpi_dmar_header *hdr, 
void *arg)
 
 static int intel_iommu_add(struct dmar_drhd_unit *dmaru)
 {
-       int sp, ret;
        struct intel_iommu *iommu = dmaru->iommu;
+       int ret;
 
        ret = intel_cap_audit(CAP_AUDIT_HOTPLUG_DMAR, iommu);
        if (ret)
@@ -2858,13 +2828,6 @@ static int intel_iommu_add(struct dmar_drhd_unit *dmaru)
                return -ENXIO;
        }
 
-       sp = domain_update_iommu_superpage(NULL, iommu) - 1;
-       if (sp >= 0 && !(cap_super_page_val(iommu->cap) & (1 << sp))) {
-               pr_warn("%s: Doesn't support large page.\n",
-                       iommu->name);
-               return -ENXIO;
-       }
-
        /*
         * Disable translation if already enabled prior to OS handover.
         */
-- 
2.34.1

Reply via email to