• Dave Hansen's avatar
    x86/mpx: Do not count MPX VMAs as neighbors when unmapping · bea03c50
    Dave Hansen authored
    The comment pretty much says it all.
    
    I wrote a test program that does lots of random allocations
    and forces bounds tables to be created.  It came up with a
    layout like this:
    
      ....   | BOUNDS DIRECTORY ENTRY COVERS |  ....
             |    BOUNDS TABLE COVERS        |
    |  BOUNDS TABLE |  REAL ALLOC | BOUNDS TABLE |
    
    Unmapping "REAL ALLOC" should have been able to free the
    bounds table "covering" the "REAL ALLOC" because it was the
    last real user.  But, the neighboring VMA bounds tables were
    found, considered as real neighbors, and we declined to free
    the bounds table covering the area.
    
    Doing this over and over left a small but significant number
    of these orphans.  Handling them is fairly straighforward.
    All we have to do is walk the VMAs and skip all of the MPX
    ones when looking for neighbors.
    Signed-off-by: default avatarDave Hansen <dave.hansen@linux.intel.com>
    Reviewed-by: default avatarThomas Gleixner <tglx@linutronix.de>
    Cc: Andrew Morton <akpm@linux-foundation.org>
    Cc: Dave Hansen <dave@sr71.net>
    Cc: H. Peter Anvin <hpa@zytor.com>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Link: http://lkml.kernel.org/r/20150607183706.A6BD90BF@viggo.jf.intel.comSigned-off-by: default avatarIngo Molnar <mingo@kernel.org>
    bea03c50
mpx.c 28.3 KB