• Brad Volkin's avatar
    drm/i915: Implement a framework for batch buffer pools · 493018dc
    Brad Volkin authored
    This adds a small module for managing a pool of batch buffers.
    The only current use case is for the command parser, as described
    in the kerneldoc in the patch. The code is simple, but separating
    it out makes it easier to change the underlying algorithms and to
    extend to future use cases should they arise.
    
    The interface is simple: init to create an empty pool, fini to
    clean it up, get to obtain a new buffer. Note that all buffers are
    expected to be inactive before cleaning up the pool.
    
    Locking is currently based on the caller holding the struct_mutex.
    We already do that in the places where we will use the batch pool
    for the command parser.
    
    v2:
    - s/BUG_ON/WARN_ON/ for locking assertions
    - Remove the cap on pool size
    - Switch from alloc/free to init/fini
    
    v3:
    - Idiomatic looping structure in _fini
    - Correct handling of purged objects
    - Don't return a buffer that's too much larger than needed
    
    v4:
    - Rebased to latest -nightly
    
    v5:
    - Remove _put() function and clean up comments to match
    
    v6:
    - Move purged check inside the loop (danvet, from v4 1/7 feedback)
    
    v7:
    - Use single list instead of two. (Chris W)
    - s/active_list/cache_list
    - Squashed in debug patches (Chris W)
      drm/i915: Add a batch pool debugfs file
    
      It provides some useful information about the buffers in
      the global command parser batch pool.
    
      v2: rebase on global pool instead of per-ring pools
      v3: rebase
    
      drm/i915: Add batch pool details to i915_gem_objects debugfs
    
      To better account for the potentially large memory consumption
      of the batch pool.
    
    v8:
    - Keep cache in LRU order (danvet, from v6 1/5 feedback)
    
    Issue: VIZ-4719
    Signed-off-by: default avatarBrad Volkin <bradley.d.volkin@intel.com>
    Reviewed-By: default avatarJon Bloomfield <jon.bloomfield@intel.com>
    Signed-off-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
    493018dc
i915_gem_batch_pool.c 4.08 KB