Skip to content
  • Andy Lutomirski's avatar
    x86/ldt: Simplify the LDT switching logic · 73534258
    Andy Lutomirski authored
    
    
    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: default avatarAndy Lutomirski <luto@kernel.org>
    Reviewed-by: default avatarThomas Gleixner <tglx@linutronix.de>
    Reviewed-by: default avatarBorislav Petkov <bp@suse.de>
    Acked-by: default avatarRik 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.org
    
    
    Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
    73534258