• Oscar Mateo's avatar
    drm/i915/bdw: Emission of requests with logical rings · 48e29f55
    Oscar Mateo authored
    On a previous iteration of this patch, I created an Execlists
    version of __i915_add_request and asbtracted it away as a
    vfunc. Daniel Vetter wondered then why that was needed:
    
    "with the clean split in command submission I expect every
    function to know wether it'll submit to an lrc (everything in
    intel_lrc.c) or wether it'll submit to a legacy ring (existing
    code), so I don't see a need for an add_request vfunc."
    
    The honest, hairy truth is that this patch is the glue keeping
    the whole logical ring puzzle together:
    
    - i915_add_request is used by intel_ring_idle, which in turn is
      used by i915_gpu_idle, which in turn is used in several places
      inside the eviction and gtt codes.
    - Also, it is used by i915_gem_check_olr, which is littered all
      over i915_gem.c
    - ...
    
    If I were to duplicate all the code that directly or indirectly
    uses __i915_add_request, I'll end up creating a separate driver.
    
    To show the differences between the existing legacy version and
    the new Execlists one, this time I have special-cased
    __i915_add_request instead of adding an add_request vfunc. I
    hope this helps to untangle this Gordian knot.
    Signed-off-by: default avatarOscar Mateo <oscar.mateo@intel.com>
    Reviewed-by: default avatarDamien Lespiau <damien.lespiau@intel.com>
    [danvet: Adjust to ringbuf->FIXME_lrc_ctx per the discussion with
    Thomas Daniel.]
    Signed-off-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
    48e29f55
intel_lrc.c 31.5 KB