opp: Allow dev_pm_opp_get_opp_table() to return -EPROBE_DEFER
[linux-2.6-microblaze.git] / drivers / iommu / io-pgtable-arm-v7s.c
index 4272fe4..a688f22 100644 (file)
@@ -470,7 +470,7 @@ static arm_v7s_iopte arm_v7s_install_table(arm_v7s_iopte *table,
 
 static int __arm_v7s_map(struct arm_v7s_io_pgtable *data, unsigned long iova,
                         phys_addr_t paddr, size_t size, int prot,
-                        int lvl, arm_v7s_iopte *ptep)
+                        int lvl, arm_v7s_iopte *ptep, gfp_t gfp)
 {
        struct io_pgtable_cfg *cfg = &data->iop.cfg;
        arm_v7s_iopte pte, *cptep;
@@ -491,7 +491,7 @@ static int __arm_v7s_map(struct arm_v7s_io_pgtable *data, unsigned long iova,
        /* Grab a pointer to the next level */
        pte = READ_ONCE(*ptep);
        if (!pte) {
-               cptep = __arm_v7s_alloc_table(lvl + 1, GFP_ATOMIC, data);
+               cptep = __arm_v7s_alloc_table(lvl + 1, gfp, data);
                if (!cptep)
                        return -ENOMEM;
 
@@ -512,11 +512,11 @@ static int __arm_v7s_map(struct arm_v7s_io_pgtable *data, unsigned long iova,
        }
 
        /* Rinse, repeat */
-       return __arm_v7s_map(data, iova, paddr, size, prot, lvl + 1, cptep);
+       return __arm_v7s_map(data, iova, paddr, size, prot, lvl + 1, cptep, gfp);
 }
 
 static int arm_v7s_map(struct io_pgtable_ops *ops, unsigned long iova,
-                       phys_addr_t paddr, size_t size, int prot)
+                       phys_addr_t paddr, size_t size, int prot, gfp_t gfp)
 {
        struct arm_v7s_io_pgtable *data = io_pgtable_ops_to_data(ops);
        struct io_pgtable *iop = &data->iop;
@@ -530,7 +530,7 @@ static int arm_v7s_map(struct io_pgtable_ops *ops, unsigned long iova,
                    paddr >= (1ULL << data->iop.cfg.oas)))
                return -ERANGE;
 
-       ret = __arm_v7s_map(data, iova, paddr, size, prot, 1, data->pgd);
+       ret = __arm_v7s_map(data, iova, paddr, size, prot, 1, data->pgd, gfp);
        /*
         * Synchronise all PTE updates for the new mapping before there's
         * a chance for anything to kick off a table walk for the new iova.
@@ -922,12 +922,12 @@ static int __init arm_v7s_do_selftests(void)
                if (ops->map(ops, iova, iova, size, IOMMU_READ |
                                                    IOMMU_WRITE |
                                                    IOMMU_NOEXEC |
-                                                   IOMMU_CACHE))
+                                                   IOMMU_CACHE, GFP_KERNEL))
                        return __FAIL(ops);
 
                /* Overlapping mappings */
                if (!ops->map(ops, iova, iova + size, size,
-                             IOMMU_READ | IOMMU_NOEXEC))
+                             IOMMU_READ | IOMMU_NOEXEC, GFP_KERNEL))
                        return __FAIL(ops);
 
                if (ops->iova_to_phys(ops, iova + 42) != (iova + 42))
@@ -946,7 +946,7 @@ static int __init arm_v7s_do_selftests(void)
                        return __FAIL(ops);
 
                /* Remap of partial unmap */
-               if (ops->map(ops, iova_start + size, size, size, IOMMU_READ))
+               if (ops->map(ops, iova_start + size, size, size, IOMMU_READ, GFP_KERNEL))
                        return __FAIL(ops);
 
                if (ops->iova_to_phys(ops, iova_start + size + 42)
@@ -967,7 +967,7 @@ static int __init arm_v7s_do_selftests(void)
                        return __FAIL(ops);
 
                /* Remap full block */
-               if (ops->map(ops, iova, iova, size, IOMMU_WRITE))
+               if (ops->map(ops, iova, iova, size, IOMMU_WRITE, GFP_KERNEL))
                        return __FAIL(ops);
 
                if (ops->iova_to_phys(ops, iova + 42) != (iova + 42))