]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
iommu/exynos: Add missing cache flush for removed page table entries
authorCho KyongHo <pullip.cho@samsung.com>
Mon, 12 May 2014 06:14:51 +0000 (11:44 +0530)
committerJoerg Roedel <jroedel@suse.de>
Tue, 13 May 2014 17:12:53 +0000 (19:12 +0200)
This commit adds cache flush for removed small and large page entries
in exynos_iommu_unmap(). Missing cache flush of removed page table
entries can cause missing page fault interrupt when a master IP
accesses an unmapped area.

Reviewed-by: Tomasz Figa <t.figa@samsung.com>
Tested-by: Grant Grundler <grundler@chromium.org>
Signed-off-by: Cho KyongHo <pullip.cho@samsung.com>
Signed-off-by: Shaik Ameer Basha <shaik.ameer@samsung.com>
Signed-off-by: Joerg Roedel <jroedel@suse.de>
drivers/iommu/exynos-iommu.c

index 4fc31fc6a49a42c86538929e11b4cfc97c70aa31..6915235f9e8682cf91b6d90942fa3238b96db24d 100644 (file)
@@ -904,6 +904,7 @@ static size_t exynos_iommu_unmap(struct iommu_domain *domain,
        if (lv2ent_small(ent)) {
                *ent = 0;
                size = SPAGE_SIZE;
+               pgtable_flush(ent, ent + 1);
                priv->lv2entcnt[lv1ent_offset(iova)] += 1;
                goto done;
        }
@@ -915,6 +916,7 @@ static size_t exynos_iommu_unmap(struct iommu_domain *domain,
        }
 
        memset(ent, 0, sizeof(*ent) * SPAGES_PER_LPAGE);
+       pgtable_flush(ent, ent + SPAGES_PER_LPAGE);
 
        size = LPAGE_SIZE;
        priv->lv2entcnt[lv1ent_offset(iova)] += SPAGES_PER_LPAGE;