]> git.baikalelectronics.ru Git - kernel.git/commit
drm/i915: Prevent recursion by retiring requests when the ring is full
authorChris Wilson <chris@chris-wilson.co.uk>
Mon, 27 Jan 2014 22:43:07 +0000 (22:43 +0000)
committerDaniel Vetter <daniel.vetter@ffwll.ch>
Thu, 6 Feb 2014 16:43:13 +0000 (17:43 +0100)
commita2a28364264ba5bf0e98a72a2de2af39821f6cf8
tree180e47976121d75fb9a919b39cea60bd444cf377
parentd058bea85287544571a3b40b62d8e605263be128
drm/i915: Prevent recursion by retiring requests when the ring is full

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: Chris Wilson <chris@chris-wilson.co.uk>
Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
drivers/gpu/drm/i915/intel_ringbuffer.c