* [Intel-gfx] [CI] drm/i915/gt: Restore ce->signal flush before releasing virtual engine
@ 2021-01-05 10:13 Chris Wilson
2021-01-05 16:15 ` [Intel-gfx] ✗ Fi.CI.CHECKPATCH: warning for drm/i915/gt: Restore ce->signal flush before releasing virtual engine (rev2) Patchwork
2021-01-05 16:45 ` [Intel-gfx] ✗ Fi.CI.BAT: failure " Patchwork
0 siblings, 2 replies; 4+ messages in thread
From: Chris Wilson @ 2021-01-05 10:13 UTC (permalink / raw)
To: intel-gfx
Before we mark the virtual engine as no longer inflight, flush any
ongoing signaling that may be using the ce->signal_link along the
previous breadcrumbs. On switch to a new physical engine, that link will
be inserted into the new set of breadcrumbs, causing confusion to an
ongoing iterator.
This patch undoes a last minute mistake introduced into commit
bab0557c8dca ("drm/i915/gt: Remove virtual breadcrumb before transfer"),
whereby instead of unconditionally applying the flush, it was only
applied if the request itself was going to be reused.
v2: Cancel all remaining ce->signals
Fixes: bab0557c8dca ("drm/i915/gt: Remove virtual breadcrumb before transfer")
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
---
drivers/gpu/drm/i915/gt/intel_breadcrumbs.c | 30 +++++++++++++++++++
drivers/gpu/drm/i915/gt/intel_breadcrumbs.h | 11 +++++++
.../drm/i915/gt/intel_execlists_submission.c | 29 +++++++++---------
3 files changed, 55 insertions(+), 15 deletions(-)
diff --git a/drivers/gpu/drm/i915/gt/intel_breadcrumbs.c b/drivers/gpu/drm/i915/gt/intel_breadcrumbs.c
index 2eabb9ab5d47..19d34c559e22 100644
--- a/drivers/gpu/drm/i915/gt/intel_breadcrumbs.c
+++ b/drivers/gpu/drm/i915/gt/intel_breadcrumbs.c
@@ -472,6 +472,36 @@ void i915_request_cancel_breadcrumb(struct i915_request *rq)
i915_request_put(rq);
}
+bool intel_context_remove_breadcrumbs(struct intel_context *ce,
+ struct intel_breadcrumbs *b)
+{
+ struct i915_request *rq, *rn;
+ unsigned long flags;
+ bool release;
+
+ if (list_empty(&ce->signals))
+ return false;
+
+ spin_lock_irqsave(&ce->signal_lock, flags);
+ list_for_each_entry_safe(rq, rn, &ce->signals, signal_link) {
+ GEM_BUG_ON(!__i915_request_is_complete(rq));
+ if (!test_and_clear_bit(I915_FENCE_FLAG_SIGNAL,
+ &rq->fence.flags))
+ continue;
+
+ list_del_rcu(&rq->signal_link);
+ irq_signal_request(rq, b);
+ i915_request_put(rq);
+ }
+
+ release = remove_signaling_context(b, ce);
+ spin_unlock_irqrestore(&ce->signal_lock, flags);
+ if (release)
+ intel_context_put(ce);
+
+ return true;
+}
+
static void print_signals(struct intel_breadcrumbs *b, struct drm_printer *p)
{
struct intel_context *ce;
diff --git a/drivers/gpu/drm/i915/gt/intel_breadcrumbs.h b/drivers/gpu/drm/i915/gt/intel_breadcrumbs.h
index 75cc9cff3ae3..5a44a56529bc 100644
--- a/drivers/gpu/drm/i915/gt/intel_breadcrumbs.h
+++ b/drivers/gpu/drm/i915/gt/intel_breadcrumbs.h
@@ -6,6 +6,7 @@
#ifndef __INTEL_BREADCRUMBS__
#define __INTEL_BREADCRUMBS__
+#include <linux/atomic.h>
#include <linux/irq_work.h>
#include "intel_engine_types.h"
@@ -44,4 +45,14 @@ void intel_engine_print_breadcrumbs(struct intel_engine_cs *engine,
bool i915_request_enable_breadcrumb(struct i915_request *request);
void i915_request_cancel_breadcrumb(struct i915_request *request);
+bool intel_context_remove_breadcrumbs(struct intel_context *ce,
+ struct intel_breadcrumbs *b);
+
+static inline void
+intel_breadcrumbs_flush_signals(struct intel_breadcrumbs *b)
+{
+ while (atomic_read(&b->signaler_active))
+ cpu_relax();
+}
+
#endif /* __INTEL_BREADCRUMBS__ */
diff --git a/drivers/gpu/drm/i915/gt/intel_execlists_submission.c b/drivers/gpu/drm/i915/gt/intel_execlists_submission.c
index a5b442683c18..b8fe96957691 100644
--- a/drivers/gpu/drm/i915/gt/intel_execlists_submission.c
+++ b/drivers/gpu/drm/i915/gt/intel_execlists_submission.c
@@ -581,21 +581,6 @@ resubmit_virtual_request(struct i915_request *rq, struct virtual_engine *ve)
{
struct intel_engine_cs *engine = rq->engine;
- /* Flush concurrent rcu iterators in signal_irq_work */
- if (test_bit(DMA_FENCE_FLAG_ENABLE_SIGNAL_BIT, &rq->fence.flags)) {
- /*
- * After this point, the rq may be transferred to a new
- * sibling, so before we clear ce->inflight make sure that
- * the context has been removed from the b->signalers and
- * furthermore we need to make sure that the concurrent
- * iterator in signal_irq_work is no longer following
- * ce->signal_link.
- */
- i915_request_cancel_breadcrumb(rq);
- while (atomic_read(&engine->breadcrumbs->signaler_active))
- cpu_relax();
- }
-
spin_lock_irq(&engine->active.lock);
clear_bit(I915_FENCE_FLAG_PQUEUE, &rq->fence.flags);
@@ -609,6 +594,16 @@ static void kick_siblings(struct i915_request *rq, struct intel_context *ce)
{
struct virtual_engine *ve = container_of(ce, typeof(*ve), context);
struct intel_engine_cs *engine = rq->engine;
+ bool signals;
+
+ /*
+ * After this point, the rq may be transferred to a new sibling, so
+ * before we clear ce->inflight make sure that the context has been
+ * removed from the b->signalers and furthermore we need to make sure
+ * that the concurrent iterator in signal_irq_work is no longer
+ * following ce->signal_link.
+ */
+ signals = intel_context_remove_breadcrumbs(ce, engine->breadcrumbs);
/*
* This engine is now too busy to run this virtual request, so
@@ -622,6 +617,10 @@ static void kick_siblings(struct i915_request *rq, struct intel_context *ce)
if (READ_ONCE(ve->request))
tasklet_hi_schedule(&ve->base.execlists.tasklet);
+
+ /* Flush concurrent signal_irq_work before we reuse the link */
+ if (signals)
+ intel_breadcrumbs_flush_signals(engine->breadcrumbs);
}
static inline void __execlists_schedule_out(struct i915_request *rq)
--
2.20.1
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply related [flat|nested] 4+ messages in thread
* [Intel-gfx] ✗ Fi.CI.CHECKPATCH: warning for drm/i915/gt: Restore ce->signal flush before releasing virtual engine (rev2)
2021-01-05 10:13 [Intel-gfx] [CI] drm/i915/gt: Restore ce->signal flush before releasing virtual engine Chris Wilson
@ 2021-01-05 16:15 ` Patchwork
2021-01-05 16:45 ` [Intel-gfx] ✗ Fi.CI.BAT: failure " Patchwork
1 sibling, 0 replies; 4+ messages in thread
From: Patchwork @ 2021-01-05 16:15 UTC (permalink / raw)
To: Chris Wilson; +Cc: intel-gfx
== Series Details ==
Series: drm/i915/gt: Restore ce->signal flush before releasing virtual engine (rev2)
URL : https://patchwork.freedesktop.org/series/85493/
State : warning
== Summary ==
$ dim checkpatch origin/drm-tip
7ceba4fd2e81 drm/i915/gt: Restore ce->signal flush before releasing virtual engine
-:14: ERROR:GIT_COMMIT_ID: Please use git commit description style 'commit <12+ chars of sha1> ("<title line>")' - ie: 'commit bab0557c8dca ("drm/i915/gt: Remove virtual breadcrumb before transfer")'
#14:
bab0557c8dca ("drm/i915/gt: Remove virtual breadcrumb before transfer"),
-:34: WARNING:LEADING_SPACE: please, no spaces at the start of a line
#34: FILE: drivers/gpu/drm/i915/gt/intel_breadcrumbs.c:478:
+ struct i915_request *rq, *rn;$
-:35: WARNING:LEADING_SPACE: please, no spaces at the start of a line
#35: FILE: drivers/gpu/drm/i915/gt/intel_breadcrumbs.c:479:
+ unsigned long flags;$
-:36: WARNING:LEADING_SPACE: please, no spaces at the start of a line
#36: FILE: drivers/gpu/drm/i915/gt/intel_breadcrumbs.c:480:
+ bool release;$
-:38: WARNING:LEADING_SPACE: please, no spaces at the start of a line
#38: FILE: drivers/gpu/drm/i915/gt/intel_breadcrumbs.c:482:
+ if (list_empty(&ce->signals))$
-:38: WARNING:SUSPECT_CODE_INDENT: suspect code indent for conditional statements (7, 15)
#38: FILE: drivers/gpu/drm/i915/gt/intel_breadcrumbs.c:482:
+ if (list_empty(&ce->signals))
+ return false;
-:39: ERROR:CODE_INDENT: code indent should use tabs where possible
#39: FILE: drivers/gpu/drm/i915/gt/intel_breadcrumbs.c:483:
+ return false;$
-:39: WARNING:LEADING_SPACE: please, no spaces at the start of a line
#39: FILE: drivers/gpu/drm/i915/gt/intel_breadcrumbs.c:483:
+ return false;$
-:41: WARNING:LEADING_SPACE: please, no spaces at the start of a line
#41: FILE: drivers/gpu/drm/i915/gt/intel_breadcrumbs.c:485:
+ spin_lock_irqsave(&ce->signal_lock, flags);$
-:42: WARNING:LEADING_SPACE: please, no spaces at the start of a line
#42: FILE: drivers/gpu/drm/i915/gt/intel_breadcrumbs.c:486:
+ list_for_each_entry_safe(rq, rn, &ce->signals, signal_link) {$
-:42: WARNING:SUSPECT_CODE_INDENT: suspect code indent for conditional statements (7, 15)
#42: FILE: drivers/gpu/drm/i915/gt/intel_breadcrumbs.c:486:
+ list_for_each_entry_safe(rq, rn, &ce->signals, signal_link) {
+ GEM_BUG_ON(!__i915_request_is_complete(rq));
-:43: ERROR:CODE_INDENT: code indent should use tabs where possible
#43: FILE: drivers/gpu/drm/i915/gt/intel_breadcrumbs.c:487:
+ GEM_BUG_ON(!__i915_request_is_complete(rq));$
-:43: WARNING:LEADING_SPACE: please, no spaces at the start of a line
#43: FILE: drivers/gpu/drm/i915/gt/intel_breadcrumbs.c:487:
+ GEM_BUG_ON(!__i915_request_is_complete(rq));$
-:44: ERROR:CODE_INDENT: code indent should use tabs where possible
#44: FILE: drivers/gpu/drm/i915/gt/intel_breadcrumbs.c:488:
+ if (!test_and_clear_bit(I915_FENCE_FLAG_SIGNAL,$
-:44: WARNING:LEADING_SPACE: please, no spaces at the start of a line
#44: FILE: drivers/gpu/drm/i915/gt/intel_breadcrumbs.c:488:
+ if (!test_and_clear_bit(I915_FENCE_FLAG_SIGNAL,$
-:44: WARNING:SUSPECT_CODE_INDENT: suspect code indent for conditional statements (15, 23)
#44: FILE: drivers/gpu/drm/i915/gt/intel_breadcrumbs.c:488:
+ if (!test_and_clear_bit(I915_FENCE_FLAG_SIGNAL,
[...]
+ continue;
-:45: ERROR:CODE_INDENT: code indent should use tabs where possible
#45: FILE: drivers/gpu/drm/i915/gt/intel_breadcrumbs.c:489:
+ &rq->fence.flags))$
-:45: WARNING:LEADING_SPACE: please, no spaces at the start of a line
#45: FILE: drivers/gpu/drm/i915/gt/intel_breadcrumbs.c:489:
+ &rq->fence.flags))$
-:46: ERROR:CODE_INDENT: code indent should use tabs where possible
#46: FILE: drivers/gpu/drm/i915/gt/intel_breadcrumbs.c:490:
+ continue;$
-:46: WARNING:LEADING_SPACE: please, no spaces at the start of a line
#46: FILE: drivers/gpu/drm/i915/gt/intel_breadcrumbs.c:490:
+ continue;$
-:48: ERROR:CODE_INDENT: code indent should use tabs where possible
#48: FILE: drivers/gpu/drm/i915/gt/intel_breadcrumbs.c:492:
+ list_del_rcu(&rq->signal_link);$
-:48: WARNING:LEADING_SPACE: please, no spaces at the start of a line
#48: FILE: drivers/gpu/drm/i915/gt/intel_breadcrumbs.c:492:
+ list_del_rcu(&rq->signal_link);$
-:49: ERROR:CODE_INDENT: code indent should use tabs where possible
#49: FILE: drivers/gpu/drm/i915/gt/intel_breadcrumbs.c:493:
+ irq_signal_request(rq, b);$
-:49: WARNING:LEADING_SPACE: please, no spaces at the start of a line
#49: FILE: drivers/gpu/drm/i915/gt/intel_breadcrumbs.c:493:
+ irq_signal_request(rq, b);$
-:50: ERROR:CODE_INDENT: code indent should use tabs where possible
#50: FILE: drivers/gpu/drm/i915/gt/intel_breadcrumbs.c:494:
+ i915_request_put(rq);$
-:50: WARNING:LEADING_SPACE: please, no spaces at the start of a line
#50: FILE: drivers/gpu/drm/i915/gt/intel_breadcrumbs.c:494:
+ i915_request_put(rq);$
-:51: WARNING:LEADING_SPACE: please, no spaces at the start of a line
#51: FILE: drivers/gpu/drm/i915/gt/intel_breadcrumbs.c:495:
+ }$
-:53: WARNING:LEADING_SPACE: please, no spaces at the start of a line
#53: FILE: drivers/gpu/drm/i915/gt/intel_breadcrumbs.c:497:
+ release = remove_signaling_context(b, ce);$
-:54: WARNING:LEADING_SPACE: please, no spaces at the start of a line
#54: FILE: drivers/gpu/drm/i915/gt/intel_breadcrumbs.c:498:
+ spin_unlock_irqrestore(&ce->signal_lock, flags);$
-:55: WARNING:LEADING_SPACE: please, no spaces at the start of a line
#55: FILE: drivers/gpu/drm/i915/gt/intel_breadcrumbs.c:499:
+ if (release)$
-:55: WARNING:SUSPECT_CODE_INDENT: suspect code indent for conditional statements (7, 15)
#55: FILE: drivers/gpu/drm/i915/gt/intel_breadcrumbs.c:499:
+ if (release)
+ intel_context_put(ce);
-:56: ERROR:CODE_INDENT: code indent should use tabs where possible
#56: FILE: drivers/gpu/drm/i915/gt/intel_breadcrumbs.c:500:
+ intel_context_put(ce);$
-:56: WARNING:LEADING_SPACE: please, no spaces at the start of a line
#56: FILE: drivers/gpu/drm/i915/gt/intel_breadcrumbs.c:500:
+ intel_context_put(ce);$
-:58: WARNING:LEADING_SPACE: please, no spaces at the start of a line
#58: FILE: drivers/gpu/drm/i915/gt/intel_breadcrumbs.c:502:
+ return true;$
total: 10 errors, 24 warnings, 0 checks, 104 lines checked
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 4+ messages in thread
* [Intel-gfx] ✗ Fi.CI.BAT: failure for drm/i915/gt: Restore ce->signal flush before releasing virtual engine (rev2)
2021-01-05 10:13 [Intel-gfx] [CI] drm/i915/gt: Restore ce->signal flush before releasing virtual engine Chris Wilson
2021-01-05 16:15 ` [Intel-gfx] ✗ Fi.CI.CHECKPATCH: warning for drm/i915/gt: Restore ce->signal flush before releasing virtual engine (rev2) Patchwork
@ 2021-01-05 16:45 ` Patchwork
1 sibling, 0 replies; 4+ messages in thread
From: Patchwork @ 2021-01-05 16:45 UTC (permalink / raw)
To: Chris Wilson; +Cc: intel-gfx
[-- Attachment #1.1: Type: text/plain, Size: 6658 bytes --]
== Series Details ==
Series: drm/i915/gt: Restore ce->signal flush before releasing virtual engine (rev2)
URL : https://patchwork.freedesktop.org/series/85493/
State : failure
== Summary ==
CI Bug Log - changes from CI_DRM_9547 -> Patchwork_19257
====================================================
Summary
-------
**FAILURE**
Serious unknown changes coming with Patchwork_19257 absolutely need to be
verified manually.
If you think the reported changes have nothing to do with the changes
introduced in Patchwork_19257, 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_19257/index.html
Possible new issues
-------------------
Here are the unknown changes that may have been introduced in Patchwork_19257:
### IGT changes ###
#### Possible regressions ####
* igt@i915_selftest@live@gem:
- fi-bxt-dsi: [PASS][1] -> [DMESG-WARN][2]
[1]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9547/fi-bxt-dsi/igt@i915_selftest@live@gem.html
[2]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19257/fi-bxt-dsi/igt@i915_selftest@live@gem.html
* igt@runner@aborted:
- fi-tgl-y: NOTRUN -> [FAIL][3]
[3]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19257/fi-tgl-y/igt@runner@aborted.html
- fi-tgl-u2: NOTRUN -> [FAIL][4]
[4]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19257/fi-tgl-u2/igt@runner@aborted.html
#### Suppressed ####
The following results come from untrusted machines, tests, or statuses.
They do not affect the overall result.
* igt@runner@aborted:
- {fi-tgl-dsi}: NOTRUN -> [FAIL][5]
[5]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19257/fi-tgl-dsi/igt@runner@aborted.html
Known issues
------------
Here are the changes found in Patchwork_19257 that come from known issues:
### IGT changes ###
#### Issues hit ####
* igt@amdgpu/amd_basic@userptr:
- fi-byt-j1900: NOTRUN -> [SKIP][6] ([fdo#109271]) +17 similar issues
[6]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19257/fi-byt-j1900/igt@amdgpu/amd_basic@userptr.html
* igt@fbdev@write:
- fi-tgl-y: [PASS][7] -> [DMESG-WARN][8] ([i915#402]) +1 similar issue
[7]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9547/fi-tgl-y/igt@fbdev@write.html
[8]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19257/fi-tgl-y/igt@fbdev@write.html
* igt@i915_selftest@live@execlists:
- fi-tgl-y: [PASS][9] -> [INCOMPLETE][10] ([i915#2268])
[9]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9547/fi-tgl-y/igt@i915_selftest@live@execlists.html
[10]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19257/fi-tgl-y/igt@i915_selftest@live@execlists.html
- fi-tgl-u2: [PASS][11] -> [INCOMPLETE][12] ([i915#2268])
[11]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9547/fi-tgl-u2/igt@i915_selftest@live@execlists.html
[12]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19257/fi-tgl-u2/igt@i915_selftest@live@execlists.html
* igt@i915_selftest@live@gem_contexts:
- fi-bxt-dsi: [PASS][13] -> [INCOMPLETE][14] ([i915#2369])
[13]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9547/fi-bxt-dsi/igt@i915_selftest@live@gem_contexts.html
[14]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19257/fi-bxt-dsi/igt@i915_selftest@live@gem_contexts.html
* igt@runner@aborted:
- fi-bxt-dsi: NOTRUN -> [FAIL][15] ([i915#2295])
[15]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19257/fi-bxt-dsi/igt@runner@aborted.html
#### Possible fixes ####
* igt@gem_exec_parallel@engines@contexts:
- fi-tgl-y: [FAIL][16] ([i915#2780]) -> [PASS][17]
[16]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9547/fi-tgl-y/igt@gem_exec_parallel@engines@contexts.html
[17]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19257/fi-tgl-y/igt@gem_exec_parallel@engines@contexts.html
* igt@gem_sync@basic-all:
- fi-tgl-y: [DMESG-WARN][18] ([i915#402]) -> [PASS][19]
[18]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9547/fi-tgl-y/igt@gem_sync@basic-all.html
[19]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19257/fi-tgl-y/igt@gem_sync@basic-all.html
* igt@i915_pm_rpm@module-reload:
- fi-byt-j1900: [INCOMPLETE][20] ([i915#142] / [i915#2405]) -> [PASS][21]
[20]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9547/fi-byt-j1900/igt@i915_pm_rpm@module-reload.html
[21]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19257/fi-byt-j1900/igt@i915_pm_rpm@module-reload.html
* igt@i915_selftest@live@gt_heartbeat:
- fi-kbl-soraka: [DMESG-FAIL][22] ([i915#2291] / [i915#541]) -> [PASS][23]
[22]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9547/fi-kbl-soraka/igt@i915_selftest@live@gt_heartbeat.html
[23]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19257/fi-kbl-soraka/igt@i915_selftest@live@gt_heartbeat.html
{name}: This element is suppressed. This means it is ignored when computing
the status of the difference (SUCCESS, WARNING, or FAILURE).
[fdo#109271]: https://bugs.freedesktop.org/show_bug.cgi?id=109271
[i915#142]: https://gitlab.freedesktop.org/drm/intel/issues/142
[i915#2268]: https://gitlab.freedesktop.org/drm/intel/issues/2268
[i915#2291]: https://gitlab.freedesktop.org/drm/intel/issues/2291
[i915#2295]: https://gitlab.freedesktop.org/drm/intel/issues/2295
[i915#2369]: https://gitlab.freedesktop.org/drm/intel/issues/2369
[i915#2405]: https://gitlab.freedesktop.org/drm/intel/issues/2405
[i915#2780]: https://gitlab.freedesktop.org/drm/intel/issues/2780
[i915#402]: https://gitlab.freedesktop.org/drm/intel/issues/402
[i915#541]: https://gitlab.freedesktop.org/drm/intel/issues/541
Participating hosts (42 -> 37)
------------------------------
Missing (5): fi-ilk-m540 fi-hsw-4200u fi-bsw-cyan fi-ctg-p8600 fi-bdw-samus
Build changes
-------------
* Linux: CI_DRM_9547 -> Patchwork_19257
CI-20190529: 20190529
CI_DRM_9547: 4f31e1ebafa4d59ce9692a7ef7f76e63e51f58d6 @ git://anongit.freedesktop.org/gfx-ci/linux
IGT_5942: e14e76a87c44c684ec958b391b030bb549254f88 @ git://anongit.freedesktop.org/xorg/app/intel-gpu-tools
Patchwork_19257: 7ceba4fd2e8167e9ba0e9a6ffa9fbdbab8649b05 @ git://anongit.freedesktop.org/gfx-ci/linux
== Linux commits ==
7ceba4fd2e81 drm/i915/gt: Restore ce->signal flush before releasing virtual engine
== Logs ==
For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19257/index.html
[-- Attachment #1.2: Type: text/html, Size: 7781 bytes --]
[-- Attachment #2: Type: text/plain, Size: 160 bytes --]
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 4+ messages in thread
* [Intel-gfx] [CI] drm/i915/gt: Restore ce->signal flush before releasing virtual engine
@ 2021-01-05 9:35 Chris Wilson
0 siblings, 0 replies; 4+ messages in thread
From: Chris Wilson @ 2021-01-05 9:35 UTC (permalink / raw)
To: intel-gfx
Before we mark the virtual engine as no longer inflight, flush any
ongoing signaling that may be using the ce->signal_link along the
previous breadcrumbs. On switch to a new physical engine, that link will
be inserted into the new set of breadcrumbs, causing confusion to an
ongoing iterator.
This patch undoes a last minute mistake introduced into commit
bab0557c8dca ("drm/i915/gt: Remove virtual breadcrumb before transfer"),
to simplify later patches whereby instead of unconditionally applying the
flush, it was only applied if the request itself was going to be reused.
Fixes: bab0557c8dca ("drm/i915/gt: Remove virtual breadcrumb before transfer")
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
---
.../drm/i915/gt/intel_execlists_submission.c | 32 ++++++++++---------
1 file changed, 17 insertions(+), 15 deletions(-)
diff --git a/drivers/gpu/drm/i915/gt/intel_execlists_submission.c b/drivers/gpu/drm/i915/gt/intel_execlists_submission.c
index a5b442683c18..db208bb59364 100644
--- a/drivers/gpu/drm/i915/gt/intel_execlists_submission.c
+++ b/drivers/gpu/drm/i915/gt/intel_execlists_submission.c
@@ -581,21 +581,6 @@ resubmit_virtual_request(struct i915_request *rq, struct virtual_engine *ve)
{
struct intel_engine_cs *engine = rq->engine;
- /* Flush concurrent rcu iterators in signal_irq_work */
- if (test_bit(DMA_FENCE_FLAG_ENABLE_SIGNAL_BIT, &rq->fence.flags)) {
- /*
- * After this point, the rq may be transferred to a new
- * sibling, so before we clear ce->inflight make sure that
- * the context has been removed from the b->signalers and
- * furthermore we need to make sure that the concurrent
- * iterator in signal_irq_work is no longer following
- * ce->signal_link.
- */
- i915_request_cancel_breadcrumb(rq);
- while (atomic_read(&engine->breadcrumbs->signaler_active))
- cpu_relax();
- }
-
spin_lock_irq(&engine->active.lock);
clear_bit(I915_FENCE_FLAG_PQUEUE, &rq->fence.flags);
@@ -609,6 +594,19 @@ static void kick_siblings(struct i915_request *rq, struct intel_context *ce)
{
struct virtual_engine *ve = container_of(ce, typeof(*ve), context);
struct intel_engine_cs *engine = rq->engine;
+ bool signals = !list_empty(&ce->signals);
+
+ /* Flush concurrent rcu iterators in signal_irq_work */
+ if (test_bit(DMA_FENCE_FLAG_ENABLE_SIGNAL_BIT, &rq->fence.flags))
+ /*
+ * After this point, the rq may be transferred to a new
+ * sibling, so before we clear ce->inflight make sure that
+ * the context has been removed from the b->signalers and
+ * furthermore we need to make sure that the concurrent
+ * iterator in signal_irq_work is no longer following
+ * ce->signal_link.
+ */
+ i915_request_cancel_breadcrumb(rq);
/*
* This engine is now too busy to run this virtual request, so
@@ -622,6 +620,10 @@ static void kick_siblings(struct i915_request *rq, struct intel_context *ce)
if (READ_ONCE(ve->request))
tasklet_hi_schedule(&ve->base.execlists.tasklet);
+
+ /* Flush concurrent signal_irq_work before we reuse the link */
+ while (signals && atomic_read(&engine->breadcrumbs->signaler_active))
+ cpu_relax();
}
static inline void __execlists_schedule_out(struct i915_request *rq)
--
2.20.1
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply related [flat|nested] 4+ messages in thread
end of thread, other threads:[~2021-01-05 16:45 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-01-05 10:13 [Intel-gfx] [CI] drm/i915/gt: Restore ce->signal flush before releasing virtual engine Chris Wilson
2021-01-05 16:15 ` [Intel-gfx] ✗ Fi.CI.CHECKPATCH: warning for drm/i915/gt: Restore ce->signal flush before releasing virtual engine (rev2) Patchwork
2021-01-05 16:45 ` [Intel-gfx] ✗ Fi.CI.BAT: failure " Patchwork
-- strict thread matches above, loose matches on Subject: below --
2021-01-05 9:35 [Intel-gfx] [CI] drm/i915/gt: Restore ce->signal flush before releasing virtual engine Chris Wilson
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).