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-sh | |
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-sh')
-rw-r--r-- | include/asm-sh/cpu-sh2/cacheflush.h | 2 | ||||
-rw-r--r-- | include/asm-sh/cpu-sh3/cacheflush.h | 3 | ||||
-rw-r--r-- | include/asm-sh/cpu-sh4/cacheflush.h | 1 |
3 files changed, 6 insertions, 0 deletions
diff --git a/include/asm-sh/cpu-sh2/cacheflush.h b/include/asm-sh/cpu-sh2/cacheflush.h index f556fa80ea9..2979efb26de 100644 --- a/include/asm-sh/cpu-sh2/cacheflush.h +++ b/include/asm-sh/cpu-sh2/cacheflush.h | |||
@@ -15,6 +15,7 @@ | |||
15 | * | 15 | * |
16 | * - flush_cache_all() flushes entire cache | 16 | * - flush_cache_all() flushes entire cache |
17 | * - flush_cache_mm(mm) flushes the specified mm context's cache lines | 17 | * - flush_cache_mm(mm) flushes the specified mm context's cache lines |
18 | * - flush_cache_dup mm(mm) handles cache flushing when forking | ||
18 | * - flush_cache_page(mm, vmaddr, pfn) flushes a single page | 19 | * - flush_cache_page(mm, vmaddr, pfn) flushes a single page |
19 | * - flush_cache_range(vma, start, end) flushes a range of pages | 20 | * - flush_cache_range(vma, start, end) flushes a range of pages |
20 | * | 21 | * |
@@ -27,6 +28,7 @@ | |||
27 | */ | 28 | */ |
28 | #define flush_cache_all() do { } while (0) | 29 | #define flush_cache_all() do { } while (0) |
29 | #define flush_cache_mm(mm) do { } while (0) | 30 | #define flush_cache_mm(mm) do { } while (0) |
31 | #define flush_cache_dup_mm(mm) do { } while (0) | ||
30 | #define flush_cache_range(vma, start, end) do { } while (0) | 32 | #define flush_cache_range(vma, start, end) do { } while (0) |
31 | #define flush_cache_page(vma, vmaddr, pfn) do { } while (0) | 33 | #define flush_cache_page(vma, vmaddr, pfn) do { } while (0) |
32 | #define flush_dcache_page(page) do { } while (0) | 34 | #define flush_dcache_page(page) do { } while (0) |
diff --git a/include/asm-sh/cpu-sh3/cacheflush.h b/include/asm-sh/cpu-sh3/cacheflush.h index 03fde97a7fd..f70d8ef76a1 100644 --- a/include/asm-sh/cpu-sh3/cacheflush.h +++ b/include/asm-sh/cpu-sh3/cacheflush.h | |||
@@ -15,6 +15,7 @@ | |||
15 | * | 15 | * |
16 | * - flush_cache_all() flushes entire cache | 16 | * - flush_cache_all() flushes entire cache |
17 | * - flush_cache_mm(mm) flushes the specified mm context's cache lines | 17 | * - flush_cache_mm(mm) flushes the specified mm context's cache lines |
18 | * - flush_cache_dup mm(mm) handles cache flushing when forking | ||
18 | * - flush_cache_page(mm, vmaddr, pfn) flushes a single page | 19 | * - flush_cache_page(mm, vmaddr, pfn) flushes a single page |
19 | * - flush_cache_range(vma, start, end) flushes a range of pages | 20 | * - flush_cache_range(vma, start, end) flushes a range of pages |
20 | * | 21 | * |
@@ -39,6 +40,7 @@ | |||
39 | 40 | ||
40 | void flush_cache_all(void); | 41 | void flush_cache_all(void); |
41 | void flush_cache_mm(struct mm_struct *mm); | 42 | void flush_cache_mm(struct mm_struct *mm); |
43 | #define flush_cache_dup_mm(mm) flush_cache_mm(mm) | ||
42 | void flush_cache_range(struct vm_area_struct *vma, unsigned long start, | 44 | void flush_cache_range(struct vm_area_struct *vma, unsigned long start, |
43 | unsigned long end); | 45 | unsigned long end); |
44 | void flush_cache_page(struct vm_area_struct *vma, unsigned long addr, unsigned long pfn); | 46 | void flush_cache_page(struct vm_area_struct *vma, unsigned long addr, unsigned long pfn); |
@@ -48,6 +50,7 @@ void flush_icache_page(struct vm_area_struct *vma, struct page *page); | |||
48 | #else | 50 | #else |
49 | #define flush_cache_all() do { } while (0) | 51 | #define flush_cache_all() do { } while (0) |
50 | #define flush_cache_mm(mm) do { } while (0) | 52 | #define flush_cache_mm(mm) do { } while (0) |
53 | #define flush_cache_dup_mm(mm) do { } while (0) | ||
51 | #define flush_cache_range(vma, start, end) do { } while (0) | 54 | #define flush_cache_range(vma, start, end) do { } while (0) |
52 | #define flush_cache_page(vma, vmaddr, pfn) do { } while (0) | 55 | #define flush_cache_page(vma, vmaddr, pfn) do { } while (0) |
53 | #define flush_dcache_page(page) do { } while (0) | 56 | #define flush_dcache_page(page) do { } while (0) |
diff --git a/include/asm-sh/cpu-sh4/cacheflush.h b/include/asm-sh/cpu-sh4/cacheflush.h index 515fd574267..b01a10f3122 100644 --- a/include/asm-sh/cpu-sh4/cacheflush.h +++ b/include/asm-sh/cpu-sh4/cacheflush.h | |||
@@ -18,6 +18,7 @@ | |||
18 | */ | 18 | */ |
19 | void flush_cache_all(void); | 19 | void flush_cache_all(void); |
20 | void flush_cache_mm(struct mm_struct *mm); | 20 | void flush_cache_mm(struct mm_struct *mm); |
21 | #define flush_cache_dup_mm(mm) flush_cache_mm(mm) | ||
21 | void flush_cache_range(struct vm_area_struct *vma, unsigned long start, | 22 | void flush_cache_range(struct vm_area_struct *vma, unsigned long start, |
22 | unsigned long end); | 23 | unsigned long end); |
23 | void flush_cache_page(struct vm_area_struct *vma, unsigned long addr, | 24 | void flush_cache_page(struct vm_area_struct *vma, unsigned long addr, |