From: Anton Blanchard When trawling though code I noticed something that could be dodgy, if cpu_vm_mask ever got out of sync all manner of weird things can happen. Im not sure if there is a bug here yet, youd have to fork (which zeros cpu_vm_mask) and somehow reuse the same mm (so the prev == next is true). Anyway heres the patch, Ill probably play it safe and merge it. --- 25-akpm/include/asm-ppc64/mmu_context.h | 2 ++ 1 files changed, 2 insertions(+) diff -puN include/asm-ppc64/mmu_context.h~ppc64-cpu_vm_mask-fix include/asm-ppc64/mmu_context.h --- 25/include/asm-ppc64/mmu_context.h~ppc64-cpu_vm_mask-fix Thu Feb 26 13:45:26 2004 +++ 25-akpm/include/asm-ppc64/mmu_context.h Thu Feb 26 13:45:26 2004 @@ -159,6 +159,8 @@ static inline void switch_mm(struct mm_s if (!cpu_isset(smp_processor_id(), next->cpu_vm_mask)) cpu_set(smp_processor_id(), next->cpu_vm_mask); + cpu_set(smp_processor_id(), next->cpu_vm_mask); + /* No need to flush userspace segments if the mm doesnt change */ if (prev == next) return; _