diff options
author | Jeremy Fitzhardinge <jeremy@goop.org> | 2007-05-02 13:27:14 -0400 |
---|---|---|
committer | Andi Kleen <andi@basil.nowhere.org> | 2007-05-02 13:27:14 -0400 |
commit | d6dd61c831226f9cd7750885da04d360d6455101 (patch) | |
tree | 30f84a429821d207f7de5dd6225d3d9515042c0a /mm/mmap.c | |
parent | 5311ab62cdc7788784971ed816ce85e926f3e994 (diff) |
[PATCH] x86: PARAVIRT: add hooks to intercept mm creation and destruction
Add hooks to allow a paravirt implementation to track the lifetime of
an mm. Paravirtualization requires three hooks, but only two are
needed in common code. They are:
arch_dup_mmap, which is called when a new mmap is created at fork
arch_exit_mmap, which is called when the last process reference to an
mm is dropped, which typically happens on exit and exec.
The third hook is activate_mm, which is called from the arch-specific
activate_mm() macro/function, and so doesn't need stub versions for
other architectures. It's called when an mm is first used.
Signed-off-by: Jeremy Fitzhardinge <jeremy@xensource.com>
Signed-off-by: Andi Kleen <ak@suse.de>
Cc: linux-arch@vger.kernel.org
Cc: James Bottomley <James.Bottomley@SteelEye.com>
Acked-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'mm/mmap.c')
-rw-r--r-- | mm/mmap.c | 4 |
1 files changed, 4 insertions, 0 deletions
@@ -29,6 +29,7 @@ | |||
29 | #include <asm/uaccess.h> | 29 | #include <asm/uaccess.h> |
30 | #include <asm/cacheflush.h> | 30 | #include <asm/cacheflush.h> |
31 | #include <asm/tlb.h> | 31 | #include <asm/tlb.h> |
32 | #include <asm/mmu_context.h> | ||
32 | 33 | ||
33 | #ifndef arch_mmap_check | 34 | #ifndef arch_mmap_check |
34 | #define arch_mmap_check(addr, len, flags) (0) | 35 | #define arch_mmap_check(addr, len, flags) (0) |
@@ -1979,6 +1980,9 @@ void exit_mmap(struct mm_struct *mm) | |||
1979 | unsigned long nr_accounted = 0; | 1980 | unsigned long nr_accounted = 0; |
1980 | unsigned long end; | 1981 | unsigned long end; |
1981 | 1982 | ||
1983 | /* mm's last user has gone, and its about to be pulled down */ | ||
1984 | arch_exit_mmap(mm); | ||
1985 | |||
1982 | lru_add_drain(); | 1986 | lru_add_drain(); |
1983 | flush_cache_mm(mm); | 1987 | flush_cache_mm(mm); |
1984 | tlb = tlb_gather_mmu(mm, 1); | 1988 | tlb = tlb_gather_mmu(mm, 1); |