]> git.proxmox.com Git - mirror_ubuntu-jammy-kernel.git/commitdiff
iommu/io-pgtable: Pass struct iommu_iotlb_gather to ->unmap()
authorWill Deacon <will@kernel.org>
Tue, 2 Jul 2019 15:44:58 +0000 (16:44 +0100)
committerWill Deacon <will@kernel.org>
Mon, 29 Jul 2019 16:22:59 +0000 (17:22 +0100)
Update the io-pgtable ->unmap() function to take an iommu_iotlb_gather
pointer as an argument, and update the callers as appropriate.

Signed-off-by: Will Deacon <will@kernel.org>
drivers/gpu/drm/panfrost/panfrost_mmu.c
drivers/iommu/arm-smmu-v3.c
drivers/iommu/arm-smmu.c
drivers/iommu/io-pgtable-arm-v7s.c
drivers/iommu/io-pgtable-arm.c
drivers/iommu/ipmmu-vmsa.c
drivers/iommu/msm_iommu.c
drivers/iommu/mtk_iommu.c
drivers/iommu/qcom_iommu.c
include/linux/io-pgtable.h

index de22a2276e00aa4a3d789a378671b7a597d0a152..6e8145c36e933fc97dbf01214c8c93d9a4f10576 100644 (file)
@@ -222,7 +222,7 @@ void panfrost_mmu_unmap(struct panfrost_gem_object *bo)
                size_t unmapped_page;
                size_t pgsize = get_pgsize(iova, len - unmapped_len);
 
-               unmapped_page = ops->unmap(ops, iova, pgsize);
+               unmapped_page = ops->unmap(ops, iova, pgsize, NULL);
                if (!unmapped_page)
                        break;
 
index 231093413ff9a89bfed8893ec19bfbba158956e1..8e2e53079f489850d3ff38f8f626f6781b98c9dc 100644 (file)
@@ -2015,7 +2015,7 @@ static size_t arm_smmu_unmap(struct iommu_domain *domain, unsigned long iova,
        if (!ops)
                return 0;
 
-       ret = ops->unmap(ops, iova, size);
+       ret = ops->unmap(ops, iova, size, gather);
        if (ret && arm_smmu_atc_inv_domain(smmu_domain, 0, iova, size))
                return 0;
 
index 07a267c437d649ebc19828149bd709f5d6d8d90f..f6689956ab6ebf4ddc839a78d6594a4084992740 100644 (file)
@@ -1362,7 +1362,7 @@ static size_t arm_smmu_unmap(struct iommu_domain *domain, unsigned long iova,
                return 0;
 
        arm_smmu_rpm_get(smmu);
-       ret = ops->unmap(ops, iova, size);
+       ret = ops->unmap(ops, iova, size, gather);
        arm_smmu_rpm_put(smmu);
 
        return ret;
index 203894fb6765e51881f57168b5f9311645263f41..a7776e982b6c3e8bdd9d4397448d7b0f75a3e3e8 100644 (file)
@@ -666,7 +666,7 @@ static size_t __arm_v7s_unmap(struct arm_v7s_io_pgtable *data,
 }
 
 static size_t arm_v7s_unmap(struct io_pgtable_ops *ops, unsigned long iova,
-                           size_t size)
+                           size_t size, struct iommu_iotlb_gather *gather)
 {
        struct arm_v7s_io_pgtable *data = io_pgtable_ops_to_data(ops);
 
@@ -892,7 +892,7 @@ static int __init arm_v7s_do_selftests(void)
        size = 1UL << __ffs(cfg.pgsize_bitmap);
        while (i < loopnr) {
                iova_start = i * SZ_16M;
-               if (ops->unmap(ops, iova_start + size, size) != size)
+               if (ops->unmap(ops, iova_start + size, size, NULL) != size)
                        return __FAIL(ops);
 
                /* Remap of partial unmap */
@@ -910,7 +910,7 @@ static int __init arm_v7s_do_selftests(void)
        for_each_set_bit(i, &cfg.pgsize_bitmap, BITS_PER_LONG) {
                size = 1UL << i;
 
-               if (ops->unmap(ops, iova, size) != size)
+               if (ops->unmap(ops, iova, size, NULL) != size)
                        return __FAIL(ops);
 
                if (ops->iova_to_phys(ops, iova + 42))
index f35516744965f7f6070f8aa744e3cc2915335ee0..325430f8a0a134017046c233628ce2a32d87e2bb 100644 (file)
@@ -12,7 +12,6 @@
 #include <linux/atomic.h>
 #include <linux/bitops.h>
 #include <linux/io-pgtable.h>
-#include <linux/iommu.h>
 #include <linux/kernel.h>
 #include <linux/sizes.h>
 #include <linux/slab.h>
@@ -642,7 +641,7 @@ static size_t __arm_lpae_unmap(struct arm_lpae_io_pgtable *data,
 }
 
 static size_t arm_lpae_unmap(struct io_pgtable_ops *ops, unsigned long iova,
-                            size_t size)
+                            size_t size, struct iommu_iotlb_gather *gather)
 {
        struct arm_lpae_io_pgtable *data = io_pgtable_ops_to_data(ops);
        arm_lpae_iopte *ptep = data->pgd;
@@ -1167,7 +1166,7 @@ static int __init arm_lpae_run_tests(struct io_pgtable_cfg *cfg)
 
                /* Partial unmap */
                size = 1UL << __ffs(cfg->pgsize_bitmap);
-               if (ops->unmap(ops, SZ_1G + size, size) != size)
+               if (ops->unmap(ops, SZ_1G + size, size, NULL) != size)
                        return __FAIL(ops, i);
 
                /* Remap of partial unmap */
@@ -1182,7 +1181,7 @@ static int __init arm_lpae_run_tests(struct io_pgtable_cfg *cfg)
                for_each_set_bit(j, &cfg->pgsize_bitmap, BITS_PER_LONG) {
                        size = 1UL << j;
 
-                       if (ops->unmap(ops, iova, size) != size)
+                       if (ops->unmap(ops, iova, size, NULL) != size)
                                return __FAIL(ops, i);
 
                        if (ops->iova_to_phys(ops, iova + 42))
index a2b8eff4c1f7aaf4189a80ad6ec0e2421a419c68..76a8ec343d53252ea916261555100430d7837318 100644 (file)
@@ -737,7 +737,7 @@ static size_t ipmmu_unmap(struct iommu_domain *io_domain, unsigned long iova,
 {
        struct ipmmu_vmsa_domain *domain = to_vmsa_domain(io_domain);
 
-       return domain->iop->unmap(domain->iop, iova, size);
+       return domain->iop->unmap(domain->iop, iova, size, gather);
 }
 
 static void ipmmu_flush_iotlb_all(struct iommu_domain *io_domain)
index ccfc7ed230efac16e4ba110037867a72a43b6e03..8a0dcaf0a9e988bb5ccda0dcc66037c923bcc891 100644 (file)
@@ -523,7 +523,7 @@ static size_t msm_iommu_unmap(struct iommu_domain *domain, unsigned long iova,
        unsigned long flags;
 
        spin_lock_irqsave(&priv->pgtlock, flags);
-       len = priv->iop->unmap(priv->iop, iova, len);
+       len = priv->iop->unmap(priv->iop, iova, len, gather);
        spin_unlock_irqrestore(&priv->pgtlock, flags);
 
        return len;
index 3785750bdb446aeff65a48f470d0d5c01383b4ad..b73cffd63262cf8bdac0d6f3246b04960b02bc40 100644 (file)
@@ -400,7 +400,7 @@ static size_t mtk_iommu_unmap(struct iommu_domain *domain,
        size_t unmapsz;
 
        spin_lock_irqsave(&dom->pgtlock, flags);
-       unmapsz = dom->iop->unmap(dom->iop, iova, size);
+       unmapsz = dom->iop->unmap(dom->iop, iova, size, gather);
        spin_unlock_irqrestore(&dom->pgtlock, flags);
 
        return unmapsz;
index 0b8a6d6bb4750837404a65de968e044dec9b6ab0..48b288ef74b413442e0bbd5cd3d19da98c569704 100644 (file)
@@ -455,7 +455,7 @@ static size_t qcom_iommu_unmap(struct iommu_domain *domain, unsigned long iova,
         */
        pm_runtime_get_sync(qcom_domain->iommu->dev);
        spin_lock_irqsave(&qcom_domain->pgtbl_lock, flags);
-       ret = ops->unmap(ops, iova, size);
+       ret = ops->unmap(ops, iova, size, gather);
        spin_unlock_irqrestore(&qcom_domain->pgtbl_lock, flags);
        pm_runtime_put_sync(qcom_domain->iommu->dev);
 
index 843310484fe2024f65c9da5adb3b1278a851f59b..fe27d93c8ad9e59f4b1b49d2f02a49673d193c95 100644 (file)
@@ -1,7 +1,9 @@
 /* SPDX-License-Identifier: GPL-2.0 */
 #ifndef __IO_PGTABLE_H
 #define __IO_PGTABLE_H
+
 #include <linux/bitops.h>
+#include <linux/iommu.h>
 
 /*
  * Public API for use by IOMMU drivers
@@ -136,7 +138,7 @@ struct io_pgtable_ops {
        int (*map)(struct io_pgtable_ops *ops, unsigned long iova,
                   phys_addr_t paddr, size_t size, int prot);
        size_t (*unmap)(struct io_pgtable_ops *ops, unsigned long iova,
-                       size_t size);
+                       size_t size, struct iommu_iotlb_gather *gather);
        phys_addr_t (*iova_to_phys)(struct io_pgtable_ops *ops,
                                    unsigned long iova);
 };