• Chris Wilson's avatar
    drm/i915: Return immediately if trylock fails for direct-reclaim · d25f71a1
    Chris Wilson authored
    Ignore trying to shrink from i915 if we fail to acquire the struct_mutex
    in the shrinker while performing direct-reclaim. The trade-off being
    (much) lower latency for non-i915 clients at an increased risk of being
    unable to obtain a page from direct-reclaim without hitting the
    oom-notifier. The proviso being that we still keep trying to hard
    obtain the lock for kswapd so that we can reap under heavy memory
    pressure.
    
    v2: Taint all mutexes taken within the shrinker with the struct_mutex
    subclass as an early warning system, and drop I915_SHRINK_ACTIVE from
    vmap to reduce the number of dangerous paths. We also have to drop
    I915_SHRINK_ACTIVE from oom-notifier to be able to make the same claim
    that ACTIVE is only used from outside context, which fits in with a
    longer strategy of avoiding stalls due to scanning active during
    shrinking.
    
    The danger in using the subclass struct_mutex is that we declare
    ourselves more knowledgable than lockdep and deprive ourselves of
    automatic coverage. Instead, we require ourselves to mark up any mutex
    taken inside the shrinker in order to detect lock-inversion, and if we
    miss any we are doomed to a deadlock at the worst possible moment.
    Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
    Cc: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
    Reviewed-by: default avatarTvrtko Ursulin <tvrtko.ursulin@intel.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20190107115509.12523-1-chris@chris-wilson.co.uk
    d25f71a1
i915_gem_shrinker.c 16.9 KB