• John Harrison's avatar
    drm/i915/guc: Don't deadlock busyness stats vs reset · 178b8a36
    John Harrison authored
    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: default avatarJohn Harrison <John.C.Harrison@Intel.com>
    Reviewed-by: default avatarUmesh Nerlige Ramappa <umesh.nerlige.ramappa@intel.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20221102192109.2492625-3-John.C.Harrison@Intel.com
    178b8a36
intel_reset.c 39.5 KB