diff options
author | Kumar Gala <galak@kernel.crashing.org> | 2009-07-29 23:04:25 -0500 |
---|---|---|
committer | Kumar Gala <galak@kernel.crashing.org> | 2009-07-29 23:05:43 -0500 |
commit | 5156ddce6c0a152ee7ccab2c976c6a8abc8a49b5 (patch) | |
tree | 0782ea70dc80dd28d5081d5f53c28979ad6b022b | |
parent | 4733fd328f14280900435d9dbae1487d110a4d56 (diff) | |
download | linux-5156ddce6c0a152ee7ccab2c976c6a8abc8a49b5.tar.gz linux-5156ddce6c0a152ee7ccab2c976c6a8abc8a49b5.tar.bz2 linux-5156ddce6c0a152ee7ccab2c976c6a8abc8a49b5.zip |
powerpc/mm: Fix SMP issue with MMU context handling code
In switch_mmu_context() if we call steal_context_smp() to get a context
to use we shouldn't fall through and than call steal_context_up(). Doing
so can be problematic in that the 'mm' that steal_context_up() ends up
using will not get marked dirty in the stale_map[] for other CPUs that
might have used that mm. Thus we could end up with stale TLB entries in
the other CPUs that can cause all kinda of havoc.
Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
-rw-r--r-- | arch/powerpc/mm/mmu_context_nohash.c | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/arch/powerpc/mm/mmu_context_nohash.c b/arch/powerpc/mm/mmu_context_nohash.c index 92a197117d5b..b1a727def15b 100644 --- a/arch/powerpc/mm/mmu_context_nohash.c +++ b/arch/powerpc/mm/mmu_context_nohash.c @@ -217,6 +217,7 @@ void switch_mmu_context(struct mm_struct *prev, struct mm_struct *next) id = steal_context_smp(id); if (id == MMU_NO_CONTEXT) goto again; + goto stolen; } #endif /* CONFIG_SMP */ id = steal_context_up(id); |