• Ben Gamari's avatar
    drm/i915: Add hangcheck timer · f65d9421
    Ben Gamari authored
    We set a periodic timer to check on the GPU, resetting it every time a
    batch is completed. If the timer elapses, we check acthd. If acthd
    hasn't changed in two timer periods, we assume the chip is wedged.
    
    This is implemented in such a way that it leaves the option open to
    employ adaptive timer intervals in the future. One could wait until
    several timer periods have elapsed before declaring the chip dead. If
    the chip comes back after several periods but before the "dead"
    threshold, the timer interval or dead threshold could be raised.
    
    It is important to note that while checking for active requests, we need
    to account for the fact that requests are removed from the list (i.e.
    retired) in a deferred work queue handler. This means that merely
    checking for an empty request_list is insufficient; the list could be
    non-empty yet the GPU still idle, causing the hangcheck timer to
    incorrectly mark the GPU as wedged (it took me a while to figure that
    out---sigh...)
    Signed-off-by: default avatarBen Gamari <bgamari.foss@gmail.com>
    Signed-off-by: default avatarJesse Barnes <jbarnes@virtuousgeek.org>
    f65d9421
i915_dma.c 42.2 KB