lkml.org 
[lkml]   [2020]   [Nov]   [9]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.9 008/133] drm/i915: Cancel outstanding work after disabling heartbeats on an engine
    Date
    From: Chris Wilson <chris@chris-wilson.co.uk>

    commit 7d442ea7c504adcc9798b07cd8f6a0d235fca2da upstream.

    We only allow persistent requests to remain on the GPU past the closure
    of their containing context (and process) so long as they are continuously
    checked for hangs or allow other requests to preempt them, as we need to
    ensure forward progress of the system. If we allow persistent contexts
    to remain on the system after the the hangcheck mechanism is disabled,
    the system may grind to a halt. On disabling the mechanism, we sent a
    pulse along the engine to remove all executing contexts from the engine
    which would check for hung contexts -- but we did not prevent those
    contexts from being resubmitted if they survived the final hangcheck.

    Fixes: 9a40bddd47ca ("drm/i915/gt: Expose heartbeat interval via sysfs")
    Testcase: igt/gem_ctx_persistence/heartbeat-stop
    Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
    Cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
    Cc: <stable@vger.kernel.org> # v5.7+
    Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
    Acked-by: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20200928221510.26044-1-chris@chris-wilson.co.uk
    (cherry picked from commit 7a991cd3e3da9a56d5616b62d425db000a3242f2)
    Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    drivers/gpu/drm/i915/gt/intel_engine.h | 9 +++++++++
    drivers/gpu/drm/i915/i915_request.c | 5 +++++
    2 files changed, 14 insertions(+)

    --- a/drivers/gpu/drm/i915/gt/intel_engine.h
    +++ b/drivers/gpu/drm/i915/gt/intel_engine.h
    @@ -357,4 +357,13 @@ intel_engine_has_preempt_reset(const str
    return intel_engine_has_preemption(engine);
    }

    +static inline bool
    +intel_engine_has_heartbeat(const struct intel_engine_cs *engine)
    +{
    + if (!IS_ACTIVE(CONFIG_DRM_I915_HEARTBEAT_INTERVAL))
    + return false;
    +
    + return READ_ONCE(engine->props.heartbeat_interval_ms);
    +}
    +
    #endif /* _INTEL_RINGBUFFER_H_ */
    --- a/drivers/gpu/drm/i915/i915_request.c
    +++ b/drivers/gpu/drm/i915/i915_request.c
    @@ -549,8 +549,13 @@ bool __i915_request_submit(struct i915_r
    if (i915_request_completed(request))
    goto xfer;

    + if (unlikely(intel_context_is_closed(request->context) &&
    + !intel_engine_has_heartbeat(engine)))
    + intel_context_set_banned(request->context);
    +
    if (unlikely(intel_context_is_banned(request->context)))
    i915_request_set_error_once(request, -EIO);
    +
    if (unlikely(fatal_error(request->fence.error)))
    __i915_request_skip(request);


    \
     
     \ /
      Last update: 2020-11-09 14:17    [W:4.269 / U:0.012 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site