aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Documentation/cachetlb.txt9
-rw-r--r--include/linux/highmem.h6
-rw-r--r--mm/memory.c2
3 files changed, 17 insertions, 0 deletions
diff --git a/Documentation/cachetlb.txt b/Documentation/cachetlb.txt
index 4ae418889b88..1f312a9893d9 100644
--- a/Documentation/cachetlb.txt
+++ b/Documentation/cachetlb.txt
@@ -362,6 +362,15 @@ maps this page at its virtual address.
362 likely that you will need to flush the instruction cache 362 likely that you will need to flush the instruction cache
363 for copy_to_user_page(). 363 for copy_to_user_page().
364 364
365 void flush_anon_page(struct page *page, unsigned long vmaddr)
366 When the kernel needs to access the contents of an anonymous
367 page, it calls this function (currently only
368 get_user_pages()). Note: flush_dcache_page() deliberately
369 doesn't work for an anonymous page. The default
370 implementation is a nop (and should remain so for all coherent
371 architectures). For incoherent architectures, it should flush
372 the cache of the page at vmaddr in the current user process.
373
365 void flush_icache_range(unsigned long start, unsigned long end) 374 void flush_icache_range(unsigned long start, unsigned long end)
366 When the kernel stores into addresses that it will execute 375 When the kernel stores into addresses that it will execute
367 out of (eg when loading modules), this function is called. 376 out of (eg when loading modules), this function is called.
diff --git a/include/linux/highmem.h b/include/linux/highmem.h
index 6bece9280eb7..7bd2593dbef9 100644
--- a/include/linux/highmem.h
+++ b/include/linux/highmem.h
@@ -7,6 +7,12 @@
7 7
8#include <asm/cacheflush.h> 8#include <asm/cacheflush.h>
9 9
10#ifndef ARCH_HAS_FLUSH_ANON_PAGE
11static inline void flush_anon_page(struct page *page, unsigned long vmaddr)
12{
13}
14#endif
15
10#ifdef CONFIG_HIGHMEM 16#ifdef CONFIG_HIGHMEM
11 17
12#include <asm/highmem.h> 18#include <asm/highmem.h>
diff --git a/mm/memory.c b/mm/memory.c
index e347e106ca3a..67686048f094 100644
--- a/mm/memory.c
+++ b/mm/memory.c
@@ -1071,6 +1071,8 @@ int get_user_pages(struct task_struct *tsk, struct mm_struct *mm,
1071 } 1071 }
1072 if (pages) { 1072 if (pages) {
1073 pages[i] = page; 1073 pages[i] = page;
1074
1075 flush_anon_page(page, start);
1074 flush_dcache_page(page); 1076 flush_dcache_page(page);
1075 } 1077 }
1076 if (vmas) 1078 if (vmas)