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 /Documentation | |
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 'Documentation')
-rw-r--r-- | Documentation/cachetlb.txt | 23 |
1 files changed, 17 insertions, 6 deletions
diff --git a/Documentation/cachetlb.txt b/Documentation/cachetlb.txt index 53245c429f7d..73e794f0ff09 100644 --- a/Documentation/cachetlb.txt +++ b/Documentation/cachetlb.txt | |||
@@ -179,10 +179,21 @@ Here are the routines, one by one: | |||
179 | lines associated with 'mm'. | 179 | lines associated with 'mm'. |
180 | 180 | ||
181 | This interface is used to handle whole address space | 181 | This interface is used to handle whole address space |
182 | page table operations such as what happens during | 182 | page table operations such as what happens during exit and exec. |
183 | fork, exit, and exec. | 183 | |
184 | 2) void flush_cache_dup_mm(struct mm_struct *mm) | ||
185 | |||
186 | This interface flushes an entire user address space from | ||
187 | the caches. That is, after running, there will be no cache | ||
188 | lines associated with 'mm'. | ||
189 | |||
190 | This interface is used to handle whole address space | ||
191 | page table operations such as what happens during fork. | ||
192 | |||
193 | This option is separate from flush_cache_mm to allow some | ||
194 | optimizations for VIPT caches. | ||
184 | 195 | ||
185 | 2) void flush_cache_range(struct vm_area_struct *vma, | 196 | 3) void flush_cache_range(struct vm_area_struct *vma, |
186 | unsigned long start, unsigned long end) | 197 | unsigned long start, unsigned long end) |
187 | 198 | ||
188 | Here we are flushing a specific range of (user) virtual | 199 | Here we are flushing a specific range of (user) virtual |
@@ -199,7 +210,7 @@ Here are the routines, one by one: | |||
199 | call flush_cache_page (see below) for each entry which may be | 210 | call flush_cache_page (see below) for each entry which may be |
200 | modified. | 211 | modified. |
201 | 212 | ||
202 | 3) void flush_cache_page(struct vm_area_struct *vma, unsigned long addr, unsigned long pfn) | 213 | 4) void flush_cache_page(struct vm_area_struct *vma, unsigned long addr, unsigned long pfn) |
203 | 214 | ||
204 | This time we need to remove a PAGE_SIZE sized range | 215 | This time we need to remove a PAGE_SIZE sized range |
205 | from the cache. The 'vma' is the backing structure used by | 216 | from the cache. The 'vma' is the backing structure used by |
@@ -220,7 +231,7 @@ Here are the routines, one by one: | |||
220 | 231 | ||
221 | This is used primarily during fault processing. | 232 | This is used primarily during fault processing. |
222 | 233 | ||
223 | 4) void flush_cache_kmaps(void) | 234 | 5) void flush_cache_kmaps(void) |
224 | 235 | ||
225 | This routine need only be implemented if the platform utilizes | 236 | This routine need only be implemented if the platform utilizes |
226 | highmem. It will be called right before all of the kmaps | 237 | highmem. It will be called right before all of the kmaps |
@@ -232,7 +243,7 @@ Here are the routines, one by one: | |||
232 | 243 | ||
233 | This routing should be implemented in asm/highmem.h | 244 | This routing should be implemented in asm/highmem.h |
234 | 245 | ||
235 | 5) void flush_cache_vmap(unsigned long start, unsigned long end) | 246 | 6) void flush_cache_vmap(unsigned long start, unsigned long end) |
236 | void flush_cache_vunmap(unsigned long start, unsigned long end) | 247 | void flush_cache_vunmap(unsigned long start, unsigned long end) |
237 | 248 | ||
238 | Here in these two interfaces we are flushing a specific range | 249 | Here in these two interfaces we are flushing a specific range |