• Chris Wilson's avatar
    drm/i915/execlists: Flush tasklet directly from reset-finish · 9e4fa012
    Chris Wilson authored
    On finishing the reset, the intention is to restart the GPU before we
    relinquish the forcewake taken to handle the reset - the goal being the
    GPU reloads a context before it is allowed to sleep. For this purpose,
    we used tasklet_flush() which although it accomplished the goal of
    restarting the GPU, carried with it a sting in its tail: it cleared the
    TASKLET_STATE_SCHED bit. This meant that if another CPU queued a new
    request to this engine, we would clear the flag and later attempt to
    requeue the tasklet on the local CPU, breaking the per-cpu softirq
    lists.
    
    Remove the dangerous tasklet_kill() and just run the tasklet func
    directly as we know it is safe to do so (the tasklets are internally
    locked to allow mixed usage from direct submission).
    Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
    Cc: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
    Cc: Mika Kuoppala <mika.kuoppala@intel.com>
    Cc: Michel Thierry <michel.thierry@intel.com>
    Cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
    Reviewed-by: default avatarMika Kuoppala <mika.kuoppala@linux.intel.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20180828152702.27536-1-chris@chris-wilson.co.uk
    9e4fa012
intel_lrc.c 84.7 KB