From: Benjamin LaHaise Date: Tue, 12 Jul 2005 20:58:22 +0000 (-0700) Subject: [PATCH] uml: tlb flushing fix X-Git-Tag: firefly_0821_release~42812 X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=c40504e87e28c52258458a53fefcd63f58e11a42;p=firefly-linux-kernel-4.4.55.git [PATCH] uml: tlb flushing fix This patch fixes a fairly serious tlb flushing bug that makes aio use under uml very unreliable -- SEGVs, Oops and panic()s occur as a result of stale tlb entires being used by uml when aio switches mms due to the fact that uml does not implement the activate_mm() hook. This patch introduces a simple but correct approach (read: hammer) for implementing activate_mm() in uml by doing a force_flush_all() if the new mm is different from old. With this patch in place, uml is able to succeed at the aio test case that was randomly faulting for me before. Cc: Jeff Dike Cc: Signed-off-by: Andrew Morton Signed-off-by: Linus Torvalds --- diff --git a/include/asm-um/mmu_context.h b/include/asm-um/mmu_context.h index 7529c9c853dd..095bb627b96a 100644 --- a/include/asm-um/mmu_context.h +++ b/include/asm-um/mmu_context.h @@ -16,8 +16,12 @@ #define deactivate_mm(tsk,mm) do { } while (0) +extern void force_flush_all(void); + static inline void activate_mm(struct mm_struct *old, struct mm_struct *new) { + if (old != new) + force_flush_all(); } static inline void switch_mm(struct mm_struct *prev, struct mm_struct *next,