msm: iommu: Don't flush page tables if no devices attached
authorStepan Moskovchenko <stepanm@codeaurora.org>
Sat, 13 Nov 2010 03:29:54 +0000 (19:29 -0800)
committerDaniel Walker <dwalker@codeaurora.org>
Tue, 30 Nov 2010 22:04:21 +0000 (14:04 -0800)
Don't flush the page tables on an IOMMU domain if there are
no IOMMU devices attached to the domain. The act of
attaching to the domain will cause an implicit flush of
those areas if the page tables are configured to not be L2
cacheable.

Signed-off-by: Stepan Moskovchenko <stepanm@codeaurora.org>
Signed-off-by: Daniel Walker <dwalker@codeaurora.org>
arch/arm/mach-msm/iommu.c

index 134add789187ed399dc910e3414480c506419fa0..74f2157eba4e2d76d94a078ed084ac60ee2d61aa 100644 (file)
@@ -50,13 +50,16 @@ static void __flush_iotlb(struct iommu_domain *domain)
        unsigned long *fl_table = priv->pgtable;
        int i;
 
-       dmac_flush_range(fl_table, fl_table + SZ_16K);
+       if (!list_empty(&priv->list_attached)) {
+               dmac_flush_range(fl_table, fl_table + SZ_16K);
 
-       for (i = 0; i < NUM_FL_PTE; i++)
-               if ((fl_table[i] & 0x03) == FL_TYPE_TABLE) {
-                       void *sl_table = __va(fl_table[i] & FL_BASE_MASK);
-                       dmac_flush_range(sl_table, sl_table + SZ_4K);
-               }
+               for (i = 0; i < NUM_FL_PTE; i++)
+                       if ((fl_table[i] & 0x03) == FL_TYPE_TABLE) {
+                               void *sl_table = __va(fl_table[i] &
+                                                               FL_BASE_MASK);
+                               dmac_flush_range(sl_table, sl_table + SZ_4K);
+                       }
+       }
 #endif
 
        list_for_each_entry(ctx_drvdata, &priv->list_attached, attached_elm) {