[PATCH v2] CHROMIUM: iommu: rockchip: Make sure that page table state is coherent
tfiga at chromium.org
Fri May 8 01:22:10 PDT 2015
On Thu, Apr 23, 2015 at 6:09 PM, Daniel Kurtz <djkurtz at chromium.org> wrote:
> On Mon, Apr 20, 2015 at 7:43 PM, Tomasz Figa <tfiga at chromium.org> wrote:
>> To flush created mappings, current mapping code relies on the fact that
>> during unmap the driver zaps every IOVA being unmapped and that it is
>> enough to zap a single IOVA of page table to remove the entire page
>> table from IOMMU cache. Based on these assumptions the driver was made to
>> simply zap the first IOVA of the mapping being created. This is enough
>> to invalidate first page table, which could be shared with another
>> mapping (and thus could be already present in IOMMU cache), but
>> unfortunately it does not do anything about the last page table that
>> could be shared with other mappings as well.
>> Moreover, the flushing is performed before page table contents are
>> actually modified, so there is a race between the CPU updating the page
>> tables and hardware that could be possibly running at the same time and
>> triggering IOMMU look-ups, which could bring back the page tables back
>> to the cache.
>> To fix both issues, this patch makes the mapping code zap first and last
>> (if they are different) IOVAs of new mapping after the page table is
>> Signed-off-by: Tomasz Figa <tfiga at chromium.org>
>> Reviewed-by: Daniel Kurtz <djkurtz at chromium.org>
>> Tested-by: Heiko Stuebner <heiko at sntech.de>
> You probably want to remove the "CHROMIUM: " label in the subject.
Sorry, I removed gerrit tags, but hurrying up too much, I missed the
label. I see, though, that Joerg has applied this patch already with
this fixed up. Thanks.
More information about the Linux-rockchip