iris: Mark render batches as non-recoverable.
authorKenneth Graunke <kenneth@whitecape.org>
Wed, 8 May 2019 06:03:46 +0000 (23:03 -0700)
committerKenneth Graunke <kenneth@whitecape.org>
Thu, 9 May 2019 23:49:07 +0000 (16:49 -0700)
commitc3701e90707805d622cf51a85b02c53b141f945c
tree937ea2e6e7c55c134c7d94fa46b4e623bda92588
parent9faf218b8cdda81b5813e935d5ba6e0d57706a03
iris: Mark render batches as non-recoverable.

Adapted from Chris Wilson's patch.  The comment is largely his.

Currently, when iris hangs the GPU, it will continue sending batches
which incrementally update the state, assuming it's preserved across
batches.  However, the kernel's GPU reset support reinitializes the
guilty context to the default GPU state (reasonably not wanting to
trust the current state).  This ends up resetting critical things
like STATE_BASE_ADDRESS, causing memory accesses in all subsequent
batches to be garbage, and almost certainly result in more hangs
until we're banned or we kill the machine.

We now ask the kernel to ban our render context immediately, so we
notice we've gone off the rails as fast as possible.  Eventually, we'll
attempt to recover and continue.  For now, we just avoid torching the
GPU over and over.
src/gallium/drivers/iris/iris_bufmgr.c