• Dave Hansen's avatar
    x86, mpx: Fix potential performance issue on unmaps · c922228e
    Dave Hansen authored
    The 3.19 merge window saw some TLB modifications merged which caused a
    performance regression. They were fixed in commit 045bbb9fa.
    
    Once that fix was applied, I also noticed that there was a small
    but intermittent regression still present.  It was not present
    consistently enough to bisect reliably, but I'm fairly confident
    that it came from (my own) MPX patches.  The source was reading
    a relatively unused field in the mm_struct via arch_unmap.
    
    I also noted that this code was in the main instruction flow of
    do_munmap() and probably had more icache impact than we want.
    
    This patch does two things:
    1. Adds a static (via Kconfig) and dynamic (via cpuid) check
       for MPX with cpu_feature_enabled().  This keeps us from
       reading that cacheline in the mm and trades it for a check
       of the global CPUID variables at least on CPUs without MPX.
    2. Adds an unlikely() to ensure that the MPX call ends up out
       of the main instruction flow in do_munmap().  I've added
       a detailed comment about why this was done and why we want
       it even on systems where MPX is present.
    Signed-off-by: default avatarDave Hansen <dave.hansen@linux.intel.com>
    Cc: luto@amacapital.net
    Cc: Dave Hansen <dave@sr71.net>
    Link: http://lkml.kernel.org/r/20150108223021.AEEAB987@viggo.jf.intel.comSigned-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
    c922228e
mmu_context.h 4.13 KB