Patch "x86/mm: Improve switch_mm() barrier comments" has been added to the 4.3-stable tree
Subsystems (2)
This is a note to let you know that I've just added the patch titled
x86/mm: Improve switch_mm() barrier comments
to the 4.3-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
x86-mm-improve-switch_mm-barrier-comments.patch
and it can be found in the queue-4.3 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
4eaffdd5a5fe6ff9f95e1ab4de1ac904d5e0fa8bMon Sep 17 00:00:00 2001
From: Andy Lutomirski <[email protected]>
Date: Tue, 12 Jan 2016 12:47:40 -0800
Subject: x86/mm: Improve switch_mm() barrier comments
From: Andy Lutomirski <[email protected]>
commit 4eaffdd5a5fe6ff9f95e1ab4de1ac904d5e0fa8b upstream.
My previous comments were still a bit confusing and there was a typo. Fix it up.
--- arch/x86/include/asm/mmu_context.h | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-)
arch/x86/include/asm/mmu_context.h +8 -7
@@ -132,14 +132,16 @@ static inline void switch_mm(struct mm_s* be sent, and CPU 0's TLB will contain a stale entry.) * * The bad outcome can occur if either CPU's load is -* reordered before that CPU's store, so both CPUs much +* reordered before that CPU's store, so both CPUs must * execute full barriers to prevent this from happening. * * Thus, switch_mm needs a full barrier between the * store to mm_cpumask and any operation that could load -* from next->pgd. This barrier synchronizes with -* remote TLB flushers. Fortunately, load_cr3 is -* serializing and thus acts as a full barrier. +* from next->pgd. TLB fills are special and can happen +* due to instruction fetches or for no reason at all, +* and neither LOCK nor MFENCE orders them. +* Fortunately, load_cr3() is serializing and gives the +* ordering guarantee we need. * */ load_cr3 (next->pgd);
@@ -188,9 +190,8 @@ static inline void switch_mm(struct mm_s* tlb flush IPI delivery. We must reload CR3 * to make sure to use no freed page tables. * -* As above, this is a barrier that forces -* TLB repopulation to be ordered after the -* store to mm_cpumask. +* As above, load_cr3() is serializing and orders TLB +* fills with respect to the mm_cpumask write. */ load_cr3 (next->pgd);trace_tlb_flush (TLB_FLUSH_ON_TASK_SWITCH ,TLB_FLUSH_ALL );
Patches currently in stable-queue which might be from [email protected] are
queue-4.3/x86-mm-add-barriers-and-document-switch_mm-vs-flush-synchronization.patch queue-4.3/x86-mm-improve-switch_mm-barrier-comments.patch