linux/arch/mips/mm
James Hogan b2a3c5be4d MIPS: c-r4k: Sync icache when it fills from dcache
It is still necessary to handle icache coherency in flush_cache_range()
and copy_to_user_page() when the icache fills from the dcache, even
though the dcache does not need to be written back. However when this
handling was added in commit 2eaa7ec286 ("[MIPS] Handle I-cache
coherency in flush_cache_range()"), it did not do any icache flushing
when it fills from dcache.

Therefore fix r4k_flush_cache_range() to run
local_r4k_flush_cache_range() without taking into account whether icache
fills from dcache, so that the icache coherency gets handled. Checks are
also added in local_r4k_flush_cache_range() so that the dcache blast
doesn't take place when icache fills from dcache.

A test to mmap a page PROT_READ|PROT_WRITE, modify code in it, and
mprotect it to VM_READ|VM_EXEC (similar to case described in above
commit) can hit this case quite easily to verify the fix.

A similar check was added in commit f8829caee3 ("[MIPS] Fix aliasing
bug in copy_to_user_page / copy_from_user_page"), so also fix
copy_to_user_page() similarly, to call flush_cache_page() without taking
into account whether icache fills from dcache, since flush_cache_page()
already takes that into account to avoid performing a dcache flush.

Signed-off-by: James Hogan <james.hogan@imgtec.com>
Cc: Leonid Yegoshin <leonid.yegoshin@imgtec.com>
Cc: Manuel Lauss <manuel.lauss@gmail.com>
Cc: linux-mips@linux-mips.org
Patchwork: https://patchwork.linux-mips.org/patch/12179/
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
2016-05-09 12:00:02 +02:00
..
c-octeon.c
c-r3k.c
c-r4k.c MIPS: c-r4k: Sync icache when it fills from dcache 2016-05-09 12:00:02 +02:00
c-tx39.c
cache.c mm: differentiate page_mapped() from page_mapcount() for compound pages 2016-01-15 17:56:32 -08:00
cerr-sb1.c
cex-gen.S
cex-oct.S
cex-sb1.S
dma-default.c MIPS: fix DMA contiguous allocation 2015-12-12 10:15:34 -08:00
extable.c
fault.c MIPS: Set trap_no field in thread_struct on exception. 2015-09-03 12:08:04 +02:00
gup.c Merge branch 'mm-pkeys-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip 2016-03-20 19:08:56 -07:00
highmem.c kmap_atomic_to_page() has no users, remove it 2015-11-09 15:11:24 -08:00
hugetlbpage.c mm/hugetlb: reduce arch dependent code about huge_pmd_unshare 2015-06-24 17:49:41 -07:00
init.c MIPS: c-r4k: Sync icache when it fills from dcache 2016-05-09 12:00:02 +02:00
ioremap.c
Makefile MIPS: Allow L2 prefetch to be configured via debugfs 2015-10-26 09:49:42 +01:00
mmap.c mm: ASLR: use get_random_long() 2016-02-27 10:28:52 -08:00
page-funcs.S
page.c
pgtable-32.c
pgtable-64.c mips, thp: remove infrastructure for handling splitting PMDs 2016-01-15 17:56:32 -08:00
sc-debugfs.c MIPS: Allow L2 prefetch to be configured via debugfs 2015-10-26 09:49:42 +01:00
sc-ip22.c MIPS: Fix misspellings in comments. 2016-04-03 12:32:09 +02:00
sc-mips.c MIPS: scache: Fix scache init with invalid line size. 2016-02-29 15:44:23 +01:00
sc-r5k.c
sc-rm7k.c
tlb-funcs.S
tlb-r3k.c MIPS: Refactor dumping of TLB registers for r3k/r4k 2015-09-03 12:07:45 +02:00
tlb-r4k.c MIPS: tlb-r4k: panic if the MMU doesn't support PAGE_SIZE 2016-04-03 10:39:26 +02:00
tlb-r8k.c
tlbex-fault.S
tlbex.c MIPS: Fix misspellings in comments. 2016-04-03 12:32:09 +02:00
uasm-micromips.c
uasm-mips.c
uasm.c