From: Anton Blanchard <anton@samba.org>

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;

_