summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMitchel Humpherys <mitchelh@codeaurora.org>2014-09-19 22:58:42 +0100
committerWill Deacon <will.deacon@arm.com>2014-09-22 11:13:01 +0100
commitccd359f219bee914501a8892b148e2a1315066d3 (patch)
treec58d1f704f9bb13d6f08a2e6b73f9fda8afca63d
parentd3aba0460a2e13b49892f7a12237f82658c44257 (diff)
downloadlinux-ccd359f219bee914501a8892b148e2a1315066d3.tar.gz
linux-ccd359f219bee914501a8892b148e2a1315066d3.tar.bz2
linux-ccd359f219bee914501a8892b148e2a1315066d3.zip
iommu/arm-smmu: fix bug in pmd construction
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>
-rw-r--r--drivers/iommu/arm-smmu.c1
1 files changed, 1 insertions, 0 deletions
diff --git a/drivers/iommu/arm-smmu.c b/drivers/iommu/arm-smmu.c
index 939242c41100..37dc3dd0df96 100644
--- a/drivers/iommu/arm-smmu.c
+++ b/drivers/iommu/arm-smmu.c
@@ -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;