• D
    drm: add unified vma offset manager · fe3078fa
    David Herrmann 提交于
    If we want to map GPU memory into user-space, we need to linearize the
    addresses to not confuse mm-core. Currently, GEM and TTM both implement
    their own offset-managers to assign a pgoff to each object for user-space
    CPU access. GEM uses a hash-table, TTM uses an rbtree.
    
    This patch provides a unified implementation that can be used to replace
    both. TTM allows partial mmaps with a given offset, so we cannot use
    hashtables as the start address may not be known at mmap time. Hence, we
    use the rbtree-implementation of TTM.
    
    We could easily update drm_mm to use an rbtree instead of a linked list
    for it's object list and thus drop the rbtree from the vma-manager.
    However, this would slow down drm_mm object allocation for all other
    use-cases (rbtree insertion) and add another 4-8 bytes to each mm node.
    Hence, use the separate tree but allow for later migration.
    
    This is a rewrite of the 2012-proposal by David Airlie <airlied@linux.ie>
    
    v2:
     - fix Docbook integration
     - drop drm_mm_node_linked() and use drm_mm_node_allocated()
     - remove unjustified likely/unlikely usage (but keep for rbtree paths)
     - remove BUG_ON() as drm_mm already does that
     - clarify page-based vs. byte-based addresses
     - use drm_vma_node_reset() for initialization, too
    v4:
     - allow external locking via drm_vma_offset_un/lock_lookup()
     - add locked lookup helper drm_vma_offset_lookup_locked()
    v5:
     - fix drm_vma_offset_lookup() to correctly validate range-mismatches
       (fix (offset > start + pages))
     - fix drm_vma_offset_exact_lookup() to actually do what it says
     - remove redundant vm_pages member (add drm_vma_node_size() helper)
     - remove unneeded goto
     - fix documentation
    Signed-off-by: NDavid Herrmann <dh.herrmann@gmail.com>
    Reviewed-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
    Signed-off-by: NDave Airlie <airlied@gmail.com>
    fe3078fa
Makefile 1.9 KB