• Chris Wilson's avatar
    drm/i915: Stop listening to request resubmission from the signaler kthread · 776bc27f
    Chris Wilson authored
    The intent here was that we would be listening to
    i915_gem_request_unsubmit in order to cancel the signaler quickly and
    release the reference on the request. Cancelling the signaler is done
    directly via intel_engine_cancel_signaling (called from unsubmit), but
    that does not directly wake up the signaling thread, and neither does
    setting the request->global_seqno back to zero wake up listeners to the
    request->execute waitqueue. So the only time that listening to the
    request->execute waitqueue would wake up the signaling kthread would be
    on the request resubmission, during which time we would already receive
    wake ups from rejoining the global breadcrumbs wait rbtree.
    
    Trying to wake up to release the request remains an issue. If the
    signaling was cancelled and no other request required signaling, then it
    is possible for us to shutdown with the reference on the request still
    held. To ensure that we do not try to shutdown, leaking that request, we
    kick the signaling threads whenever we disarm the breadcrumbs, i.e. on
    parking the engine when idle.
    
    v2: We do need to be sure to release the last reference on stopping the
    kthread; asserting that it has been dropped already is insufficient.
    
    Fixes: d6a2289d ("drm/i915: Remove the preempted request from the execution queue")
    Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
    Cc: Tvrtko Ursulin <tvrtko.ursulin@linux.intel.com>
    Cc: Michał Winiarski <michal.winiarski@intel.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20171208121033.5236-1-chris@chris-wilson.co.ukAcked-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
    Reviewed-by: default avatarTvrtko Ursulin <tvrtko.ursulin@linux.intel.com>
    776bc27f
intel_breadcrumbs.c 26.6 KB