iommu/arm-smmu: fix bug in pmd construction
authorMitchel Humpherys <mitchelh@codeaurora.org>
Fri, 19 Sep 2014 21:58:42 +0000 (22:58 +0100)
committerWill Deacon <will.deacon@arm.com>
Mon, 22 Sep 2014 10:13:01 +0000 (11:13 +0100)
We are using the same pfn for every pte we create while constructing the
pmd. Fix this by actually updating the pfn on each iteration of the pmd
construction loop.

It's not clear if we can actually hit this bug right now since iommu_map
splits up the calls to .map based on the page size, so we only ever seem to
iterate this loop once. However, things might change in the future that
might cause us to hit this.

Signed-off-by: Mitchel Humpherys <mitchelh@codeaurora.org>
Signed-off-by: Will Deacon <will.deacon@arm.com>
drivers/iommu/arm-smmu.c

index 939242c4110023ab1b95876e70de0fc9d9a5f836..37dc3dd0df962271b67302b429501068d511fa3f 100644 (file)
@@ -1408,6 +1408,7 @@ static int arm_smmu_alloc_init_pmd(struct arm_smmu_device *smmu, pud_t *pud,
                ret = arm_smmu_alloc_init_pte(smmu, pmd, addr, next, pfn,
                                              prot, stage);
                phys += next - addr;
+               pfn = __phys_to_pfn(phys);
        } while (pmd++, addr = next, addr < end);
 
        return ret;
This page took 0.026101 seconds and 5 git commands to generate.