• Andy Lutomirski's avatar
    x86/mm: Track the TLB's tlb_gen and update the flushing algorithm · b0579ade
    Andy Lutomirski authored
    There are two kernel features that would benefit from tracking
    how up-to-date each CPU's TLB is in the case where IPIs aren't keeping
    it up to date in real time:
    
     - Lazy mm switching currently works by switching to init_mm when
       it would otherwise flush.  This is wasteful: there isn't fundamentally
       any need to update CR3 at all when going lazy or when returning from
       lazy mode, nor is there any need to receive flush IPIs at all.  Instead,
       we should just stop trying to keep the TLB coherent when we go lazy and,
       when unlazying, check whether we missed any flushes.
    
     - PCID will let us keep recent user contexts alive in the TLB.  If we
       start doing this, we need a way to decide whether those contexts are
       up to date.
    
    On some paravirt systems, remote TLBs can be flushed without IPIs.
    This won't update the target CPUs' tlb_gens, which may cause
    unnecessary local flushes later on.  We can address this if it becomes
    a problem by carefully updating the target CPU's tlb_gen directly.
    
    By itself, this patch is a very minor optimization that avoids
    unnecessary flushes when multiple TLB flushes targetting the same CPU
    race.  The complexity in this patch would not be worth it on its own,
    but it will enable improved lazy TLB tracking and PCID.
    Signed-off-by: default avatarAndy Lutomirski <luto@kernel.org>
    Reviewed-by: default avatarNadav Amit <nadav.amit@gmail.com>
    Reviewed-by: default avatarThomas Gleixner <tglx@linutronix.de>
    Cc: Andrew Morton <akpm@linux-foundation.org>
    Cc: Arjan van de Ven <arjan@linux.intel.com>
    Cc: Borislav Petkov <bp@alien8.de>
    Cc: Dave Hansen <dave.hansen@intel.com>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Mel Gorman <mgorman@suse.de>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Rik van Riel <riel@redhat.com>
    Cc: linux-mm@kvack.org
    Link: http://lkml.kernel.org/r/1210fb244bc9cbe7677f7f0b72db4d359675f24b.1498751203.git.luto@kernel.orgSigned-off-by: default avatarIngo Molnar <mingo@kernel.org>
    b0579ade
tlbflush.h 8.78 KB