• A
    x86/ldt: Simplify the LDT switching logic · 73534258
    Andy Lutomirski 提交于
    Originally, Linux reloaded the LDT whenever the prev mm or the next
    mm had an LDT. It was changed in 2002 in:
    
      0bbed3beb4f2 ("[PATCH] Thread-Local Storage (TLS) support")
    
    (commit from the historical tree), like this:
    
    -		/* load_LDT, if either the previous or next thread
    -		 * has a non-default LDT.
    +		/*
    +		 * load the LDT, if the LDT is different:
    		 */
    -		if (next->context.size+prev->context.size)
    +		if (unlikely(prev->context.ldt != next->context.ldt))
    			load_LDT(&next->context);
    
    The current code is unlikely to avoid any LDT reloads, since different
    mms won't share an LDT.
    
    When we redo lazy mode to stop flush IPIs without switching to
    init_mm, though, the current logic would become incorrect: it will
    be possible to have real_prev == next but nonetheless have a stale
    LDT descriptor.
    
    Simplify the code to update LDTR if either the previous or the next
    mm has an LDT, i.e. effectively restore the historical logic..
    While we're at it, clean up the code by moving all the ifdeffery to
    a header where it belongs.
    Signed-off-by: NAndy Lutomirski <luto@kernel.org>
    Reviewed-by: NThomas Gleixner <tglx@linutronix.de>
    Reviewed-by: NBorislav Petkov <bp@suse.de>
    Acked-by: NRik van Riel <riel@redhat.com>
    Cc: Andrew Morton <akpm@linux-foundation.org>
    Cc: Arjan van de Ven <arjan@linux.intel.com>
    Cc: Borislav Petkov <bp@alien8.de>
    Cc: Brian Gerst <brgerst@gmail.com>
    Cc: Dave Hansen <dave.hansen@intel.com>
    Cc: Denys Vlasenko <dvlasenk@redhat.com>
    Cc: H. Peter Anvin <hpa@zytor.com>
    Cc: Josh Poimboeuf <jpoimboe@redhat.com>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Mel Gorman <mgorman@suse.de>
    Cc: Nadav Amit <nadav.amit@gmail.com>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: linux-mm@kvack.org
    Link: http://lkml.kernel.org/r/2a859ac01245f9594c58f9d0a8b2ed8a7cd2507e.1498022414.git.luto@kernel.orgSigned-off-by: NIngo Molnar <mingo@kernel.org>
    73534258
mmu_context.h 8.2 KB