drm/i915/guc: Don't deadlock busyness stats vs reset
authorJohn Harrison <John.C.Harrison@Intel.com>
Wed, 2 Nov 2022 19:21:09 +0000 (12:21 -0700)
committerJohn Harrison <John.C.Harrison@Intel.com>
Fri, 4 Nov 2022 20:45:45 +0000 (13:45 -0700)
commit178b8a3668bd63b40303d9dcb17ad58cf4b44007
treea3c3ad103a844b76cdb562063cd39c2192f7d630
parentde51de9672a17e242ebe3727b5e6ec0f2b4c1ab4
drm/i915/guc: Don't deadlock busyness stats vs reset

The engine busyness stats has a worker function to do things like
64bit extend the 32bit hardware counters. The GuC's reset prepare
function flushes out this worker function to ensure no corruption
happens during the reset. Unforunately, the worker function has an
infinite wait for active resets to finish before doing its work. Thus
a deadlock would occur if the worker function had actually started
just as the reset starts.

The function being used to lock the reset-in-progress mutex is called
intel_gt_reset_trylock(). However, as noted it does not follow
standard 'trylock' conventions and exit if already locked. So rename
the current _trylock function to intel_gt_reset_lock_interruptible(),
which is the behaviour it actually provides. In addition, add a new
implementation of _trylock and call that from the busyness stats
worker instead.

v2: Rename existing trylock to interruptible rather than trying to
preserve the existing (confusing) naming scheme (review comments from
Tvrtko).

Signed-off-by: John Harrison <John.C.Harrison@Intel.com>
Reviewed-by: Umesh Nerlige Ramappa <umesh.nerlige.ramappa@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20221102192109.2492625-3-John.C.Harrison@Intel.com
drivers/gpu/drm/i915/gem/i915_gem_mman.c
drivers/gpu/drm/i915/gt/intel_reset.c
drivers/gpu/drm/i915/gt/intel_reset.h
drivers/gpu/drm/i915/gt/uc/intel_guc_submission.c