iommu/exynos: add missing cache flush for removed page table entries
authorCho KyongHo <pullip.cho@samsung.com>
Fri, 26 Jul 2013 11:26:28 +0000 (20:26 +0900)
committerChanho Park <chanho61.park@samsung.com>
Tue, 18 Nov 2014 02:42:22 +0000 (11:42 +0900)
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.

Signed-off-by: Cho KyongHo <pullip.cho@samsung.com>
drivers/iommu/exynos-iommu.c

index 233f382..e3be3e5 100644 (file)
@@ -1002,6 +1002,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;
        }
@@ -1010,6 +1011,7 @@ static size_t exynos_iommu_unmap(struct iommu_domain *domain,
        BUG_ON(size < LPAGE_SIZE);
 
        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;