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 134add7..74f2157 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) {