drm/i915/gt: Avoid using the GPU before initialisation
Mark the GT as wedged so that we are not tempted to use it prior to initialisation. Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> Cc: Andi Shyti <andi.shyti@intel.com> Reviewed-by: Matthew Auld <matthew.auld@intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/20191229183153.3719869-3-chris@chris-wilson.co.uk
This commit is contained in:
parent
7b02b23e5d
commit
45b152f752
@ -123,16 +123,16 @@ static bool switch_to_kernel_context(struct intel_engine_cs *engine)
|
||||
unsigned long flags;
|
||||
bool result = true;
|
||||
|
||||
/* GPU is pointing to the void, as good as in the kernel context. */
|
||||
if (intel_gt_is_wedged(engine->gt))
|
||||
return true;
|
||||
|
||||
GEM_BUG_ON(!intel_context_is_barrier(ce));
|
||||
|
||||
/* Already inside the kernel context, safe to power down. */
|
||||
if (engine->wakeref_serial == engine->serial)
|
||||
return true;
|
||||
|
||||
/* GPU is pointing to the void, as good as in the kernel context. */
|
||||
if (intel_gt_is_wedged(engine->gt))
|
||||
return true;
|
||||
|
||||
/*
|
||||
* Note, we do this without taking the timeline->mutex. We cannot
|
||||
* as we may be called while retiring the kernel context and so
|
||||
|
@ -179,7 +179,7 @@ int intel_gt_resume(struct intel_gt *gt)
|
||||
enum intel_engine_id id;
|
||||
int err;
|
||||
|
||||
err = intel_gt_terminally_wedged(gt);
|
||||
err = intel_gt_has_init_error(gt);
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
@ -196,6 +196,10 @@ int intel_gt_resume(struct intel_gt *gt)
|
||||
intel_uncore_forcewake_get(gt->uncore, FORCEWAKE_ALL);
|
||||
intel_rc6_sanitize(>->rc6);
|
||||
gt_sanitize(gt, true);
|
||||
if (intel_gt_is_wedged(gt)) {
|
||||
err = -EIO;
|
||||
goto out_fw;
|
||||
}
|
||||
|
||||
/* Only when the HW is re-initialised, can we replay the requests */
|
||||
err = intel_gt_init_hw(gt);
|
||||
|
@ -1353,6 +1353,9 @@ void intel_gt_init_reset(struct intel_gt *gt)
|
||||
init_waitqueue_head(>->reset.queue);
|
||||
mutex_init(>->reset.mutex);
|
||||
init_srcu_struct(>->reset.backoff_srcu);
|
||||
|
||||
/* no GPU until we are ready! */
|
||||
__set_bit(I915_WEDGED, >->reset.flags);
|
||||
}
|
||||
|
||||
void intel_gt_fini_reset(struct intel_gt *gt)
|
||||
|
@ -184,6 +184,7 @@ struct drm_i915_private *mock_gem_device(void)
|
||||
if (mock_engine_init(i915->engine[RCS0]))
|
||||
goto err_context;
|
||||
|
||||
__clear_bit(I915_WEDGED, &i915->gt.reset.flags);
|
||||
intel_engines_driver_register(i915);
|
||||
|
||||
return i915;
|
||||
|
Loading…
x
Reference in New Issue
Block a user