• Davidlohr Bueso's avatar
    x86/mm/pat: Convert the PAT tree to a generic interval tree · 8d04a5f9
    Davidlohr Bueso authored
    With some considerations, the custom pat_rbtree implementation can be
    simplified to use most of the generic interval_tree machinery:
    
     - The tree inorder traversal can slightly differ when there are key
       ('start') collisions in the tree due to one going left and another right.
       This, however, only affects the output of debugfs' pat_memtype_list file.
    
     - Generic interval trees are now fully closed [a, b], for which we need
       to adjust the last endpoint (ie: end - 1).
    
     - Erasing logic must remain untouched as well.
    
     - In order for the types to remain u64, the 'memtype_interval' calls are
       introduced, as opposed to simply using struct interval_tree.
    
    In addition, the PAT tree might potentially also benefit by the fast overlap
    detection for the insertion case when looking up the first overlapping node
    in the tree.
    
    No change in behavior is intended.
    
    Finally, I've tested this on various servers, via sanity warnings, running
    side by side with the current version and so far see no differences in the
    returned pointer node when doing memtype_rb_lowest_match() lookups.
    Signed-off-by: default avatarDavidlohr Bueso <dbueso@suse.de>
    Reviewed-by: default avatarThomas Gleixner <tglx@linutronix.de>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Borislav Petkov <bp@alien8.de>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Link: https://lkml.kernel.org/r/20191121011601.20611-2-dave@stgolabs.netSigned-off-by: default avatarIngo Molnar <mingo@kernel.org>
    8d04a5f9
pat_rbtree.c 4.67 KB