• C
    drm/i915: Prevent recursion by retiring requests when the ring is full · 1f70999f
    Chris Wilson 提交于
    As the VM do not track activity of objects and instead use a large
    hammer to forcibly idle and evict all of their associated objects when
    one is released, it is possible for that to cause a recursion when we
    need to wait for free space on a ring and call retire requests.
    (intel_ring_begin -> intel_ring_wait_request ->
    i915_gem_retire_requests_ring -> i915_gem_context_free ->
    i915_gem_evict_vm -> i915_gpu_idle -> intel_ring_begin etc)
    
    In order to remove the requirement for calling retire-requests from
    intel_ring_wait_request, we have to inline a couple of steps from
    retiring requests, notably we have to record the position of the request
    we wait for and use that to update the available ring space.
    Signed-off-by: NChris Wilson <chris@chris-wilson.co.uk>
    Reviewed-by: NVille Syrjälä <ville.syrjala@linux.intel.com>
    Signed-off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
    1f70999f
intel_ringbuffer.c 57.4 KB