diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2014-12-10 12:09:26 -0800 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2014-12-10 12:09:26 -0800 |
commit | 9d0cf6f56454c8a71e0aa2c3b9c6cbe470eb2788 (patch) | |
tree | e13191d786b097bc6d81e41b2ae7f66f8c1ccb74 /arch/x86/include/asm/mmu_context.h | |
parent | d82012695ef29e4e1c8153ccf43098ec8e50369e (diff) | |
parent | 3736708f034ae1e8c62789ed737e8b90d5b40210 (diff) |
Merge branch 'x86-asm-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
Pull x86 asm updates from Ingo Molnar:
"Misc changes:
- context switch micro-optimization
- debug printout micro-optimization
- comment enhancements and typo fix"
* 'x86-asm-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
x86: Replace seq_printf() with seq_puts()
x86/asm: Fix typo in arch/x86/kernel/asm_offset_64.c
sched/x86: Add a comment clarifying LDT context switching
sched/x86_64: Don't save flags on context switch
Diffstat (limited to 'arch/x86/include/asm/mmu_context.h')
-rw-r--r-- | arch/x86/include/asm/mmu_context.h | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/arch/x86/include/asm/mmu_context.h b/arch/x86/include/asm/mmu_context.h index be91d5736e08..40269a2bf6f9 100644 --- a/arch/x86/include/asm/mmu_context.h +++ b/arch/x86/include/asm/mmu_context.h @@ -52,7 +52,16 @@ static inline void switch_mm(struct mm_struct *prev, struct mm_struct *next, /* Stop flush ipis for the previous mm */ cpumask_clear_cpu(cpu, mm_cpumask(prev)); - /* Load the LDT, if the LDT is different: */ + /* + * Load the LDT, if the LDT is different. + * + * It's possible leave_mm(prev) has been called. If so, + * then prev->context.ldt could be out of sync with the + * LDT descriptor or the LDT register. This can only happen + * if prev->context.ldt is non-null, since we never free + * an LDT. But LDTs can't be shared across mms, so + * prev->context.ldt won't be equal to next->context.ldt. + */ if (unlikely(prev->context.ldt != next->context.ldt)) load_LDT_nolock(&next->context); } |