]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
iommu/pages: Remove iommu_free_page()
authorJason Gunthorpe <jgg@nvidia.com>
Tue, 8 Apr 2025 16:53:54 +0000 (13:53 -0300)
committerJoerg Roedel <jroedel@suse.de>
Thu, 17 Apr 2025 14:22:36 +0000 (16:22 +0200)
Use iommu_free_pages() instead.

Reviewed-by: Lu Baolu <baolu.lu@linux.intel.com>
Reviewed-by: Mostafa Saleh <smostafa@google.com>
Tested-by: Alejandro Jimenez <alejandro.j.jimenez@oracle.com>
Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
Link: https://lore.kernel.org/r/6-v4-c8663abbb606+3f7-iommu_pages_jgg@nvidia.com
Signed-off-by: Joerg Roedel <jroedel@suse.de>
drivers/iommu/amd/init.c
drivers/iommu/amd/io_pgtable.c
drivers/iommu/amd/io_pgtable_v2.c
drivers/iommu/amd/iommu.c
drivers/iommu/intel/dmar.c
drivers/iommu/intel/iommu.c
drivers/iommu/intel/pasid.c
drivers/iommu/iommu-pages.h
drivers/iommu/riscv/iommu.c
drivers/iommu/rockchip-iommu.c
drivers/iommu/tegra-smmu.c

index 69aad383f97e10a36aad3e9586bf2bbf2f70213e..b5415dd19426aecbef128789ddd1474d28938611 100644 (file)
@@ -946,7 +946,7 @@ static int __init alloc_cwwb_sem(struct amd_iommu *iommu)
 static void __init free_cwwb_sem(struct amd_iommu *iommu)
 {
        if (iommu->cmd_sem)
-               iommu_free_page((void *)iommu->cmd_sem);
+               iommu_free_pages((void *)iommu->cmd_sem);
 }
 
 static void iommu_enable_xt(struct amd_iommu *iommu)
index 26cf562dde11f9359c178f75b61db777c0b49b08..42d9e6746dee285185eb3e7a5f78df101d4a76d1 100644 (file)
@@ -146,7 +146,7 @@ static bool increase_address_space(struct amd_io_pgtable *pgtable,
 
 out:
        spin_unlock_irqrestore(&domain->lock, flags);
-       iommu_free_page(pte);
+       iommu_free_pages(pte);
 
        return ret;
 }
@@ -222,7 +222,7 @@ static u64 *alloc_pte(struct amd_io_pgtable *pgtable,
 
                        /* pte could have been changed somewhere. */
                        if (!try_cmpxchg64(pte, &__pte, __npte))
-                               iommu_free_page(page);
+                               iommu_free_pages(page);
                        else if (IOMMU_PTE_PRESENT(__pte))
                                *updated = true;
 
index a56a27396305910775c337674e94d855d4045293..f5f2f53273786d4c1a4266c4def52cba37b33512 100644 (file)
@@ -121,10 +121,10 @@ static void free_pgtable(u64 *pt, int level)
                if (level > 2)
                        free_pgtable(p, level - 1);
                else
-                       iommu_free_page(p);
+                       iommu_free_pages(p);
        }
 
-       iommu_free_page(pt);
+       iommu_free_pages(pt);
 }
 
 /* Allocate page table */
@@ -159,7 +159,7 @@ static u64 *v2_alloc_pte(int nid, u64 *pgd, unsigned long iova,
                        __npte = set_pgtable_attr(page);
                        /* pte could have been changed somewhere. */
                        if (!try_cmpxchg64(pte, &__pte, __npte))
-                               iommu_free_page(page);
+                               iommu_free_pages(page);
                        else if (IOMMU_PTE_PRESENT(__pte))
                                *updated = true;
 
@@ -181,7 +181,7 @@ static u64 *v2_alloc_pte(int nid, u64 *pgd, unsigned long iova,
                if (pg_size == IOMMU_PAGE_SIZE_1G)
                        free_pgtable(__pte, end_level - 1);
                else if (pg_size == IOMMU_PAGE_SIZE_2M)
-                       iommu_free_page(__pte);
+                       iommu_free_pages(__pte);
        }
 
        return pte;
index b503d01e3b8008aa619da3d03f3afab50fd86194..fe31166ced94b786d5155e57a22552d70dc690ea 100644 (file)
@@ -1812,7 +1812,7 @@ static void free_gcr3_tbl_level1(u64 *tbl)
 
                ptr = iommu_phys_to_virt(tbl[i] & PAGE_MASK);
 
-               iommu_free_page(ptr);
+               iommu_free_pages(ptr);
        }
 }
 
@@ -1845,7 +1845,7 @@ static void free_gcr3_table(struct gcr3_tbl_info *gcr3_info)
        /* Free per device domain ID */
        pdom_id_free(gcr3_info->domid);
 
-       iommu_free_page(gcr3_info->gcr3_tbl);
+       iommu_free_pages(gcr3_info->gcr3_tbl);
        gcr3_info->gcr3_tbl = NULL;
 }
 
index e540092d664d27a6823db5934b8a2126862922c2..14bc39b2cdd528c0df8e54fe9577850f439c7bb6 100644 (file)
@@ -1187,7 +1187,7 @@ static void free_iommu(struct intel_iommu *iommu)
        }
 
        if (iommu->qi) {
-               iommu_free_page(iommu->qi->desc);
+               iommu_free_pages(iommu->qi->desc);
                kfree(iommu->qi->desc_status);
                kfree(iommu->qi);
        }
@@ -1714,7 +1714,7 @@ int dmar_enable_qi(struct intel_iommu *iommu)
 
        qi->desc_status = kcalloc(QI_LENGTH, sizeof(int), GFP_ATOMIC);
        if (!qi->desc_status) {
-               iommu_free_page(qi->desc);
+               iommu_free_pages(qi->desc);
                kfree(qi);
                iommu->qi = NULL;
                return -ENOMEM;
index b29da2d96d0b18742b51b7801038b17b5c33907e..e66fd919501f8df3f339e7ecba4d2142a60c1543 100644 (file)
@@ -571,17 +571,17 @@ static void free_context_table(struct intel_iommu *iommu)
        for (i = 0; i < ROOT_ENTRY_NR; i++) {
                context = iommu_context_addr(iommu, i, 0, 0);
                if (context)
-                       iommu_free_page(context);
+                       iommu_free_pages(context);
 
                if (!sm_supported(iommu))
                        continue;
 
                context = iommu_context_addr(iommu, i, 0x80, 0);
                if (context)
-                       iommu_free_page(context);
+                       iommu_free_pages(context);
        }
 
-       iommu_free_page(iommu->root_entry);
+       iommu_free_pages(iommu->root_entry);
        iommu->root_entry = NULL;
 }
 
@@ -745,7 +745,7 @@ static struct dma_pte *pfn_to_dma_pte(struct dmar_domain *domain,
                        tmp = 0ULL;
                        if (!try_cmpxchg64(&pte->val, &tmp, pteval))
                                /* Someone else set it while we were thinking; use theirs. */
-                               iommu_free_page(tmp_page);
+                               iommu_free_pages(tmp_page);
                        else
                                domain_flush_cache(domain, pte, sizeof(*pte));
                }
@@ -858,7 +858,7 @@ static void dma_pte_free_level(struct dmar_domain *domain, int level,
                      last_pfn < level_pfn + level_size(level) - 1)) {
                        dma_clear_pte(pte);
                        domain_flush_cache(domain, pte, sizeof(*pte));
-                       iommu_free_page(level_pte);
+                       iommu_free_pages(level_pte);
                }
 next:
                pfn += level_size(level);
@@ -882,7 +882,7 @@ static void dma_pte_free_pagetable(struct dmar_domain *domain,
 
        /* free pgd */
        if (start_pfn == 0 && last_pfn == DOMAIN_MAX_PFN(domain->gaw)) {
-               iommu_free_page(domain->pgd);
+               iommu_free_pages(domain->pgd);
                domain->pgd = NULL;
        }
 }
index 58a13366b41c7df5151125525c807de9892f8d42..b616aaad03ba2478ad25bff36795eb91af6c403d 100644 (file)
@@ -96,7 +96,7 @@ void intel_pasid_free_table(struct device *dev)
        max_pde = pasid_table->max_pasid >> PASID_PDE_SHIFT;
        for (i = 0; i < max_pde; i++) {
                table = get_pasid_table_from_pde(&dir[i]);
-               iommu_free_page(table);
+               iommu_free_pages(table);
        }
 
        iommu_free_pages(pasid_table->table);
@@ -160,7 +160,7 @@ retry:
                tmp = 0ULL;
                if (!try_cmpxchg64(&dir[dir_index].val, &tmp,
                                   (u64)virt_to_phys(entries) | PASID_PTE_PRESENT)) {
-                       iommu_free_page(entries);
+                       iommu_free_pages(entries);
                        goto retry;
                }
                if (!ecap_coherent(info->iommu->ecap)) {
index 88587da1782b94d72199410307efca3503f077e0..fcd17b94f7b830de94b39ebc38357e48969419f1 100644 (file)
@@ -122,15 +122,6 @@ static inline void iommu_free_pages(void *virt)
        put_page(page);
 }
 
-/**
- * iommu_free_page - free page
- * @virt: virtual address of the page to be freed.
- */
-static inline void iommu_free_page(void *virt)
-{
-       iommu_free_pages(virt);
-}
-
 /**
  * iommu_put_pages_list - free a list of pages.
  * @page: the head of the lru list to be freed.
index 1868468d018a28819f5612553a89c127c6e4e82f..4fe07343d84e61918cdb5acbf21993b4e768a6db 100644 (file)
@@ -1105,7 +1105,7 @@ static void riscv_iommu_pte_free(struct riscv_iommu_domain *domain,
        if (freelist)
                list_add_tail(&virt_to_page(ptr)->lru, freelist);
        else
-               iommu_free_page(ptr);
+               iommu_free_pages(ptr);
 }
 
 static unsigned long *riscv_iommu_pte_alloc(struct riscv_iommu_domain *domain,
@@ -1148,7 +1148,7 @@ pte_retry:
                        old = pte;
                        pte = _io_pte_entry(virt_to_pfn(addr), _PAGE_TABLE);
                        if (cmpxchg_relaxed(ptr, old, pte) != old) {
-                               iommu_free_page(addr);
+                               iommu_free_pages(addr);
                                goto pte_retry;
                        }
                }
@@ -1393,7 +1393,7 @@ static struct iommu_domain *riscv_iommu_alloc_paging_domain(struct device *dev)
        domain->pscid = ida_alloc_range(&riscv_iommu_pscids, 1,
                                        RISCV_IOMMU_MAX_PSCID, GFP_KERNEL);
        if (domain->pscid < 0) {
-               iommu_free_page(domain->pgd_root);
+               iommu_free_pages(domain->pgd_root);
                kfree(domain);
                return ERR_PTR(-ENOMEM);
        }
index af4cc91b2bbfc8f6f4fdeddebc347aa7ceea6b02..f1b49370dfa3d00f5f0e55cb9e96283e88c9afdc 100644 (file)
@@ -737,7 +737,7 @@ static u32 *rk_dte_get_page_table(struct rk_iommu_domain *rk_domain,
        pt_dma = dma_map_single(rk_domain->dma_dev, page_table, SPAGE_SIZE, DMA_TO_DEVICE);
        if (dma_mapping_error(rk_domain->dma_dev, pt_dma)) {
                dev_err(rk_domain->dma_dev, "DMA mapping error while allocating page table\n");
-               iommu_free_page(page_table);
+               iommu_free_pages(page_table);
                return ERR_PTR(-ENOMEM);
        }
 
@@ -1086,7 +1086,7 @@ static struct iommu_domain *rk_iommu_domain_alloc_paging(struct device *dev)
        return &rk_domain->domain;
 
 err_free_dt:
-       iommu_free_page(rk_domain->dt);
+       iommu_free_pages(rk_domain->dt);
 err_free_domain:
        kfree(rk_domain);
 
@@ -1107,13 +1107,13 @@ static void rk_iommu_domain_free(struct iommu_domain *domain)
                        u32 *page_table = phys_to_virt(pt_phys);
                        dma_unmap_single(rk_domain->dma_dev, pt_phys,
                                         SPAGE_SIZE, DMA_TO_DEVICE);
-                       iommu_free_page(page_table);
+                       iommu_free_pages(page_table);
                }
        }
 
        dma_unmap_single(rk_domain->dma_dev, rk_domain->dt_dma,
                         SPAGE_SIZE, DMA_TO_DEVICE);
-       iommu_free_page(rk_domain->dt);
+       iommu_free_pages(rk_domain->dt);
 
        kfree(rk_domain);
 }
index 95e97d1e4004688f7c3a5f10c2c9e1122170f883..7ad1b3c7c7fce2b5f2de423785cd748438dbb4cf 100644 (file)
@@ -303,7 +303,7 @@ static struct iommu_domain *tegra_smmu_domain_alloc_paging(struct device *dev)
 
        as->count = kcalloc(SMMU_NUM_PDE, sizeof(u32), GFP_KERNEL);
        if (!as->count) {
-               iommu_free_page(as->pd);
+               iommu_free_pages(as->pd);
                kfree(as);
                return NULL;
        }
@@ -311,7 +311,7 @@ static struct iommu_domain *tegra_smmu_domain_alloc_paging(struct device *dev)
        as->pts = kcalloc(SMMU_NUM_PDE, sizeof(*as->pts), GFP_KERNEL);
        if (!as->pts) {
                kfree(as->count);
-               iommu_free_page(as->pd);
+               iommu_free_pages(as->pd);
                kfree(as);
                return NULL;
        }
@@ -608,14 +608,14 @@ static u32 *as_get_pte(struct tegra_smmu_as *as, dma_addr_t iova,
                dma = dma_map_single(smmu->dev, pt, SMMU_SIZE_PT,
                                     DMA_TO_DEVICE);
                if (dma_mapping_error(smmu->dev, dma)) {
-                       iommu_free_page(pt);
+                       iommu_free_pages(pt);
                        return NULL;
                }
 
                if (!smmu_dma_addr_valid(smmu, dma)) {
                        dma_unmap_single(smmu->dev, dma, SMMU_SIZE_PT,
                                         DMA_TO_DEVICE);
-                       iommu_free_page(pt);
+                       iommu_free_pages(pt);
                        return NULL;
                }
 
@@ -656,7 +656,7 @@ static void tegra_smmu_pte_put_use(struct tegra_smmu_as *as, unsigned long iova)
 
                dma_unmap_single(smmu->dev, pte_dma, SMMU_SIZE_PT,
                                 DMA_TO_DEVICE);
-               iommu_free_page(pt);
+               iommu_free_pages(pt);
                as->pts[pde] = NULL;
        }
 }
@@ -707,7 +707,7 @@ static struct tegra_pt *as_get_pde_page(struct tegra_smmu_as *as,
         */
        if (as->pts[pde]) {
                if (pt)
-                       iommu_free_page(pt);
+                       iommu_free_pages(pt);
 
                pt = as->pts[pde];
        }