ARC: [mm] Aliasing VIPT dcache support 2/4
This is the meat of the series which prevents any dcache alias creation
by always keeping the U and K mapping of a page congruent.
If a mapping already exists, and other tries to access the page, prev
one is flushed to physical page (wback+inv)
Essentially flush_dcache_page()/copy_user_highpage() create K-mapping
of a page, but try to defer flushing, unless U-mapping exist.
When page is actually mapped to userspace, update_mmu_cache() flushes
the K-mapping (in certain cases this can be optimised out)
Additonally flush_cache_mm(), flush_cache_range(), flush_cache_page()
handle the puring of stale userspace mappings on exit/munmap...
flush_anon_page() handles the existing U-mapping for anon page before
kernel reads it via the GUP path.
Note that while not complete, this is enough to boot a simple
dynamically linked Busybox based rootfs
Signed-off-by:
Vineet Gupta <vgupta@synopsys.com>
Showing
- arch/arc/Kconfig 4 additions, 0 deletionsarch/arc/Kconfig
- arch/arc/include/asm/cacheflush.h 45 additions, 8 deletionsarch/arc/include/asm/cacheflush.h
- arch/arc/include/asm/page.h 15 additions, 1 deletionarch/arc/include/asm/page.h
- arch/arc/include/asm/tlb.h 9 additions, 2 deletionsarch/arc/include/asm/tlb.h
- arch/arc/mm/cache_arc700.c 129 additions, 5 deletionsarch/arc/mm/cache_arc700.c
- arch/arc/mm/tlb.c 21 additions, 6 deletionsarch/arc/mm/tlb.c