• Chris Wilson's avatar
    drm/i915: Be more careful to drop the GT wakeref · 4302055b
    Chris Wilson authored
    Since we can retire requests from multiple paths, we cannot assume that
    i915_gem_retire_requests() is the sole path on which we can transition
    to gt.active_requests == 0. A consequence of this is that we would skip
    the function if we had already retired all the requests and not
    scheduled the idle worker.
    
    This is fallout from changing the routine from considering active_engines
    (for which it was the only consumer) to active_requests.
    
    v2: Move kicking the idle working to i915_gem_request_retire() otherwise
    we could postpone the idle callback everytime we called retire_requests
    even though we did no work.
    v3: We only need to move the idle work kicking!
    v4: Drop the BUG_ON(!awake) as we may be called from the shrinker in the
    middle of constructing a request before we have marked the device awake.
    v5: Add a BUG_ON() for active_requests underflow upon retirement (Joonas)
    
    Fixes: 28176ef4 ("drm/i915: Reserve space in the global seqno during request allocation")
    Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
    Cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
    Link: http://patchwork.freedesktop.org/patch/msgid/20161115164620.17185-1-chris@chris-wilson.co.ukReviewed-by: default avatarJoonas Lahtinen <joonas.lahtinen@linux.intel.com>
    4302055b
i915_gem_request.c 32.7 KB