* [Intel-gfx] [PATCH 1/3] drm/i915/execlists: Take a reference while capturing the guilty request
@ 2020-01-22 11:29 Chris Wilson
2020-01-22 11:29 ` [Intel-gfx] [PATCH 2/3] drm/i915/execlists: Reclaim the hanging virtual request Chris Wilson
` (4 more replies)
0 siblings, 5 replies; 9+ messages in thread
From: Chris Wilson @ 2020-01-22 11:29 UTC (permalink / raw)
To: intel-gfx
Thanks to preempt-to-busy, we leave the request on the HW as we submit
the preemption request. This means that the request may complete at any
moment as we process HW events, and in particular the request may be
retired as we are planning to capture it for a preemption timeout.
Be more careful while obtaining the request to capture after a
preemption timeout, and check to see if it completed before we were able
to put it on the on-hold list. If we do see it did complete just before
we capture the request, proclaim the preemption-timeout a false positive
and pardon the reset as we should hit an arbitration point momentarily
and so be able to process the preemption.
Note that even after we move the request to be on hold it may be retired
(as the reset to stop the HW comes after), so we do require to hold our
own reference as we work on the request for capture (and all of the
peeking at state within the request needs to be carefully protected).
Fixes: 32ff621fd744 ("drm/i915/gt: Allow temporary suspension of inflight requests")
Closes: https://gitlab.freedesktop.org/drm/intel/issues/997
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
---
drivers/gpu/drm/i915/gt/intel_lrc.c | 39 +++++++++++++++++++++++------
1 file changed, 31 insertions(+), 8 deletions(-)
diff --git a/drivers/gpu/drm/i915/gt/intel_lrc.c b/drivers/gpu/drm/i915/gt/intel_lrc.c
index 3a30767ff0c4..59af136e1b1d 100644
--- a/drivers/gpu/drm/i915/gt/intel_lrc.c
+++ b/drivers/gpu/drm/i915/gt/intel_lrc.c
@@ -2393,11 +2393,16 @@ static void __execlists_hold(struct i915_request *rq)
} while (rq);
}
-static void execlists_hold(struct intel_engine_cs *engine,
+static bool execlists_hold(struct intel_engine_cs *engine,
struct i915_request *rq)
{
spin_lock_irq(&engine->active.lock);
+ if (!i915_request_is_ready(rq)) { /* no longer active */
+ rq = NULL;
+ goto unlock;
+ }
+
/*
* Transfer this request onto the hold queue to prevent it
* being resumbitted to HW (and potentially completed) before we have
@@ -2408,7 +2413,9 @@ static void execlists_hold(struct intel_engine_cs *engine,
GEM_BUG_ON(rq->engine != engine);
__execlists_hold(rq);
+unlock:
spin_unlock_irq(&engine->active.lock);
+ return rq;
}
static bool hold_request(const struct i915_request *rq)
@@ -2524,6 +2531,7 @@ static void execlists_capture_work(struct work_struct *work)
/* Return this request and all that depend upon it for signaling */
execlists_unhold(engine, cap->rq);
+ i915_request_put(cap->rq);
kfree(cap);
}
@@ -2560,12 +2568,12 @@ static struct execlists_capture *capture_regs(struct intel_engine_cs *engine)
return NULL;
}
-static void execlists_capture(struct intel_engine_cs *engine)
+static bool execlists_capture(struct intel_engine_cs *engine)
{
struct execlists_capture *cap;
if (!IS_ENABLED(CONFIG_DRM_I915_CAPTURE_ERROR))
- return;
+ return true;
/*
* We need to _quickly_ capture the engine state before we reset.
@@ -2574,13 +2582,17 @@ static void execlists_capture(struct intel_engine_cs *engine)
*/
cap = capture_regs(engine);
if (!cap)
- return;
+ return true;
cap->rq = execlists_active(&engine->execlists);
GEM_BUG_ON(!cap->rq);
+ rcu_read_lock();
cap->rq = active_request(cap->rq->context->timeline, cap->rq);
- GEM_BUG_ON(!cap->rq);
+ cap->rq = i915_request_get_rcu(cap->rq);
+ rcu_read_unlock();
+ if (!cap->rq)
+ goto err_free;
/*
* Remove the request from the execlists queue, and take ownership
@@ -2602,10 +2614,19 @@ static void execlists_capture(struct intel_engine_cs *engine)
* simply hold that request accountable for being non-preemptible
* long enough to force the reset.
*/
- execlists_hold(engine, cap->rq);
+ if (!execlists_hold(engine, cap->rq))
+ goto err_rq;
INIT_WORK(&cap->work, execlists_capture_work);
schedule_work(&cap->work);
+ return true;
+
+err_rq:
+ i915_request_put(cap->rq);
+err_free:
+ i915_gpu_coredump_put(cap->error);
+ kfree(cap);
+ return false;
}
static noinline void preempt_reset(struct intel_engine_cs *engine)
@@ -2627,8 +2648,10 @@ static noinline void preempt_reset(struct intel_engine_cs *engine)
jiffies_to_msecs(jiffies - engine->execlists.preempt.expires));
ring_set_paused(engine, 1); /* Freeze the current request in place */
- execlists_capture(engine);
- intel_engine_reset(engine, "preemption time out");
+ if (execlists_capture(engine))
+ intel_engine_reset(engine, "preemption time out");
+ else
+ ring_set_paused(engine, 0);
tasklet_enable(&engine->execlists.tasklet);
clear_and_wake_up_bit(bit, lock);
--
2.25.0
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply related [flat|nested] 9+ messages in thread* [Intel-gfx] [PATCH 2/3] drm/i915/execlists: Reclaim the hanging virtual request 2020-01-22 11:29 [Intel-gfx] [PATCH 1/3] drm/i915/execlists: Take a reference while capturing the guilty request Chris Wilson @ 2020-01-22 11:29 ` Chris Wilson 2020-01-22 13:38 ` Tvrtko Ursulin 2020-01-22 11:29 ` [Intel-gfx] [PATCH 3/3] drm/i915: Mark the removal of the i915_request from the sched.link Chris Wilson ` (3 subsequent siblings) 4 siblings, 1 reply; 9+ messages in thread From: Chris Wilson @ 2020-01-22 11:29 UTC (permalink / raw) To: intel-gfx If we encounter a hang on a virtual engine, as we process the hang the request may already have been moved back to the virtual engine (we are processing the hang on the physical engine). We need to reclaim the request from the virtual engine so that the locking is consistent and local to the real engine on which we will hold the request for error state capturing. v2: Pull the reclamation into execlists_hold() and assert that cannot be called from outside of the reset (i.e. with the tasklet disabled). v3: Added selftest v4: Drop the reference owned by the virtual engine Fixes: 748317386afb ("drm/i915/execlists: Offline error capture") Testcase: igt/gem_exec_balancer/hang Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> Cc: Mika Kuoppala <mika.kuoppala@linux.intel.com> Cc: Tvrtko Ursulin <tvrtko.ursulin@intel.com> --- drivers/gpu/drm/i915/gt/intel_lrc.c | 29 +++++ drivers/gpu/drm/i915/gt/selftest_lrc.c | 157 ++++++++++++++++++++++++- 2 files changed, 185 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/i915/gt/intel_lrc.c b/drivers/gpu/drm/i915/gt/intel_lrc.c index 59af136e1b1d..5bacff7724e9 100644 --- a/drivers/gpu/drm/i915/gt/intel_lrc.c +++ b/drivers/gpu/drm/i915/gt/intel_lrc.c @@ -2403,6 +2403,35 @@ static bool execlists_hold(struct intel_engine_cs *engine, goto unlock; } + if (rq->engine != engine) { /* preempted virtual engine */ + struct virtual_engine *ve = to_virtual_engine(rq->engine); + + /* + * intel_context_inflight() is only protected by virtue + * of process_csb() being called only by the tasklet (or + * directly from inside reset while the tasklet is suspended). + * Assert that neither of those are allowed to run while we + * poke at the request queues. + */ + GEM_BUG_ON(!reset_in_progress(&engine->execlists)); + + /* + * An unsubmitted request along a virtual engine will + * remain on the active (this) engine until we are able + * to process the context switch away (and so mark the + * context as no longer in flight). That cannot have happened + * yet, otherwise we would not be hanging! + */ + spin_lock(&ve->base.active.lock); + GEM_BUG_ON(intel_context_inflight(rq->context) != engine); + GEM_BUG_ON(ve->request != rq); + ve->request = NULL; + spin_unlock(&ve->base.active.lock); + i915_request_put(rq); + + rq->engine = engine; + } + /* * Transfer this request onto the hold queue to prevent it * being resumbitted to HW (and potentially completed) before we have diff --git a/drivers/gpu/drm/i915/gt/selftest_lrc.c b/drivers/gpu/drm/i915/gt/selftest_lrc.c index b208c2176bbd..f830bd81d913 100644 --- a/drivers/gpu/drm/i915/gt/selftest_lrc.c +++ b/drivers/gpu/drm/i915/gt/selftest_lrc.c @@ -335,7 +335,6 @@ static int live_hold_reset(void *arg) if (test_and_set_bit(I915_RESET_ENGINE + id, >->reset.flags)) { - spin_unlock_irq(&engine->active.lock); intel_gt_set_wedged(gt); err = -EBUSY; goto out; @@ -3411,6 +3410,161 @@ static int live_virtual_bond(void *arg) return 0; } +static int reset_virtual_engine(struct intel_gt *gt, + struct intel_engine_cs **siblings, + unsigned int nsibling) +{ + struct intel_engine_cs *engine; + struct intel_context *ve; + unsigned long *heartbeat; + struct igt_spinner spin; + struct i915_request *rq; + unsigned int n; + int err = 0; + + /* + * In order to support offline error capture for fast preempt reset, + * we need to decouple the guilty request and ensure that it and its + * descendents are not executed while the capture is in progress. + */ + + heartbeat = kmalloc_array(nsibling, sizeof(*heartbeat), GFP_KERNEL); + if (!heartbeat) + return -ENOMEM; + + if (igt_spinner_init(&spin, gt)) { + err = -ENOMEM; + goto out_free; + } + + ve = intel_execlists_create_virtual(siblings, nsibling); + if (IS_ERR(ve)) { + err = PTR_ERR(ve); + goto out_spin; + } + + for (n = 0; n < nsibling; n++) + engine_heartbeat_disable(siblings[n], &heartbeat[n]); + + rq = igt_spinner_create_request(&spin, ve, MI_ARB_CHECK); + if (IS_ERR(rq)) { + err = PTR_ERR(rq); + goto out_heartbeat; + } + i915_request_add(rq); + + if (!igt_wait_for_spinner(&spin, rq)) { + intel_gt_set_wedged(gt); + err = -ETIME; + goto out_heartbeat; + } + + engine = rq->engine; + GEM_BUG_ON(engine == ve->engine); + + /* Take ownership of the reset and tasklet */ + if (test_and_set_bit(I915_RESET_ENGINE + engine->id, + >->reset.flags)) { + intel_gt_set_wedged(gt); + err = -EBUSY; + goto out_heartbeat; + } + tasklet_disable(&engine->execlists.tasklet); + + engine->execlists.tasklet.func(engine->execlists.tasklet.data); + GEM_BUG_ON(execlists_active(&engine->execlists) != rq); + + /* Fake a preemption event; failed of course */ + spin_lock_irq(&engine->active.lock); + __unwind_incomplete_requests(engine); + spin_unlock_irq(&engine->active.lock); + GEM_BUG_ON(rq->engine != ve->engine); + + /* Reset the engine while keeping our active request on hold */ + execlists_hold(engine, rq); + GEM_BUG_ON(!i915_request_on_hold(rq)); + + intel_engine_reset(engine, NULL); + GEM_BUG_ON(rq->fence.error != -EIO); + + /* Release our grasp on the engine, letting CS flow again */ + tasklet_enable(&engine->execlists.tasklet); + clear_and_wake_up_bit(I915_RESET_ENGINE + engine->id, >->reset.flags); + + /* Check that we do not resubmit the held request */ + i915_request_get(rq); + if (!i915_request_wait(rq, 0, HZ / 5)) { + pr_err("%s: on hold request completed!\n", + engine->name); + intel_gt_set_wedged(gt); + err = -EIO; + goto out_rq; + } + GEM_BUG_ON(!i915_request_on_hold(rq)); + + /* But is resubmitted on release */ + execlists_unhold(engine, rq); + if (i915_request_wait(rq, 0, HZ / 5) < 0) { + pr_err("%s: held request did not complete!\n", + engine->name); + intel_gt_set_wedged(gt); + err = -ETIME; + } + +out_rq: + i915_request_put(rq); +out_heartbeat: + for (n = 0; n < nsibling; n++) + engine_heartbeat_enable(siblings[n], heartbeat[n]); + + intel_context_put(ve); +out_spin: + igt_spinner_fini(&spin); +out_free: + kfree(heartbeat); + return err; +} + +static int live_virtual_reset(void *arg) +{ + struct intel_gt *gt = arg; + struct intel_engine_cs *siblings[MAX_ENGINE_INSTANCE + 1]; + unsigned int class, inst; + + /* + * Check that we handle a reset event within a virtual engine. + * Only the physical engine is reset, but we have to check the flow + * of the virtual requests around the reset, and make sure it is not + * forgotten. + */ + + if (USES_GUC_SUBMISSION(gt->i915)) + return 0; + + if (!intel_has_reset_engine(gt)) + return 0; + + for (class = 0; class <= MAX_ENGINE_CLASS; class++) { + int nsibling, err; + + nsibling = 0; + for (inst = 0; inst <= MAX_ENGINE_INSTANCE; inst++) { + if (!gt->engine_class[class][inst]) + continue; + + siblings[nsibling++] = gt->engine_class[class][inst]; + } + if (nsibling < 2) + continue; + + err = reset_virtual_engine(gt, siblings, nsibling); + if (err) + return err; + } + + return 0; +} + int intel_execlists_live_selftests(struct drm_i915_private *i915) { static const struct i915_subtest tests[] = { @@ -3436,6 +3590,7 @@ int intel_execlists_live_selftests(struct drm_i915_private *i915) SUBTEST(live_virtual_mask), SUBTEST(live_virtual_preserved), SUBTEST(live_virtual_bond), + SUBTEST(live_virtual_reset), }; if (!HAS_EXECLISTS(i915)) -- 2.25.0 _______________________________________________ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/intel-gfx ^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [Intel-gfx] [PATCH 2/3] drm/i915/execlists: Reclaim the hanging virtual request 2020-01-22 11:29 ` [Intel-gfx] [PATCH 2/3] drm/i915/execlists: Reclaim the hanging virtual request Chris Wilson @ 2020-01-22 13:38 ` Tvrtko Ursulin 0 siblings, 0 replies; 9+ messages in thread From: Tvrtko Ursulin @ 2020-01-22 13:38 UTC (permalink / raw) To: Chris Wilson, intel-gfx On 22/01/2020 11:29, Chris Wilson wrote: > If we encounter a hang on a virtual engine, as we process the hang the > request may already have been moved back to the virtual engine (we are > processing the hang on the physical engine). We need to reclaim the > request from the virtual engine so that the locking is consistent and > local to the real engine on which we will hold the request for error > state capturing. > > v2: Pull the reclamation into execlists_hold() and assert that cannot be > called from outside of the reset (i.e. with the tasklet disabled). > v3: Added selftest > v4: Drop the reference owned by the virtual engine > > Fixes: 748317386afb ("drm/i915/execlists: Offline error capture") > Testcase: igt/gem_exec_balancer/hang > Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> > Cc: Mika Kuoppala <mika.kuoppala@linux.intel.com> > Cc: Tvrtko Ursulin <tvrtko.ursulin@intel.com> > --- > drivers/gpu/drm/i915/gt/intel_lrc.c | 29 +++++ > drivers/gpu/drm/i915/gt/selftest_lrc.c | 157 ++++++++++++++++++++++++- > 2 files changed, 185 insertions(+), 1 deletion(-) > > diff --git a/drivers/gpu/drm/i915/gt/intel_lrc.c b/drivers/gpu/drm/i915/gt/intel_lrc.c > index 59af136e1b1d..5bacff7724e9 100644 > --- a/drivers/gpu/drm/i915/gt/intel_lrc.c > +++ b/drivers/gpu/drm/i915/gt/intel_lrc.c > @@ -2403,6 +2403,35 @@ static bool execlists_hold(struct intel_engine_cs *engine, > goto unlock; > } > > + if (rq->engine != engine) { /* preempted virtual engine */ > + struct virtual_engine *ve = to_virtual_engine(rq->engine); > + > + /* > + * intel_context_inflight() is only protected by virtue > + * of process_csb() being called only by the tasklet (or > + * directly from inside reset while the tasklet is suspended). > + * Assert that neither of those are allowed to run while we > + * poke at the request queues. > + */ > + GEM_BUG_ON(!reset_in_progress(&engine->execlists)); > + > + /* > + * An unsubmitted request along a virtual engine will > + * remain on the active (this) engine until we are able > + * to process the context switch away (and so mark the > + * context as no longer in flight). That cannot have happened > + * yet, otherwise we would not be hanging! > + */ > + spin_lock(&ve->base.active.lock); > + GEM_BUG_ON(intel_context_inflight(rq->context) != engine); > + GEM_BUG_ON(ve->request != rq); > + ve->request = NULL; > + spin_unlock(&ve->base.active.lock); > + i915_request_put(rq); > + > + rq->engine = engine; > + } > + > /* > * Transfer this request onto the hold queue to prevent it > * being resumbitted to HW (and potentially completed) before we have > diff --git a/drivers/gpu/drm/i915/gt/selftest_lrc.c b/drivers/gpu/drm/i915/gt/selftest_lrc.c > index b208c2176bbd..f830bd81d913 100644 > --- a/drivers/gpu/drm/i915/gt/selftest_lrc.c > +++ b/drivers/gpu/drm/i915/gt/selftest_lrc.c > @@ -335,7 +335,6 @@ static int live_hold_reset(void *arg) > > if (test_and_set_bit(I915_RESET_ENGINE + id, > >->reset.flags)) { > - spin_unlock_irq(&engine->active.lock); > intel_gt_set_wedged(gt); > err = -EBUSY; > goto out; > @@ -3411,6 +3410,161 @@ static int live_virtual_bond(void *arg) > return 0; > } > > +static int reset_virtual_engine(struct intel_gt *gt, > + struct intel_engine_cs **siblings, > + unsigned int nsibling) > +{ > + struct intel_engine_cs *engine; > + struct intel_context *ve; > + unsigned long *heartbeat; > + struct igt_spinner spin; > + struct i915_request *rq; > + unsigned int n; > + int err = 0; > + > + /* > + * In order to support offline error capture for fast preempt reset, > + * we need to decouple the guilty request and ensure that it and its > + * descendents are not executed while the capture is in progress. > + */ > + > + heartbeat = kmalloc_array(nsibling, sizeof(*heartbeat), GFP_KERNEL); > + if (!heartbeat) > + return -ENOMEM; > + > + if (igt_spinner_init(&spin, gt)) { > + err = -ENOMEM; > + goto out_free; > + } > + > + ve = intel_execlists_create_virtual(siblings, nsibling); > + if (IS_ERR(ve)) { > + err = PTR_ERR(ve); > + goto out_spin; > + } > + > + for (n = 0; n < nsibling; n++) > + engine_heartbeat_disable(siblings[n], &heartbeat[n]); > + > + rq = igt_spinner_create_request(&spin, ve, MI_ARB_CHECK); > + if (IS_ERR(rq)) { > + err = PTR_ERR(rq); > + goto out_heartbeat; > + } > + i915_request_add(rq); > + > + if (!igt_wait_for_spinner(&spin, rq)) { > + intel_gt_set_wedged(gt); > + err = -ETIME; > + goto out_heartbeat; > + } > + > + engine = rq->engine; > + GEM_BUG_ON(engine == ve->engine); > + > + /* Take ownership of the reset and tasklet */ > + if (test_and_set_bit(I915_RESET_ENGINE + engine->id, > + >->reset.flags)) { > + intel_gt_set_wedged(gt); > + err = -EBUSY; > + goto out_heartbeat; > + } > + tasklet_disable(&engine->execlists.tasklet); > + > + engine->execlists.tasklet.func(engine->execlists.tasklet.data); > + GEM_BUG_ON(execlists_active(&engine->execlists) != rq); > + > + /* Fake a preemption event; failed of course */ > + spin_lock_irq(&engine->active.lock); > + __unwind_incomplete_requests(engine); > + spin_unlock_irq(&engine->active.lock); > + GEM_BUG_ON(rq->engine != ve->engine); > + > + /* Reset the engine while keeping our active request on hold */ > + execlists_hold(engine, rq); > + GEM_BUG_ON(!i915_request_on_hold(rq)); > + > + intel_engine_reset(engine, NULL); > + GEM_BUG_ON(rq->fence.error != -EIO); > + > + /* Release our grasp on the engine, letting CS flow again */ > + tasklet_enable(&engine->execlists.tasklet); > + clear_and_wake_up_bit(I915_RESET_ENGINE + engine->id, >->reset.flags); > + > + /* Check that we do not resubmit the held request */ > + i915_request_get(rq); > + if (!i915_request_wait(rq, 0, HZ / 5)) { > + pr_err("%s: on hold request completed!\n", > + engine->name); > + intel_gt_set_wedged(gt); > + err = -EIO; > + goto out_rq; > + } > + GEM_BUG_ON(!i915_request_on_hold(rq)); > + > + /* But is resubmitted on release */ > + execlists_unhold(engine, rq); > + if (i915_request_wait(rq, 0, HZ / 5) < 0) { > + pr_err("%s: held request did not complete!\n", > + engine->name); > + intel_gt_set_wedged(gt); > + err = -ETIME; > + } > + > +out_rq: > + i915_request_put(rq); > +out_heartbeat: > + for (n = 0; n < nsibling; n++) > + engine_heartbeat_enable(siblings[n], heartbeat[n]); > + > + intel_context_put(ve); > +out_spin: > + igt_spinner_fini(&spin); > +out_free: > + kfree(heartbeat); > + return err; > +} > + > +static int live_virtual_reset(void *arg) > +{ > + struct intel_gt *gt = arg; > + struct intel_engine_cs *siblings[MAX_ENGINE_INSTANCE + 1]; > + unsigned int class, inst; > + > + /* > + * Check that we handle a reset event within a virtual engine. > + * Only the physical engine is reset, but we have to check the flow > + * of the virtual requests around the reset, and make sure it is not > + * forgotten. > + */ > + > + if (USES_GUC_SUBMISSION(gt->i915)) > + return 0; > + > + if (!intel_has_reset_engine(gt)) > + return 0; > + > + for (class = 0; class <= MAX_ENGINE_CLASS; class++) { > + int nsibling, err; > + > + nsibling = 0; > + for (inst = 0; inst <= MAX_ENGINE_INSTANCE; inst++) { > + if (!gt->engine_class[class][inst]) > + continue; > + > + siblings[nsibling++] = gt->engine_class[class][inst]; > + } > + if (nsibling < 2) > + continue; > + > + err = reset_virtual_engine(gt, siblings, nsibling); > + if (err) > + return err; > + } > + > + return 0; > +} > + > int intel_execlists_live_selftests(struct drm_i915_private *i915) > { > static const struct i915_subtest tests[] = { > @@ -3436,6 +3590,7 @@ int intel_execlists_live_selftests(struct drm_i915_private *i915) > SUBTEST(live_virtual_mask), > SUBTEST(live_virtual_preserved), > SUBTEST(live_virtual_bond), > + SUBTEST(live_virtual_reset), > }; > > if (!HAS_EXECLISTS(i915)) > Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com> Regards, Tvrtko _______________________________________________ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/intel-gfx ^ permalink raw reply [flat|nested] 9+ messages in thread
* [Intel-gfx] [PATCH 3/3] drm/i915: Mark the removal of the i915_request from the sched.link 2020-01-22 11:29 [Intel-gfx] [PATCH 1/3] drm/i915/execlists: Take a reference while capturing the guilty request Chris Wilson 2020-01-22 11:29 ` [Intel-gfx] [PATCH 2/3] drm/i915/execlists: Reclaim the hanging virtual request Chris Wilson @ 2020-01-22 11:29 ` Chris Wilson 2020-01-22 13:38 ` Tvrtko Ursulin 2020-01-22 11:33 ` [Intel-gfx] [PATCH 1/3] drm/i915/execlists: Take a reference while capturing the guilty request Chris Wilson ` (2 subsequent siblings) 4 siblings, 1 reply; 9+ messages in thread From: Chris Wilson @ 2020-01-22 11:29 UTC (permalink / raw) To: intel-gfx Keep the rq->fence.flags consistent with the status of the rq->sched.link, and clear the associated bits when decoupling the link on retirement (as we may wish to inspect those flags independent of other state). Fixes: 32ff621fd744 ("drm/i915/gt: Allow temporary suspension of inflight requests") References: https://gitlab.freedesktop.org/drm/intel/issues/997 Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> Cc: Tvrtko Ursulin <tvrtko.ursulin@intel.com> --- drivers/gpu/drm/i915/i915_request.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/drivers/gpu/drm/i915/i915_request.c b/drivers/gpu/drm/i915/i915_request.c index 9ed0d3bc7249..78a5f5d3c070 100644 --- a/drivers/gpu/drm/i915/i915_request.c +++ b/drivers/gpu/drm/i915/i915_request.c @@ -221,6 +221,8 @@ static void remove_from_engine(struct i915_request *rq) locked = engine; } list_del_init(&rq->sched.link); + clear_bit(I915_FENCE_FLAG_PQUEUE, &rq->fence.flags); + clear_bit(I915_FENCE_FLAG_HOLD, &rq->fence.flags); spin_unlock_irq(&locked->active.lock); } -- 2.25.0 _______________________________________________ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/intel-gfx ^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [Intel-gfx] [PATCH 3/3] drm/i915: Mark the removal of the i915_request from the sched.link 2020-01-22 11:29 ` [Intel-gfx] [PATCH 3/3] drm/i915: Mark the removal of the i915_request from the sched.link Chris Wilson @ 2020-01-22 13:38 ` Tvrtko Ursulin 0 siblings, 0 replies; 9+ messages in thread From: Tvrtko Ursulin @ 2020-01-22 13:38 UTC (permalink / raw) To: Chris Wilson, intel-gfx On 22/01/2020 11:29, Chris Wilson wrote: > Keep the rq->fence.flags consistent with the status of the > rq->sched.link, and clear the associated bits when decoupling the link > on retirement (as we may wish to inspect those flags independent of > other state). > > Fixes: 32ff621fd744 ("drm/i915/gt: Allow temporary suspension of inflight requests") > References: https://gitlab.freedesktop.org/drm/intel/issues/997 > Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> > Cc: Tvrtko Ursulin <tvrtko.ursulin@intel.com> > --- > drivers/gpu/drm/i915/i915_request.c | 2 ++ > 1 file changed, 2 insertions(+) > > diff --git a/drivers/gpu/drm/i915/i915_request.c b/drivers/gpu/drm/i915/i915_request.c > index 9ed0d3bc7249..78a5f5d3c070 100644 > --- a/drivers/gpu/drm/i915/i915_request.c > +++ b/drivers/gpu/drm/i915/i915_request.c > @@ -221,6 +221,8 @@ static void remove_from_engine(struct i915_request *rq) > locked = engine; > } > list_del_init(&rq->sched.link); > + clear_bit(I915_FENCE_FLAG_PQUEUE, &rq->fence.flags); > + clear_bit(I915_FENCE_FLAG_HOLD, &rq->fence.flags); > spin_unlock_irq(&locked->active.lock); > } > > Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com> Regards, Tvrtko _______________________________________________ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/intel-gfx ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [Intel-gfx] [PATCH 1/3] drm/i915/execlists: Take a reference while capturing the guilty request 2020-01-22 11:29 [Intel-gfx] [PATCH 1/3] drm/i915/execlists: Take a reference while capturing the guilty request Chris Wilson 2020-01-22 11:29 ` [Intel-gfx] [PATCH 2/3] drm/i915/execlists: Reclaim the hanging virtual request Chris Wilson 2020-01-22 11:29 ` [Intel-gfx] [PATCH 3/3] drm/i915: Mark the removal of the i915_request from the sched.link Chris Wilson @ 2020-01-22 11:33 ` Chris Wilson 2020-01-22 11:34 ` [Intel-gfx] [PATCH v2] " Chris Wilson 2020-01-22 13:42 ` [Intel-gfx] ✗ Fi.CI.BAT: failure for series starting with [v2] drm/i915/execlists: Take a reference while capturing the guilty request (rev2) Patchwork 4 siblings, 0 replies; 9+ messages in thread From: Chris Wilson @ 2020-01-22 11:33 UTC (permalink / raw) To: intel-gfx Quoting Chris Wilson (2020-01-22 11:29:03) > Thanks to preempt-to-busy, we leave the request on the HW as we submit > the preemption request. This means that the request may complete at any > moment as we process HW events, and in particular the request may be > retired as we are planning to capture it for a preemption timeout. > > Be more careful while obtaining the request to capture after a > preemption timeout, and check to see if it completed before we were able > to put it on the on-hold list. If we do see it did complete just before > we capture the request, proclaim the preemption-timeout a false positive > and pardon the reset as we should hit an arbitration point momentarily > and so be able to process the preemption. > > Note that even after we move the request to be on hold it may be retired > (as the reset to stop the HW comes after), so we do require to hold our > own reference as we work on the request for capture (and all of the > peeking at state within the request needs to be carefully protected). > > Fixes: 32ff621fd744 ("drm/i915/gt: Allow temporary suspension of inflight requests") > Closes: https://gitlab.freedesktop.org/drm/intel/issues/997 > Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> > Cc: Tvrtko Ursulin <tvrtko.ursulin@intel.com> > --- > drivers/gpu/drm/i915/gt/intel_lrc.c | 39 +++++++++++++++++++++++------ > 1 file changed, 31 insertions(+), 8 deletions(-) > > diff --git a/drivers/gpu/drm/i915/gt/intel_lrc.c b/drivers/gpu/drm/i915/gt/intel_lrc.c > index 3a30767ff0c4..59af136e1b1d 100644 > --- a/drivers/gpu/drm/i915/gt/intel_lrc.c > +++ b/drivers/gpu/drm/i915/gt/intel_lrc.c > @@ -2393,11 +2393,16 @@ static void __execlists_hold(struct i915_request *rq) > } while (rq); > } > > -static void execlists_hold(struct intel_engine_cs *engine, > +static bool execlists_hold(struct intel_engine_cs *engine, > struct i915_request *rq) > { > spin_lock_irq(&engine->active.lock); > > + if (!i915_request_is_ready(rq)) { /* no longer active */ Actually this will be better as !i915_request_completed() so it protects the virtual_engine shenanigans better. -Chris _______________________________________________ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/intel-gfx ^ permalink raw reply [flat|nested] 9+ messages in thread
* [Intel-gfx] [PATCH v2] drm/i915/execlists: Take a reference while capturing the guilty request 2020-01-22 11:29 [Intel-gfx] [PATCH 1/3] drm/i915/execlists: Take a reference while capturing the guilty request Chris Wilson ` (2 preceding siblings ...) 2020-01-22 11:33 ` [Intel-gfx] [PATCH 1/3] drm/i915/execlists: Take a reference while capturing the guilty request Chris Wilson @ 2020-01-22 11:34 ` Chris Wilson 2020-01-22 13:28 ` Tvrtko Ursulin 2020-01-22 13:42 ` [Intel-gfx] ✗ Fi.CI.BAT: failure for series starting with [v2] drm/i915/execlists: Take a reference while capturing the guilty request (rev2) Patchwork 4 siblings, 1 reply; 9+ messages in thread From: Chris Wilson @ 2020-01-22 11:34 UTC (permalink / raw) To: intel-gfx Thanks to preempt-to-busy, we leave the request on the HW as we submit the preemption request. This means that the request may complete at any moment as we process HW events, and in particular the request may be retired as we are planning to capture it for a preemption timeout. Be more careful while obtaining the request to capture after a preemption timeout, and check to see if it completed before we were able to put it on the on-hold list. If we do see it did complete just before we capture the request, proclaim the preemption-timeout a false positive and pardon the reset as we should hit an arbitration point momentarily and so be able to process the preemption. Note that even after we move the request to be on hold it may be retired (as the reset to stop the HW comes after), so we do require to hold our own reference as we work on the request for capture (and all of the peeking at state within the request needs to be carefully protected). Fixes: 32ff621fd744 ("drm/i915/gt: Allow temporary suspension of inflight requests") Closes: https://gitlab.freedesktop.org/drm/intel/issues/997 Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> Cc: Tvrtko Ursulin <tvrtko.ursulin@intel.com> --- drivers/gpu/drm/i915/gt/intel_lrc.c | 39 +++++++++++++++++++++++------ 1 file changed, 31 insertions(+), 8 deletions(-) diff --git a/drivers/gpu/drm/i915/gt/intel_lrc.c b/drivers/gpu/drm/i915/gt/intel_lrc.c index 3a30767ff0c4..c4826d49571f 100644 --- a/drivers/gpu/drm/i915/gt/intel_lrc.c +++ b/drivers/gpu/drm/i915/gt/intel_lrc.c @@ -2393,11 +2393,16 @@ static void __execlists_hold(struct i915_request *rq) } while (rq); } -static void execlists_hold(struct intel_engine_cs *engine, +static bool execlists_hold(struct intel_engine_cs *engine, struct i915_request *rq) { spin_lock_irq(&engine->active.lock); + if (!i915_request_completed(rq)) { /* too late! */ + rq = NULL; + goto unlock; + } + /* * Transfer this request onto the hold queue to prevent it * being resumbitted to HW (and potentially completed) before we have @@ -2408,7 +2413,9 @@ static void execlists_hold(struct intel_engine_cs *engine, GEM_BUG_ON(rq->engine != engine); __execlists_hold(rq); +unlock: spin_unlock_irq(&engine->active.lock); + return rq; } static bool hold_request(const struct i915_request *rq) @@ -2524,6 +2531,7 @@ static void execlists_capture_work(struct work_struct *work) /* Return this request and all that depend upon it for signaling */ execlists_unhold(engine, cap->rq); + i915_request_put(cap->rq); kfree(cap); } @@ -2560,12 +2568,12 @@ static struct execlists_capture *capture_regs(struct intel_engine_cs *engine) return NULL; } -static void execlists_capture(struct intel_engine_cs *engine) +static bool execlists_capture(struct intel_engine_cs *engine) { struct execlists_capture *cap; if (!IS_ENABLED(CONFIG_DRM_I915_CAPTURE_ERROR)) - return; + return true; /* * We need to _quickly_ capture the engine state before we reset. @@ -2574,13 +2582,17 @@ static void execlists_capture(struct intel_engine_cs *engine) */ cap = capture_regs(engine); if (!cap) - return; + return true; cap->rq = execlists_active(&engine->execlists); GEM_BUG_ON(!cap->rq); + rcu_read_lock(); cap->rq = active_request(cap->rq->context->timeline, cap->rq); - GEM_BUG_ON(!cap->rq); + cap->rq = i915_request_get_rcu(cap->rq); + rcu_read_unlock(); + if (!cap->rq) + goto err_free; /* * Remove the request from the execlists queue, and take ownership @@ -2602,10 +2614,19 @@ static void execlists_capture(struct intel_engine_cs *engine) * simply hold that request accountable for being non-preemptible * long enough to force the reset. */ - execlists_hold(engine, cap->rq); + if (!execlists_hold(engine, cap->rq)) + goto err_rq; INIT_WORK(&cap->work, execlists_capture_work); schedule_work(&cap->work); + return true; + +err_rq: + i915_request_put(cap->rq); +err_free: + i915_gpu_coredump_put(cap->error); + kfree(cap); + return false; } static noinline void preempt_reset(struct intel_engine_cs *engine) @@ -2627,8 +2648,10 @@ static noinline void preempt_reset(struct intel_engine_cs *engine) jiffies_to_msecs(jiffies - engine->execlists.preempt.expires)); ring_set_paused(engine, 1); /* Freeze the current request in place */ - execlists_capture(engine); - intel_engine_reset(engine, "preemption time out"); + if (execlists_capture(engine)) + intel_engine_reset(engine, "preemption time out"); + else + ring_set_paused(engine, 0); tasklet_enable(&engine->execlists.tasklet); clear_and_wake_up_bit(bit, lock); -- 2.25.0 _______________________________________________ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/intel-gfx ^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [Intel-gfx] [PATCH v2] drm/i915/execlists: Take a reference while capturing the guilty request 2020-01-22 11:34 ` [Intel-gfx] [PATCH v2] " Chris Wilson @ 2020-01-22 13:28 ` Tvrtko Ursulin 0 siblings, 0 replies; 9+ messages in thread From: Tvrtko Ursulin @ 2020-01-22 13:28 UTC (permalink / raw) To: Chris Wilson, intel-gfx On 22/01/2020 11:34, Chris Wilson wrote: > Thanks to preempt-to-busy, we leave the request on the HW as we submit > the preemption request. This means that the request may complete at any > moment as we process HW events, and in particular the request may be > retired as we are planning to capture it for a preemption timeout. > > Be more careful while obtaining the request to capture after a > preemption timeout, and check to see if it completed before we were able > to put it on the on-hold list. If we do see it did complete just before > we capture the request, proclaim the preemption-timeout a false positive > and pardon the reset as we should hit an arbitration point momentarily > and so be able to process the preemption. > > Note that even after we move the request to be on hold it may be retired > (as the reset to stop the HW comes after), so we do require to hold our > own reference as we work on the request for capture (and all of the > peeking at state within the request needs to be carefully protected). > > Fixes: 32ff621fd744 ("drm/i915/gt: Allow temporary suspension of inflight requests") > Closes: https://gitlab.freedesktop.org/drm/intel/issues/997 > Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> > Cc: Tvrtko Ursulin <tvrtko.ursulin@intel.com> > --- > drivers/gpu/drm/i915/gt/intel_lrc.c | 39 +++++++++++++++++++++++------ > 1 file changed, 31 insertions(+), 8 deletions(-) > > diff --git a/drivers/gpu/drm/i915/gt/intel_lrc.c b/drivers/gpu/drm/i915/gt/intel_lrc.c > index 3a30767ff0c4..c4826d49571f 100644 > --- a/drivers/gpu/drm/i915/gt/intel_lrc.c > +++ b/drivers/gpu/drm/i915/gt/intel_lrc.c > @@ -2393,11 +2393,16 @@ static void __execlists_hold(struct i915_request *rq) > } while (rq); > } > > -static void execlists_hold(struct intel_engine_cs *engine, > +static bool execlists_hold(struct intel_engine_cs *engine, > struct i915_request *rq) > { > spin_lock_irq(&engine->active.lock); > > + if (!i915_request_completed(rq)) { /* too late! */ > + rq = NULL; > + goto unlock; > + } > + > /* > * Transfer this request onto the hold queue to prevent it > * being resumbitted to HW (and potentially completed) before we have > @@ -2408,7 +2413,9 @@ static void execlists_hold(struct intel_engine_cs *engine, > GEM_BUG_ON(rq->engine != engine); > __execlists_hold(rq); > > +unlock: > spin_unlock_irq(&engine->active.lock); > + return rq; > } > > static bool hold_request(const struct i915_request *rq) > @@ -2524,6 +2531,7 @@ static void execlists_capture_work(struct work_struct *work) > > /* Return this request and all that depend upon it for signaling */ > execlists_unhold(engine, cap->rq); > + i915_request_put(cap->rq); > > kfree(cap); > } > @@ -2560,12 +2568,12 @@ static struct execlists_capture *capture_regs(struct intel_engine_cs *engine) > return NULL; > } > > -static void execlists_capture(struct intel_engine_cs *engine) > +static bool execlists_capture(struct intel_engine_cs *engine) > { > struct execlists_capture *cap; > > if (!IS_ENABLED(CONFIG_DRM_I915_CAPTURE_ERROR)) > - return; > + return true; > > /* > * We need to _quickly_ capture the engine state before we reset. > @@ -2574,13 +2582,17 @@ static void execlists_capture(struct intel_engine_cs *engine) > */ > cap = capture_regs(engine); > if (!cap) > - return; > + return true; > > cap->rq = execlists_active(&engine->execlists); > GEM_BUG_ON(!cap->rq); > > + rcu_read_lock(); > cap->rq = active_request(cap->rq->context->timeline, cap->rq); > - GEM_BUG_ON(!cap->rq); > + cap->rq = i915_request_get_rcu(cap->rq); > + rcu_read_unlock(); > + if (!cap->rq) > + goto err_free; > > /* > * Remove the request from the execlists queue, and take ownership > @@ -2602,10 +2614,19 @@ static void execlists_capture(struct intel_engine_cs *engine) > * simply hold that request accountable for being non-preemptible > * long enough to force the reset. > */ > - execlists_hold(engine, cap->rq); > + if (!execlists_hold(engine, cap->rq)) > + goto err_rq; > > INIT_WORK(&cap->work, execlists_capture_work); > schedule_work(&cap->work); > + return true; > + > +err_rq: > + i915_request_put(cap->rq); > +err_free: > + i915_gpu_coredump_put(cap->error); > + kfree(cap); > + return false; > } > > static noinline void preempt_reset(struct intel_engine_cs *engine) > @@ -2627,8 +2648,10 @@ static noinline void preempt_reset(struct intel_engine_cs *engine) > jiffies_to_msecs(jiffies - engine->execlists.preempt.expires)); > > ring_set_paused(engine, 1); /* Freeze the current request in place */ > - execlists_capture(engine); > - intel_engine_reset(engine, "preemption time out"); > + if (execlists_capture(engine)) > + intel_engine_reset(engine, "preemption time out"); > + else > + ring_set_paused(engine, 0); > > tasklet_enable(&engine->execlists.tasklet); > clear_and_wake_up_bit(bit, lock); > Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com> Regards, Tvrtko _______________________________________________ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/intel-gfx ^ permalink raw reply [flat|nested] 9+ messages in thread
* [Intel-gfx] ✗ Fi.CI.BAT: failure for series starting with [v2] drm/i915/execlists: Take a reference while capturing the guilty request (rev2) 2020-01-22 11:29 [Intel-gfx] [PATCH 1/3] drm/i915/execlists: Take a reference while capturing the guilty request Chris Wilson ` (3 preceding siblings ...) 2020-01-22 11:34 ` [Intel-gfx] [PATCH v2] " Chris Wilson @ 2020-01-22 13:42 ` Patchwork 4 siblings, 0 replies; 9+ messages in thread From: Patchwork @ 2020-01-22 13:42 UTC (permalink / raw) To: Chris Wilson; +Cc: intel-gfx == Series Details == Series: series starting with [v2] drm/i915/execlists: Take a reference while capturing the guilty request (rev2) URL : https://patchwork.freedesktop.org/series/72391/ State : failure == Summary == CI Bug Log - changes from CI_DRM_7790 -> Patchwork_16208 ==================================================== Summary ------- **FAILURE** Serious unknown changes coming with Patchwork_16208 absolutely need to be verified manually. If you think the reported changes have nothing to do with the changes introduced in Patchwork_16208, please notify your bug team to allow them to document this new failure mode, which will reduce false positives in CI. External URL: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_16208/index.html Possible new issues ------------------- Here are the unknown changes that may have been introduced in Patchwork_16208: ### IGT changes ### #### Possible regressions #### * igt@i915_selftest@live_execlists: - fi-skl-6600u: NOTRUN -> [INCOMPLETE][1] [1]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_16208/fi-skl-6600u/igt@i915_selftest@live_execlists.html - fi-skl-guc: NOTRUN -> [INCOMPLETE][2] [2]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_16208/fi-skl-guc/igt@i915_selftest@live_execlists.html - fi-cfl-guc: NOTRUN -> [INCOMPLETE][3] [3]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_16208/fi-cfl-guc/igt@i915_selftest@live_execlists.html - fi-skl-6700k2: [PASS][4] -> [INCOMPLETE][5] [4]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7790/fi-skl-6700k2/igt@i915_selftest@live_execlists.html [5]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_16208/fi-skl-6700k2/igt@i915_selftest@live_execlists.html Known issues ------------ Here are the changes found in Patchwork_16208 that come from known issues: ### IGT changes ### #### Issues hit #### * igt@gem_close_race@basic-threads: - fi-byt-j1900: [PASS][6] -> [INCOMPLETE][7] ([i915#45]) [6]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7790/fi-byt-j1900/igt@gem_close_race@basic-threads.html [7]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_16208/fi-byt-j1900/igt@gem_close_race@basic-threads.html * igt@i915_module_load@reload-with-fault-injection: - fi-bxt-dsi: [PASS][8] -> [INCOMPLETE][9] ([fdo#103927]) [8]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7790/fi-bxt-dsi/igt@i915_module_load@reload-with-fault-injection.html [9]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_16208/fi-bxt-dsi/igt@i915_module_load@reload-with-fault-injection.html * igt@i915_selftest@live_execlists: - fi-bsw-nick: [PASS][10] -> [INCOMPLETE][11] ([i915#392]) [10]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7790/fi-bsw-nick/igt@i915_selftest@live_execlists.html [11]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_16208/fi-bsw-nick/igt@i915_selftest@live_execlists.html - fi-apl-guc: [PASS][12] -> [INCOMPLETE][13] ([fdo#103927]) [12]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7790/fi-apl-guc/igt@i915_selftest@live_execlists.html [13]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_16208/fi-apl-guc/igt@i915_selftest@live_execlists.html - fi-kbl-x1275: [PASS][14] -> [INCOMPLETE][15] ([fdo#112259]) [14]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7790/fi-kbl-x1275/igt@i915_selftest@live_execlists.html [15]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_16208/fi-kbl-x1275/igt@i915_selftest@live_execlists.html - fi-icl-u2: [PASS][16] -> [INCOMPLETE][17] ([i915#140]) [16]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7790/fi-icl-u2/igt@i915_selftest@live_execlists.html [17]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_16208/fi-icl-u2/igt@i915_selftest@live_execlists.html - fi-bsw-n3050: [PASS][18] -> [INCOMPLETE][19] ([i915#392]) [18]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7790/fi-bsw-n3050/igt@i915_selftest@live_execlists.html [19]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_16208/fi-bsw-n3050/igt@i915_selftest@live_execlists.html - fi-icl-dsi: [PASS][20] -> [INCOMPLETE][21] ([i915#140]) [20]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7790/fi-icl-dsi/igt@i915_selftest@live_execlists.html [21]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_16208/fi-icl-dsi/igt@i915_selftest@live_execlists.html - fi-bsw-kefka: [PASS][22] -> [INCOMPLETE][23] ([i915#392]) [22]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7790/fi-bsw-kefka/igt@i915_selftest@live_execlists.html [23]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_16208/fi-bsw-kefka/igt@i915_selftest@live_execlists.html - fi-icl-y: [PASS][24] -> [INCOMPLETE][25] ([i915#140]) [24]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7790/fi-icl-y/igt@i915_selftest@live_execlists.html [25]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_16208/fi-icl-y/igt@i915_selftest@live_execlists.html - fi-cml-u2: [PASS][26] -> [INCOMPLETE][27] ([i915#283]) [26]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7790/fi-cml-u2/igt@i915_selftest@live_execlists.html [27]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_16208/fi-cml-u2/igt@i915_selftest@live_execlists.html - fi-whl-u: [PASS][28] -> [INCOMPLETE][29] ([fdo#112066]) [28]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7790/fi-whl-u/igt@i915_selftest@live_execlists.html [29]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_16208/fi-whl-u/igt@i915_selftest@live_execlists.html - fi-kbl-7500u: [PASS][30] -> [INCOMPLETE][31] ([fdo#112259]) [30]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7790/fi-kbl-7500u/igt@i915_selftest@live_execlists.html [31]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_16208/fi-kbl-7500u/igt@i915_selftest@live_execlists.html - fi-kbl-soraka: [PASS][32] -> [INCOMPLETE][33] ([fdo#112259]) [32]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7790/fi-kbl-soraka/igt@i915_selftest@live_execlists.html [33]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_16208/fi-kbl-soraka/igt@i915_selftest@live_execlists.html - fi-icl-guc: [PASS][34] -> [INCOMPLETE][35] ([i915#140]) [34]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7790/fi-icl-guc/igt@i915_selftest@live_execlists.html [35]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_16208/fi-icl-guc/igt@i915_selftest@live_execlists.html - fi-kbl-8809g: [PASS][36] -> [INCOMPLETE][37] ([fdo#112259] / [i915#435]) [36]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7790/fi-kbl-8809g/igt@i915_selftest@live_execlists.html [37]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_16208/fi-kbl-8809g/igt@i915_selftest@live_execlists.html - fi-kbl-r: [PASS][38] -> [INCOMPLETE][39] ([fdo#112259]) [38]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7790/fi-kbl-r/igt@i915_selftest@live_execlists.html [39]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_16208/fi-kbl-r/igt@i915_selftest@live_execlists.html * igt@kms_cursor_legacy@basic-flip-after-cursor-atomic: - fi-icl-u2: [PASS][40] -> [DMESG-WARN][41] ([i915#263]) [40]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7790/fi-icl-u2/igt@kms_cursor_legacy@basic-flip-after-cursor-atomic.html [41]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_16208/fi-icl-u2/igt@kms_cursor_legacy@basic-flip-after-cursor-atomic.html #### Possible fixes #### * igt@i915_module_load@reload: - fi-icl-u2: [DMESG-WARN][42] ([i915#289]) -> [PASS][43] +2 similar issues [42]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7790/fi-icl-u2/igt@i915_module_load@reload.html [43]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_16208/fi-icl-u2/igt@i915_module_load@reload.html * igt@i915_selftest@live_blt: - fi-hsw-4770r: [DMESG-FAIL][44] ([i915#770]) -> [PASS][45] [44]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7790/fi-hsw-4770r/igt@i915_selftest@live_blt.html [45]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_16208/fi-hsw-4770r/igt@i915_selftest@live_blt.html - fi-hsw-peppy: [DMESG-FAIL][46] ([i915#553] / [i915#725]) -> [PASS][47] [46]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7790/fi-hsw-peppy/igt@i915_selftest@live_blt.html [47]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_16208/fi-hsw-peppy/igt@i915_selftest@live_blt.html * igt@kms_chamelium@hdmi-hpd-fast: - fi-kbl-7500u: [FAIL][48] ([fdo#111407]) -> [PASS][49] [48]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7790/fi-kbl-7500u/igt@kms_chamelium@hdmi-hpd-fast.html [49]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_16208/fi-kbl-7500u/igt@kms_chamelium@hdmi-hpd-fast.html * igt@kms_frontbuffer_tracking@basic: - fi-hsw-peppy: [DMESG-WARN][50] ([i915#44]) -> [PASS][51] [50]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7790/fi-hsw-peppy/igt@kms_frontbuffer_tracking@basic.html [51]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_16208/fi-hsw-peppy/igt@kms_frontbuffer_tracking@basic.html * igt@kms_pipe_crc_basic@suspend-read-crc-pipe-a: - fi-icl-dsi: [DMESG-WARN][52] ([i915#109]) -> [PASS][53] [52]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7790/fi-icl-dsi/igt@kms_pipe_crc_basic@suspend-read-crc-pipe-a.html [53]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_16208/fi-icl-dsi/igt@kms_pipe_crc_basic@suspend-read-crc-pipe-a.html #### Warnings #### * igt@i915_selftest@live_gem_contexts: - fi-cfl-8700k: [INCOMPLETE][54] ([i915#424]) -> [INCOMPLETE][55] ([CI#80] / [i915#424]) [54]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7790/fi-cfl-8700k/igt@i915_selftest@live_gem_contexts.html [55]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_16208/fi-cfl-8700k/igt@i915_selftest@live_gem_contexts.html * igt@kms_chamelium@common-hpd-after-suspend: - fi-icl-u2: [DMESG-WARN][56] ([IGT#4] / [i915#263]) -> [FAIL][57] ([i915#323]) [56]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7790/fi-icl-u2/igt@kms_chamelium@common-hpd-after-suspend.html [57]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_16208/fi-icl-u2/igt@kms_chamelium@common-hpd-after-suspend.html [CI#80]: https://gitlab.freedesktop.org/gfx-ci/i915-infra/issues/80 [IGT#4]: https://gitlab.freedesktop.org/drm/igt-gpu-tools/issues/4 [fdo#103927]: https://bugs.freedesktop.org/show_bug.cgi?id=103927 [fdo#111407]: https://bugs.freedesktop.org/show_bug.cgi?id=111407 [fdo#112066]: https://bugs.freedesktop.org/show_bug.cgi?id=112066 [fdo#112259]: https://bugs.freedesktop.org/show_bug.cgi?id=112259 [i915#109]: https://gitlab.freedesktop.org/drm/intel/issues/109 [i915#140]: https://gitlab.freedesktop.org/drm/intel/issues/140 [i915#263]: https://gitlab.freedesktop.org/drm/intel/issues/263 [i915#283]: https://gitlab.freedesktop.org/drm/intel/issues/283 [i915#289]: https://gitlab.freedesktop.org/drm/intel/issues/289 [i915#323]: https://gitlab.freedesktop.org/drm/intel/issues/323 [i915#392]: https://gitlab.freedesktop.org/drm/intel/issues/392 [i915#424]: https://gitlab.freedesktop.org/drm/intel/issues/424 [i915#435]: https://gitlab.freedesktop.org/drm/intel/issues/435 [i915#44]: https://gitlab.freedesktop.org/drm/intel/issues/44 [i915#45]: https://gitlab.freedesktop.org/drm/intel/issues/45 [i915#553]: https://gitlab.freedesktop.org/drm/intel/issues/553 [i915#725]: https://gitlab.freedesktop.org/drm/intel/issues/725 [i915#770]: https://gitlab.freedesktop.org/drm/intel/issues/770 Participating hosts (39 -> 41) ------------------------------ Additional (6): fi-skl-guc fi-glk-dsi fi-cfl-guc fi-kbl-guc fi-icl-u3 fi-skl-6600u Missing (4): fi-bsw-cyan fi-blb-e6850 fi-byt-squawks fi-bdw-5557u Build changes ------------- * CI: CI-20190529 -> None * Linux: CI_DRM_7790 -> Patchwork_16208 CI-20190529: 20190529 CI_DRM_7790: 854ee1f2aa71a3aad01bd4e45f9e9c4cf9ad47f9 @ git://anongit.freedesktop.org/gfx-ci/linux IGT_5377: 1e6cb3e75925cf623df04f78430ae9299632ec3f @ git://anongit.freedesktop.org/xorg/app/intel-gpu-tools Patchwork_16208: 73454cb6f01afb6009ee84c2fe44f78ba74ac21e @ git://anongit.freedesktop.org/gfx-ci/linux == Linux commits == 73454cb6f01a drm/i915: Mark the removal of the i915_request from the sched.link 99cbc3bf8ebd drm/i915/execlists: Reclaim the hanging virtual request 089217e8c3f4 drm/i915/execlists: Take a reference while capturing the guilty request == Logs == For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_16208/index.html _______________________________________________ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/intel-gfx ^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2020-01-22 13:42 UTC | newest] Thread overview: 9+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2020-01-22 11:29 [Intel-gfx] [PATCH 1/3] drm/i915/execlists: Take a reference while capturing the guilty request Chris Wilson 2020-01-22 11:29 ` [Intel-gfx] [PATCH 2/3] drm/i915/execlists: Reclaim the hanging virtual request Chris Wilson 2020-01-22 13:38 ` Tvrtko Ursulin 2020-01-22 11:29 ` [Intel-gfx] [PATCH 3/3] drm/i915: Mark the removal of the i915_request from the sched.link Chris Wilson 2020-01-22 13:38 ` Tvrtko Ursulin 2020-01-22 11:33 ` [Intel-gfx] [PATCH 1/3] drm/i915/execlists: Take a reference while capturing the guilty request Chris Wilson 2020-01-22 11:34 ` [Intel-gfx] [PATCH v2] " Chris Wilson 2020-01-22 13:28 ` Tvrtko Ursulin 2020-01-22 13:42 ` [Intel-gfx] ✗ Fi.CI.BAT: failure for series starting with [v2] drm/i915/execlists: Take a reference while capturing the guilty request (rev2) Patchwork
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox