From: Linus Torvalds Date: Wed, 23 May 2012 18:06:59 +0000 (-0700) Subject: Merge branch 'x86-mm-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git... X-Git-Tag: firefly_0821_release~3680^2~2802 X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=02171b4a7c5b555d08c3321332e0c45776518276;p=firefly-linux-kernel-4.4.55.git Merge branch 'x86-mm-for-linus' of git://git./linux/kernel/git/tip/tip Pull x86 mm changes from Ingo Molnar: "This tree includes a micro-optimization that avoids cr3 switches during idling; it fixes corner cases and there's also small cleanups" Fix up trivial context conflict with the percpu_xx -> this_cpu_xx changes. * 'x86-mm-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: x86-64: Fix accounting in kernel_physical_mapping_init() x86/tlb: Clean up and unify TLB_FLUSH_ALL definition x86: Drop obsolete ARCH_BOOTMEM support x86, tlb: Switch cr3 in leave_mm() only when needed x86/mm: Fix the size calculation of mapping tables --- 02171b4a7c5b555d08c3321332e0c45776518276 diff --cc arch/x86/mm/tlb.c index 3804471db104,125bcad1b757..5e57e113b72c --- a/arch/x86/mm/tlb.c +++ b/arch/x86/mm/tlb.c @@@ -61,11 -61,13 +61,13 @@@ static DEFINE_PER_CPU_READ_MOSTLY(int, */ void leave_mm(int cpu) { - struct mm_struct *active_mm = percpu_read(cpu_tlbstate.active_mm); - if (percpu_read(cpu_tlbstate.state) == TLBSTATE_OK) ++ struct mm_struct *active_mm = this_cpu_read(cpu_tlbstate.active_mm); + if (this_cpu_read(cpu_tlbstate.state) == TLBSTATE_OK) BUG(); - cpumask_clear_cpu(cpu, - mm_cpumask(this_cpu_read(cpu_tlbstate.active_mm))); - load_cr3(swapper_pg_dir); + if (cpumask_test_cpu(cpu, mm_cpumask(active_mm))) { + cpumask_clear_cpu(cpu, mm_cpumask(active_mm)); + load_cr3(swapper_pg_dir); + } } EXPORT_SYMBOL_GPL(leave_mm);