• V
    x86, pat: Add rbtree to do quick lookup in memtype tracking · 335ef896
    Venkatesh Pallipadi 提交于
    PAT memtype tracking uses a linear link list to keep track of IO
    (non-RAM) regions and their memtypes. The code used a last_accessed
    pointer as a cache to speedup the lookup. As per discussions with
    H. Peter Anvin a while back, having a rbtree here will avoid bad
    performances in pathological cases where we may end up with huge
    linked list. This may not add any noticable performance speedup
    in normal case as the number of entires in PAT memtype list tend
    to be ~20-30 range. The patch removes the "cached_entry" logic
    as with rbtree we have more generic way of speeding up the lookup.
    
    With this patch, we use rbtree to do the quick lookup. We still use
    linked list as the memtype range tracked can be of different sizes
    and can overlap in different ways. We also keep track of usage counts
    with linked list.
    
    Example:
    Multiple ioremaps with different sizes
    uncached-minus @ 0xfffff00000-0xfffff04000
    uncached-minus @ 0xfffff02000-0xfffff03000
    
    And one userlevel mmap and the thread forks a new process
    uncached-minus @ 0xbf453000-0xbf454000
    uncached-minus @ 0xbf453000-0xbf454000
    Signed-off-by: NVenkatesh Pallipadi <venkatesh.pallipadi@intel.com>
    Signed-off-by: NSuresh Siddha <suresh.b.siddha@intel.com>
    Signed-off-by: NH. Peter Anvin <hpa@zytor.com>
    335ef896
pat.c 23.6 KB