Quoting [email protected] (2017-08-28 20:25:30)
> From: Jeff McGee <[email protected]>
>
> If someone else is resetting the engine we should clear our own bit as
> part of skipping that engine. Otherwise we will later believe that it
> has not been reset successfully and then trigger full gpu reset. If the
> other guy's reset actually fails, he will trigger the full gpu reset.
The reason we did continue on to the global reset was to serialise
i915_handle_error() with the other thread. Not a huge issue, but a
reasonable property to keep -- and we definitely want a to explain why
only one reset at a time is important.
bool intel_engine_lock_reset() {
if (!test_and_set_bit(I915_RESET_ENGINE + engine->id,
&engine->i915->gpu_error.flags))
return true;
intel_engine_wait_for_reset(engine);
return false; /* somebody else beat us to the reset */
}
void intel_engine_wait_for_reset() {
while (test_and_set_bit(I915_RESET_ENGINE + engine->id,
&engine->i915->gpu_error.flags))
wait_on_bit(&engine->i915->gpu_error.flags, I915_RESET_ENGINE +
engine->id,
TASK_UNINTERRUPTIBLE);
}
It can also be used by selftests/intel_hangcheck.c, so let's refactor
before we have 3 copies.
-Chris
_______________________________________________
Intel-gfx mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/intel-gfx