diff options
author | Ralf Baechle <ralf@linux-mips.org> | 2006-12-12 12:14:57 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@woody.osdl.org> | 2006-12-13 12:27:08 -0500 |
commit | ec8c0446b6e2b67b5c8813eb517f4bf00efa99a9 (patch) | |
tree | e7c12d7c486c958a5e38888b41cfcd6a558f1aff /include/asm-mips/cacheflush.h | |
parent | bcd022801ee514e28c32837f0b3ce18c775f1a7b (diff) |
[PATCH] Optimize D-cache alias handling on fork
Virtually index, physically tagged cache architectures can get away
without cache flushing when forking. This patch adds a new cache
flushing function flush_cache_dup_mm(struct mm_struct *) which for the
moment I've implemented to do the same thing on all architectures
except on MIPS where it's a no-op.
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'include/asm-mips/cacheflush.h')
-rw-r--r-- | include/asm-mips/cacheflush.h | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/include/asm-mips/cacheflush.h b/include/asm-mips/cacheflush.h index e3c9925876a3..0ddada3bb0b6 100644 --- a/include/asm-mips/cacheflush.h +++ b/include/asm-mips/cacheflush.h | |||
@@ -17,6 +17,7 @@ | |||
17 | * | 17 | * |
18 | * - flush_cache_all() flushes entire cache | 18 | * - flush_cache_all() flushes entire cache |
19 | * - flush_cache_mm(mm) flushes the specified mm context's cache lines | 19 | * - flush_cache_mm(mm) flushes the specified mm context's cache lines |
20 | * - flush_cache_dup mm(mm) handles cache flushing when forking | ||
20 | * - flush_cache_page(mm, vmaddr, pfn) flushes a single page | 21 | * - flush_cache_page(mm, vmaddr, pfn) flushes a single page |
21 | * - flush_cache_range(vma, start, end) flushes a range of pages | 22 | * - flush_cache_range(vma, start, end) flushes a range of pages |
22 | * - flush_icache_range(start, end) flush a range of instructions | 23 | * - flush_icache_range(start, end) flush a range of instructions |
@@ -31,6 +32,7 @@ | |||
31 | extern void (*flush_cache_all)(void); | 32 | extern void (*flush_cache_all)(void); |
32 | extern void (*__flush_cache_all)(void); | 33 | extern void (*__flush_cache_all)(void); |
33 | extern void (*flush_cache_mm)(struct mm_struct *mm); | 34 | extern void (*flush_cache_mm)(struct mm_struct *mm); |
35 | #define flush_cache_dup_mm(mm) do { (void) (mm); } while (0) | ||
34 | extern void (*flush_cache_range)(struct vm_area_struct *vma, | 36 | extern void (*flush_cache_range)(struct vm_area_struct *vma, |
35 | unsigned long start, unsigned long end); | 37 | unsigned long start, unsigned long end); |
36 | extern void (*flush_cache_page)(struct vm_area_struct *vma, unsigned long page, unsigned long pfn); | 38 | extern void (*flush_cache_page)(struct vm_area_struct *vma, unsigned long page, unsigned long pfn); |