diff options
author | Kumar Gala <galak@kernel.crashing.org> | 2009-07-30 00:04:25 -0400 |
---|---|---|
committer | Kumar Gala <galak@kernel.crashing.org> | 2009-07-30 00:05:43 -0400 |
commit | 5156ddce6c0a152ee7ccab2c976c6a8abc8a49b5 (patch) | |
tree | 0782ea70dc80dd28d5081d5f53c28979ad6b022b /arch/powerpc | |
parent | 4733fd328f14280900435d9dbae1487d110a4d56 (diff) |
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>
Diffstat (limited to 'arch/powerpc')
-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) | |||
217 | id = steal_context_smp(id); | 217 | id = steal_context_smp(id); |
218 | if (id == MMU_NO_CONTEXT) | 218 | if (id == MMU_NO_CONTEXT) |
219 | goto again; | 219 | goto again; |
220 | goto stolen; | ||
220 | } | 221 | } |
221 | #endif /* CONFIG_SMP */ | 222 | #endif /* CONFIG_SMP */ |
222 | id = steal_context_up(id); | 223 | id = steal_context_up(id); |