• Chris Wilson's avatar
    drm/i915: Enable i915_gem_wait_for_idle() without holding struct_mutex · dcff85c8
    Chris Wilson authored
    The principal motivation for this was to try and eliminate the
    struct_mutex from i915_gem_suspend - but we still need to hold the mutex
    current for the i915_gem_context_lost(). (The issue there is that there
    may be an indirect lockdep cycle between cpu_hotplug (i.e. suspend) and
    struct_mutex via the stop_machine().) For the moment, enabling last
    request tracking for the engine, allows us to do busyness checking and
    waiting without requiring the struct_mutex - which is useful in its own
    right.
    
    As a side-effect of having a robust means for tracking engine busyness,
    we can replace our other busyness heuristic, that of comparing against
    the last submitted seqno. For paranoid reasons, we have a semi-ordered
    check of that seqno inside the hangchecker, which we can now improve to
    an ordered check of the engine's busyness (removing a locked xchg in the
    process).
    
    v2: Pass along "bool interruptible" as being unlocked we cannot rely on
    i915->mm.interruptible being stable or even under our control.
    v3: Replace check Ironlake i915_gpu_busy() with the common precalculated value
    Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
    Reviewed-by: default avatarJoonas Lahtinen <joonas.lahtinen@linux.intel.com>
    Link: http://patchwork.freedesktop.org/patch/msgid/1470388464-28458-6-git-send-email-chris@chris-wilson.co.uk
    dcff85c8
i915_drv.h 117 KB