• Chris Wilson's avatar
    drm/i915/gt: Adapt engine_park synchronisation rules for engine_retire · 88a4655e
    Chris Wilson authored
    In the next patch, we will introduce a new asynchronous retirement
    worker, fed by execlists CS events. Here we may queue a retirement as
    soon as a request is submitted to HW (and completes instantly), and we
    also want to process that retirement as early as possible and cannot
    afford to postpone (as there may not be another opportunity to retire it
    for a few seconds). To allow the new async retirer to run in parallel
    with our submission, pull the __i915_request_queue (that passes the
    request to HW) inside the timelines spinlock so that the retirement
    cannot release the timeline before we have completed the submission.
    
    v2: Actually to play nicely with engine_retire, we have to raise the
    timeline.active_lock before releasing the HW. intel_gt_retire_requsts()
    is still serialised by the outer lock so they cannot see this
    intermediate state, and engine_retire is serialised by HW submission.
    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/20191125105858.1718307-2-chris@chris-wilson.co.uk
    88a4655e
intel_engine_pm.c 6.85 KB