• Chris Wilson's avatar
    drm/i915/gt: Undo forced context restores after trivial preemptions · 64402570
    Chris Wilson authored
    We may try to preempt the currently executing request, only to find that
    after unravelling all the dependencies that the original executing
    context is still the earliest in the topological sort and re-submitted
    back to HW (if we do detect some change in the ELSP that requires
    re-submission). However, due to the way we check for wrap-around during
    the unravelling, we mark any context that has been submitted just once
    (i.e. with the rq->wa_tail set, but the ring->tail earlier) as
    potentially wrapping and requiring a forced restore on resubmission.
    This was expected to be not a problem, as it was anticipated that most
    unwinding for preemption would result in a context switch and the few
    that did not would be lost in the noise. It did not take long for
    someone to find one particular workload where the cost of those extra
    context restores was measurable.
    
    However, since we know the wa_tail is of fixed size, and we know that a
    request must be larger than the wa_tail itself, we can safely maintain
    the check for request wrapping and check against a slightly future point
    in the ring that includes an expected wa_tail. (That is if the
    ring->tail is already set to rq->wa_tail, including another 8 bytes in
    the check does not invalidate the incremental wrap detection.)
    
    Fixes: 8ab3a381 ("drm/i915/gt: Incrementally check for rewinding")
    Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
    Cc: Mika Kuoppala <mika.kuoppala@linux.intel.com>
    Cc: Bruce Chang <yu.bruce.chang@intel.com>
    Cc: Ramalingam C <ramalingam.c@intel.com>
    Cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
    Cc: <stable@vger.kernel.org> # v5.4+
    Reviewed-by: default avatarMika Kuoppala <mika.kuoppala@linux.intel.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20201002083425.4605-1-chris@chris-wilson.co.uk
    (cherry picked from commit bb65548e3c6e299175a9e8c3e24b2b9577656a5d)
    Signed-off-by: default avatarRodrigo Vivi <rodrigo.vivi@intel.com>
    64402570
intel_lrc.c 164 KB