mirror of https://gitee.com/openkylin/linux.git
msm: iommu: Don't flush page tables if no devices attached
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>
This commit is contained in:
parent
516cbc793e
commit
f6f41eb9cc
|
@ -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) {
|
||||
|
|
Loading…
Reference in New Issue