drm/i915: Suppress busy status for engines if wedged
If the driver is wedged, HW state may be very inconsistent and report that it is still busy, even though we have stopped using it. This can lead to a double *ERROR* rather than a graceful cleanup after wedging. Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> Reviewed-by: Joonas Lahtinen <joonas.lahtinen@linux.intel.com> Link: http://patchwork.freedesktop.org/patch/msgid/20170330145041.9005-2-chris@chris-wilson.co.uk
This commit is contained in:
parent
2c170af76c
commit
8490ae207f
@ -3112,9 +3112,7 @@ i915_gem_idle_work_handler(struct work_struct *work)
|
||||
* Wait for last execlists context complete, but bail out in case a
|
||||
* new request is submitted.
|
||||
*/
|
||||
wait_for(READ_ONCE(dev_priv->gt.active_requests) ||
|
||||
intel_engines_are_idle(dev_priv),
|
||||
10);
|
||||
wait_for(intel_engines_are_idle(dev_priv), 10);
|
||||
if (READ_ONCE(dev_priv->gt.active_requests))
|
||||
return;
|
||||
|
||||
|
@ -1111,6 +1111,15 @@ bool intel_engines_are_idle(struct drm_i915_private *dev_priv)
|
||||
struct intel_engine_cs *engine;
|
||||
enum intel_engine_id id;
|
||||
|
||||
if (READ_ONCE(dev_priv->gt.active_requests))
|
||||
return false;
|
||||
|
||||
/* If the driver is wedged, HW state may be very inconsistent and
|
||||
* report that it is still busy, even though we have stopped using it.
|
||||
*/
|
||||
if (i915_terminally_wedged(&dev_priv->gpu_error))
|
||||
return true;
|
||||
|
||||
for_each_engine(engine, dev_priv, id) {
|
||||
if (!intel_engine_is_idle(engine))
|
||||
return false;
|
||||
|
Loading…
Reference in New Issue
Block a user