mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-08-30 12:49:36 +00:00
ARM: 5794/1: Flush the D-cache during copy_user_highpage()
The I and D caches for copy-on-write pages on processors with write-allocate caches become incoherent causing problems on application relying on CoW for text pages (dynamic linker relocating symbols in a text page). This patch flushes the D-cache for such pages. Cc: Nicolas Pitre <nico@fluxnic.net> Signed-off-by: Catalin Marinas <catalin.marinas@arm.com> Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
This commit is contained in:
parent
f91fb05d82
commit
115b22474e
1 changed files with 8 additions and 0 deletions
|
@ -41,6 +41,14 @@ static void v6_copy_user_highpage_nonaliasing(struct page *to,
|
|||
kfrom = kmap_atomic(from, KM_USER0);
|
||||
kto = kmap_atomic(to, KM_USER1);
|
||||
copy_page(kto, kfrom);
|
||||
#ifdef CONFIG_HIGHMEM
|
||||
/*
|
||||
* kmap_atomic() doesn't set the page virtual address, and
|
||||
* kunmap_atomic() takes care of cache flushing already.
|
||||
*/
|
||||
if (page_address(to) != NULL)
|
||||
#endif
|
||||
__cpuc_flush_dcache_page(kto);
|
||||
kunmap_atomic(kto, KM_USER1);
|
||||
kunmap_atomic(kfrom, KM_USER0);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue