Re: [PATCH v2 0/6] MediaTek IOMMU improve tlb flush performance in map/unmap

Will Deacon
2020-11-25T12:27:43Z

On Thu, Nov 19, 2020 at 02:18:30PM +0800, Yong Wu wrote:
> This patchset is to improve tlb flushing performance in iommu_map/unmap
> for MediaTek IOMMU.
>
> For iommu_map, currently MediaTek IOMMU use IO_PGTABLE_QUIRK_TLBI_ON_MAP
> to do tlb_flush for each a memory chunk. this is so unnecessary. we could
> improve it by tlb flushing one time at the end of iommu_map.
>
> For iommu_unmap, currently we have already improve this performance by
> gather. But the current gather should take care its granule size. if the
> granule size is different, it will do tlb flush and gather again. Our HW
> don't care about granule size. thus I add a flag(granule_ignore) for this
> case.
>
> After this patchset, we could achieve only tlb flushing once in iommu_map
> and iommu_unmap.
>
> Regardless of sg, for each a segment, I did a simple test:
>
> size = 20 * SZ_1M;
> /* the worst case, all are 4k mapping. */
> ret = iommu_map(domain, 0x5bb02000, 0x123f1000, size, IOMMU_READ);
> iommu_unmap(domain, 0x5bb02000, size);
>
> This is the comparing time(unit is us):
> original-time after-improve
> map-20M 59943 2347
> unmap-20M 264 36
>
> This patchset also flush tlb once in the iommu_map_sg case.
>
> patch [1/6][2/6][3/6] are for map while the others are for unmap.
>
> change note:
> v2: Refactor all the code.
> base on v5.10-rc1.

Robin -- please can you take a look at this series? I'm not sure I'll
have time to get to it at the moment and you understand how this stuff
is supposed to work.

Cheers,

Will