* [PATCH] drm/i915: Skip repeated calls to i915_gem_set_wedged()
@ 2018-07-23 14:53 Chris Wilson
2018-07-23 15:35 ` ✓ Fi.CI.BAT: success for " Patchwork
` (12 more replies)
0 siblings, 13 replies; 19+ messages in thread
From: Chris Wilson @ 2018-07-23 14:53 UTC (permalink / raw)
To: intel-gfx
If we already wedged, i915_gem_set_wedged() becomes a complicated no-op.
References: https://bugs.freedesktop.org/show_bug.cgi?id=107343
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
---
drivers/gpu/drm/i915/i915_gem.c | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
index 8b52cb768a67..a4031fab57b0 100644
--- a/drivers/gpu/drm/i915/i915_gem.c
+++ b/drivers/gpu/drm/i915/i915_gem.c
@@ -3312,8 +3312,8 @@ void i915_gem_set_wedged(struct drm_i915_private *i915)
intel_engine_dump(engine, &p, "%s\n", engine->name);
}
- set_bit(I915_WEDGED, &i915->gpu_error.flags);
- smp_mb__after_atomic();
+ if (test_and_set_bit(I915_WEDGED, &i915->gpu_error.flags))
+ goto out;
/*
* First, stop submission to hw, but do not yet complete requests by
@@ -3372,6 +3372,7 @@ void i915_gem_set_wedged(struct drm_i915_private *i915)
i915_gem_reset_finish_engine(engine);
}
+out:
GEM_TRACE("end\n");
wake_up_all(&i915->gpu_error.reset_queue);
--
2.18.0
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply related [flat|nested] 19+ messages in thread
* ✓ Fi.CI.BAT: success for drm/i915: Skip repeated calls to i915_gem_set_wedged()
2018-07-23 14:53 [PATCH] drm/i915: Skip repeated calls to i915_gem_set_wedged() Chris Wilson
@ 2018-07-23 15:35 ` Patchwork
2018-07-23 16:44 ` ✓ Fi.CI.IGT: " Patchwork
` (11 subsequent siblings)
12 siblings, 0 replies; 19+ messages in thread
From: Patchwork @ 2018-07-23 15:35 UTC (permalink / raw)
To: Chris Wilson; +Cc: intel-gfx
== Series Details ==
Series: drm/i915: Skip repeated calls to i915_gem_set_wedged()
URL : https://patchwork.freedesktop.org/series/47067/
State : success
== Summary ==
= CI Bug Log - changes from CI_DRM_4528 -> Patchwork_9747 =
== Summary - SUCCESS ==
No regressions found.
External URL: https://patchwork.freedesktop.org/api/1.0/series/47067/revisions/1/mbox/
== Known issues ==
Here are the changes found in Patchwork_9747 that come from known issues:
=== IGT changes ===
==== Issues hit ====
igt@gem_ctx_create@basic-files:
fi-glk-j4005: PASS -> DMESG-WARN (fdo#105719)
igt@kms_pipe_crc_basic@hang-read-crc-pipe-c:
fi-skl-guc: PASS -> FAIL (fdo#103191)
==== Possible fixes ====
igt@drv_module_reload@basic-no-display:
fi-glk-j4005: DMESG-WARN (fdo#106725) -> PASS
igt@kms_pipe_crc_basic@suspend-read-crc-pipe-c:
fi-ivb-3520m: FAIL (fdo#103375) -> PASS
fdo#103191 https://bugs.freedesktop.org/show_bug.cgi?id=103191
fdo#103375 https://bugs.freedesktop.org/show_bug.cgi?id=103375
fdo#105719 https://bugs.freedesktop.org/show_bug.cgi?id=105719
fdo#106725 https://bugs.freedesktop.org/show_bug.cgi?id=106725
== Participating hosts (48 -> 43) ==
Additional (1): fi-kbl-8809g
Missing (6): fi-ilk-m540 fi-hsw-4200u fi-byt-squawks fi-bsw-cyan fi-ctg-p8600 fi-pnv-d510
== Build changes ==
* Linux: CI_DRM_4528 -> Patchwork_9747
CI_DRM_4528: 9e2763473a5f24fa8848e5508cae60c3b5af3cf3 @ git://anongit.freedesktop.org/gfx-ci/linux
IGT_4571: 65fccc149b85968cdce4737266b056059c1510f3 @ git://anongit.freedesktop.org/xorg/app/intel-gpu-tools
Patchwork_9747: 8c8dac2e80e2deaa195e17732c979a8949325c01 @ git://anongit.freedesktop.org/gfx-ci/linux
== Linux commits ==
8c8dac2e80e2 drm/i915: Skip repeated calls to i915_gem_set_wedged()
== Logs ==
For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_9747/issues.html
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 19+ messages in thread
* ✓ Fi.CI.IGT: success for drm/i915: Skip repeated calls to i915_gem_set_wedged()
2018-07-23 14:53 [PATCH] drm/i915: Skip repeated calls to i915_gem_set_wedged() Chris Wilson
2018-07-23 15:35 ` ✓ Fi.CI.BAT: success for " Patchwork
@ 2018-07-23 16:44 ` Patchwork
2018-07-23 17:21 ` [PATCH] " Chris Wilson
` (10 subsequent siblings)
12 siblings, 0 replies; 19+ messages in thread
From: Patchwork @ 2018-07-23 16:44 UTC (permalink / raw)
To: Chris Wilson; +Cc: intel-gfx
== Series Details ==
Series: drm/i915: Skip repeated calls to i915_gem_set_wedged()
URL : https://patchwork.freedesktop.org/series/47067/
State : success
== Summary ==
= CI Bug Log - changes from CI_DRM_4528_full -> Patchwork_9747_full =
== Summary - SUCCESS ==
No regressions found.
== Known issues ==
Here are the changes found in Patchwork_9747_full that come from known issues:
=== IGT changes ===
==== Possible fixes ====
igt@kms_flip@flip-vs-expired-vblank-interruptible:
shard-glk: FAIL (fdo#105363) -> PASS
fdo#105363 https://bugs.freedesktop.org/show_bug.cgi?id=105363
== Participating hosts (5 -> 5) ==
No changes in participating hosts
== Build changes ==
* Linux: CI_DRM_4528 -> Patchwork_9747
CI_DRM_4528: 9e2763473a5f24fa8848e5508cae60c3b5af3cf3 @ git://anongit.freedesktop.org/gfx-ci/linux
IGT_4571: 65fccc149b85968cdce4737266b056059c1510f3 @ git://anongit.freedesktop.org/xorg/app/intel-gpu-tools
Patchwork_9747: 8c8dac2e80e2deaa195e17732c979a8949325c01 @ git://anongit.freedesktop.org/gfx-ci/linux
piglit_4509: fdc5a4ca11124ab8413c7988896eec4c97336694 @ git://anongit.freedesktop.org/piglit
== Logs ==
For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_9747/shards.html
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 19+ messages in thread
* [PATCH] drm/i915: Skip repeated calls to i915_gem_set_wedged()
2018-07-23 14:53 [PATCH] drm/i915: Skip repeated calls to i915_gem_set_wedged() Chris Wilson
2018-07-23 15:35 ` ✓ Fi.CI.BAT: success for " Patchwork
2018-07-23 16:44 ` ✓ Fi.CI.IGT: " Patchwork
@ 2018-07-23 17:21 ` Chris Wilson
2018-07-23 17:37 ` ✗ Fi.CI.CHECKPATCH: warning for drm/i915: Skip repeated calls to i915_gem_set_wedged() (rev2) Patchwork
` (9 subsequent siblings)
12 siblings, 0 replies; 19+ messages in thread
From: Chris Wilson @ 2018-07-23 17:21 UTC (permalink / raw)
To: intel-gfx
If we already wedged, i915_gem_set_wedged() becomes a complicated no-op.
v2: Make sure the double set-wedged is synchronous, a parallel call
should not return before the driver is indeed wedged.
References: https://bugs.freedesktop.org/show_bug.cgi?id=107343
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
---
drivers/gpu/drm/i915/i915_gem.c | 26 ++++++++++++++++++++++----
drivers/gpu/drm/i915/i915_gpu_error.h | 3 ++-
2 files changed, 24 insertions(+), 5 deletions(-)
diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
index 8b52cb768a67..99c91c7ad46c 100644
--- a/drivers/gpu/drm/i915/i915_gem.c
+++ b/drivers/gpu/drm/i915/i915_gem.c
@@ -3298,12 +3298,24 @@ static void nop_complete_submit_request(struct i915_request *request)
spin_unlock_irqrestore(&request->engine->timeline.lock, flags);
}
+static void wait_for_wedged(struct drm_i915_private *i915)
+{
+ struct i915_gpu_error *error = &i915->gpu_error;
+ DEFINE_WAIT_BIT(wq_entry, &error->flags, I915_WEDGED);
+
+ __wait_on_bit(&error->reset_queue,
+ &wq_entry, bit_wait, TASK_UNINTERRUPTIBLE);
+}
+
void i915_gem_set_wedged(struct drm_i915_private *i915)
{
struct intel_engine_cs *engine;
enum intel_engine_id id;
- GEM_TRACE("start\n");
+ if (test_and_set_bit(I915_WEDGE_IN_PROGRESS, &i915->gpu_error.flags)) {
+ wait_for_wedged(i915);
+ return;
+ }
if (GEM_SHOW_DEBUG()) {
struct drm_printer p = drm_debug_printer(__func__);
@@ -3312,8 +3324,7 @@ void i915_gem_set_wedged(struct drm_i915_private *i915)
intel_engine_dump(engine, &p, "%s\n", engine->name);
}
- set_bit(I915_WEDGED, &i915->gpu_error.flags);
- smp_mb__after_atomic();
+ GEM_TRACE("start\n");
/*
* First, stop submission to hw, but do not yet complete requests by
@@ -3372,6 +3383,9 @@ void i915_gem_set_wedged(struct drm_i915_private *i915)
i915_gem_reset_finish_engine(engine);
}
+ smp_mb__before_atomic();
+ set_bit(I915_WEDGED, &i915->gpu_error.flags);
+
GEM_TRACE("end\n");
wake_up_all(&i915->gpu_error.reset_queue);
@@ -3379,10 +3393,14 @@ void i915_gem_set_wedged(struct drm_i915_private *i915)
bool i915_gem_unset_wedged(struct drm_i915_private *i915)
{
+ struct i915_gpu_error *error = &i915->gpu_error;
struct i915_timeline *tl;
lockdep_assert_held(&i915->drm.struct_mutex);
- if (!test_bit(I915_WEDGED, &i915->gpu_error.flags))
+
+ while (test_and_clear_bit(I915_WEDGE_IN_PROGRESS, &error->flags))
+ wait_for_wedged(i915);
+ if (!test_bit(I915_WEDGE_IN_PROGRESS, &error->flags))
return true;
GEM_TRACE("start\n");
diff --git a/drivers/gpu/drm/i915/i915_gpu_error.h b/drivers/gpu/drm/i915/i915_gpu_error.h
index f893a4e8b783..1a78a8f330f2 100644
--- a/drivers/gpu/drm/i915/i915_gpu_error.h
+++ b/drivers/gpu/drm/i915/i915_gpu_error.h
@@ -267,8 +267,9 @@ struct i915_gpu_error {
#define I915_RESET_BACKOFF 0
#define I915_RESET_HANDOFF 1
#define I915_RESET_MODESET 2
+#define I915_RESET_ENGINE 3
#define I915_WEDGED (BITS_PER_LONG - 1)
-#define I915_RESET_ENGINE (I915_WEDGED - I915_NUM_ENGINES)
+#define I915_WEDGE_IN_PROGRESS (I915_WEDGED - 1)
/** Number of times an engine has been reset */
u32 reset_engine_count[I915_NUM_ENGINES];
--
2.18.0
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply related [flat|nested] 19+ messages in thread
* ✗ Fi.CI.CHECKPATCH: warning for drm/i915: Skip repeated calls to i915_gem_set_wedged() (rev2)
2018-07-23 14:53 [PATCH] drm/i915: Skip repeated calls to i915_gem_set_wedged() Chris Wilson
` (2 preceding siblings ...)
2018-07-23 17:21 ` [PATCH] " Chris Wilson
@ 2018-07-23 17:37 ` Patchwork
2018-07-23 17:59 ` ✓ Fi.CI.BAT: success " Patchwork
` (8 subsequent siblings)
12 siblings, 0 replies; 19+ messages in thread
From: Patchwork @ 2018-07-23 17:37 UTC (permalink / raw)
To: Chris Wilson; +Cc: intel-gfx
== Series Details ==
Series: drm/i915: Skip repeated calls to i915_gem_set_wedged() (rev2)
URL : https://patchwork.freedesktop.org/series/47067/
State : warning
== Summary ==
$ dim checkpatch origin/drm-tip
9b348bfd231b drm/i915: Skip repeated calls to i915_gem_set_wedged()
-:58: WARNING:MEMORY_BARRIER: memory barrier without comment
#58: FILE: drivers/gpu/drm/i915/i915_gem.c:3386:
+ smp_mb__before_atomic();
total: 0 errors, 1 warnings, 0 checks, 68 lines checked
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 19+ messages in thread
* ✓ Fi.CI.BAT: success for drm/i915: Skip repeated calls to i915_gem_set_wedged() (rev2)
2018-07-23 14:53 [PATCH] drm/i915: Skip repeated calls to i915_gem_set_wedged() Chris Wilson
` (3 preceding siblings ...)
2018-07-23 17:37 ` ✗ Fi.CI.CHECKPATCH: warning for drm/i915: Skip repeated calls to i915_gem_set_wedged() (rev2) Patchwork
@ 2018-07-23 17:59 ` Patchwork
2018-07-23 19:39 ` [PATCH] drm/i915: Skip repeated calls to i915_gem_set_wedged() Chris Wilson
` (7 subsequent siblings)
12 siblings, 0 replies; 19+ messages in thread
From: Patchwork @ 2018-07-23 17:59 UTC (permalink / raw)
To: Chris Wilson; +Cc: intel-gfx
== Series Details ==
Series: drm/i915: Skip repeated calls to i915_gem_set_wedged() (rev2)
URL : https://patchwork.freedesktop.org/series/47067/
State : success
== Summary ==
= CI Bug Log - changes from CI_DRM_4529 -> Patchwork_9749 =
== Summary - WARNING ==
Minor unknown changes coming with Patchwork_9749 need to be verified
manually.
If you think the reported changes have nothing to do with the changes
introduced in Patchwork_9749, please notify your bug team to allow them
to document this new failure mode, which will reduce false positives in CI.
External URL: https://patchwork.freedesktop.org/api/1.0/series/47067/revisions/2/mbox/
== Possible new issues ==
Here are the unknown changes that may have been introduced in Patchwork_9749:
=== IGT changes ===
==== Warnings ====
igt@drv_selftest@live_execlists:
fi-kbl-7500u: SKIP -> PASS +1
== Known issues ==
Here are the changes found in Patchwork_9749 that come from known issues:
=== IGT changes ===
==== Issues hit ====
igt@drv_selftest@mock_sanitycheck:
fi-glk-j4005: PASS -> DMESG-WARN (fdo#107344)
igt@gem_exec_fence@nb-await-default:
fi-glk-j4005: PASS -> DMESG-WARN (fdo#105719)
igt@kms_flip@basic-flip-vs-modeset:
fi-glk-j4005: PASS -> DMESG-WARN (fdo#106000)
==== Possible fixes ====
igt@drv_selftest@live_hangcheck:
fi-kbl-7500u: DMESG-FAIL (fdo#106947) -> PASS
fi-skl-guc: DMESG-FAIL (fdo#107174) -> PASS
igt@drv_selftest@live_workarounds:
fi-skl-6700hq: DMESG-FAIL (fdo#107292) -> PASS
igt@gem_exec_gttfill@basic:
fi-glk-j4005: DMESG-WARN (fdo#106097) -> PASS
fdo#105719 https://bugs.freedesktop.org/show_bug.cgi?id=105719
fdo#106000 https://bugs.freedesktop.org/show_bug.cgi?id=106000
fdo#106097 https://bugs.freedesktop.org/show_bug.cgi?id=106097
fdo#106947 https://bugs.freedesktop.org/show_bug.cgi?id=106947
fdo#107174 https://bugs.freedesktop.org/show_bug.cgi?id=107174
fdo#107292 https://bugs.freedesktop.org/show_bug.cgi?id=107292
fdo#107344 https://bugs.freedesktop.org/show_bug.cgi?id=107344
== Participating hosts (50 -> 43) ==
Missing (7): fi-ilk-m540 fi-hsw-4200u fi-byt-squawks fi-bsw-cyan fi-ctg-p8600 fi-skl-caroline fi-byt-clapper
== Build changes ==
* Linux: CI_DRM_4529 -> Patchwork_9749
CI_DRM_4529: f44f476c6bb735cb4067af0c4417c49d105bf419 @ git://anongit.freedesktop.org/gfx-ci/linux
IGT_4571: 65fccc149b85968cdce4737266b056059c1510f3 @ git://anongit.freedesktop.org/xorg/app/intel-gpu-tools
Patchwork_9749: 9b348bfd231b38751c4d528a89d795745484c760 @ git://anongit.freedesktop.org/gfx-ci/linux
== Linux commits ==
9b348bfd231b drm/i915: Skip repeated calls to i915_gem_set_wedged()
== Logs ==
For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_9749/issues.html
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 19+ messages in thread
* [PATCH] drm/i915: Skip repeated calls to i915_gem_set_wedged()
2018-07-23 14:53 [PATCH] drm/i915: Skip repeated calls to i915_gem_set_wedged() Chris Wilson
` (4 preceding siblings ...)
2018-07-23 17:59 ` ✓ Fi.CI.BAT: success " Patchwork
@ 2018-07-23 19:39 ` Chris Wilson
2018-07-23 19:41 ` ✓ Fi.CI.IGT: success for drm/i915: Skip repeated calls to i915_gem_set_wedged() (rev2) Patchwork
` (6 subsequent siblings)
12 siblings, 0 replies; 19+ messages in thread
From: Chris Wilson @ 2018-07-23 19:39 UTC (permalink / raw)
To: intel-gfx
If we already wedged, i915_gem_set_wedged() becomes a complicated no-op.
v2: Make sure the double set-wedged is synchronous, a parallel call
should not return before the driver is indeed wedged.
References: https://bugs.freedesktop.org/show_bug.cgi?id=107343
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
---
drivers/gpu/drm/i915/i915_gem.c | 31 ++++++++++++++++++++++-----
drivers/gpu/drm/i915/i915_gpu_error.h | 3 ++-
2 files changed, 28 insertions(+), 6 deletions(-)
diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
index 8b52cb768a67..832c65734c47 100644
--- a/drivers/gpu/drm/i915/i915_gem.c
+++ b/drivers/gpu/drm/i915/i915_gem.c
@@ -3298,12 +3298,26 @@ static void nop_complete_submit_request(struct i915_request *request)
spin_unlock_irqrestore(&request->engine->timeline.lock, flags);
}
+static void wait_for_wedged(struct i915_gpu_error *error)
+{
+ DEFINE_WAIT_BIT(wq_entry, &error->flags, I915_WEDGED);
+
+ __wait_on_bit(&error->reset_queue,
+ &wq_entry, bit_wait, TASK_UNINTERRUPTIBLE);
+}
+
void i915_gem_set_wedged(struct drm_i915_private *i915)
{
+ struct i915_gpu_error *error = &i915->gpu_error;
struct intel_engine_cs *engine;
enum intel_engine_id id;
- GEM_TRACE("start\n");
+ if (test_and_set_bit(I915_WEDGE_IN_PROGRESS, &error->flags)) {
+ wait_for_wedged(error);
+ return;
+ }
+ if (test_bit(I915_WEDGED, &error->flags))
+ return;
if (GEM_SHOW_DEBUG()) {
struct drm_printer p = drm_debug_printer(__func__);
@@ -3312,8 +3326,7 @@ void i915_gem_set_wedged(struct drm_i915_private *i915)
intel_engine_dump(engine, &p, "%s\n", engine->name);
}
- set_bit(I915_WEDGED, &i915->gpu_error.flags);
- smp_mb__after_atomic();
+ GEM_TRACE("start\n");
/*
* First, stop submission to hw, but do not yet complete requests by
@@ -3372,17 +3385,25 @@ void i915_gem_set_wedged(struct drm_i915_private *i915)
i915_gem_reset_finish_engine(engine);
}
+ smp_mb__before_atomic();
+ set_bit(I915_WEDGED, &error->flags);
+ clear_bit(I915_WEDGE_IN_PROGRESS, &error->flags);
+
GEM_TRACE("end\n");
- wake_up_all(&i915->gpu_error.reset_queue);
+ wake_up_all(&error->reset_queue);
}
bool i915_gem_unset_wedged(struct drm_i915_private *i915)
{
+ struct i915_gpu_error *error = &i915->gpu_error;
struct i915_timeline *tl;
lockdep_assert_held(&i915->drm.struct_mutex);
- if (!test_bit(I915_WEDGED, &i915->gpu_error.flags))
+
+ if (test_bit(I915_WEDGE_IN_PROGRESS, &error->flags))
+ wait_for_wedged(error);
+ if (!test_bit(I915_WEDGED, &error->flags))
return true;
GEM_TRACE("start\n");
diff --git a/drivers/gpu/drm/i915/i915_gpu_error.h b/drivers/gpu/drm/i915/i915_gpu_error.h
index f893a4e8b783..1a78a8f330f2 100644
--- a/drivers/gpu/drm/i915/i915_gpu_error.h
+++ b/drivers/gpu/drm/i915/i915_gpu_error.h
@@ -267,8 +267,9 @@ struct i915_gpu_error {
#define I915_RESET_BACKOFF 0
#define I915_RESET_HANDOFF 1
#define I915_RESET_MODESET 2
+#define I915_RESET_ENGINE 3
#define I915_WEDGED (BITS_PER_LONG - 1)
-#define I915_RESET_ENGINE (I915_WEDGED - I915_NUM_ENGINES)
+#define I915_WEDGE_IN_PROGRESS (I915_WEDGED - 1)
/** Number of times an engine has been reset */
u32 reset_engine_count[I915_NUM_ENGINES];
--
2.18.0
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply related [flat|nested] 19+ messages in thread
* ✓ Fi.CI.IGT: success for drm/i915: Skip repeated calls to i915_gem_set_wedged() (rev2)
2018-07-23 14:53 [PATCH] drm/i915: Skip repeated calls to i915_gem_set_wedged() Chris Wilson
` (5 preceding siblings ...)
2018-07-23 19:39 ` [PATCH] drm/i915: Skip repeated calls to i915_gem_set_wedged() Chris Wilson
@ 2018-07-23 19:41 ` Patchwork
2018-07-23 19:54 ` ✗ Fi.CI.CHECKPATCH: warning for drm/i915: Skip repeated calls to i915_gem_set_wedged() (rev3) Patchwork
` (5 subsequent siblings)
12 siblings, 0 replies; 19+ messages in thread
From: Patchwork @ 2018-07-23 19:41 UTC (permalink / raw)
To: Chris Wilson; +Cc: intel-gfx
== Series Details ==
Series: drm/i915: Skip repeated calls to i915_gem_set_wedged() (rev2)
URL : https://patchwork.freedesktop.org/series/47067/
State : success
== Summary ==
= CI Bug Log - changes from CI_DRM_4529_full -> Patchwork_9749_full =
== Summary - WARNING ==
Minor unknown changes coming with Patchwork_9749_full need to be verified
manually.
If you think the reported changes have nothing to do with the changes
introduced in Patchwork_9749_full, please notify your bug team to allow them
to document this new failure mode, which will reduce false positives in CI.
== Possible new issues ==
Here are the unknown changes that may have been introduced in Patchwork_9749_full:
=== IGT changes ===
==== Warnings ====
igt@gem_mocs_settings@mocs-rc6-blt:
shard-kbl: PASS -> SKIP +1
igt@gem_mocs_settings@mocs-rc6-vebox:
shard-kbl: SKIP -> PASS +2
== Known issues ==
Here are the changes found in Patchwork_9749_full that come from known issues:
=== IGT changes ===
==== Issues hit ====
igt@gem_eio@execbuf:
shard-glk: PASS -> INCOMPLETE (k.org#198133, fdo#103359) +15
igt@gem_eio@in-flight-contexts-1us:
shard-kbl: PASS -> INCOMPLETE (fdo#103665) +14
igt@gem_eio@in-flight-contexts-immediate:
shard-hsw: PASS -> INCOMPLETE (fdo#103540) +14
igt@gem_eio@in-flight-immediate:
shard-apl: PASS -> INCOMPLETE (fdo#103927) +15
igt@gem_eio@in-flight-suspend:
shard-kbl: PASS -> INCOMPLETE (fdo#106702, fdo#103665)
igt@gem_eio@throttle:
shard-snb: PASS -> INCOMPLETE (fdo#105411) +16
fdo#103359 https://bugs.freedesktop.org/show_bug.cgi?id=103359
fdo#103540 https://bugs.freedesktop.org/show_bug.cgi?id=103540
fdo#103665 https://bugs.freedesktop.org/show_bug.cgi?id=103665
fdo#103927 https://bugs.freedesktop.org/show_bug.cgi?id=103927
fdo#105411 https://bugs.freedesktop.org/show_bug.cgi?id=105411
fdo#106702 https://bugs.freedesktop.org/show_bug.cgi?id=106702
k.org#198133 https://bugzilla.kernel.org/show_bug.cgi?id=198133
== Participating hosts (5 -> 5) ==
No changes in participating hosts
== Build changes ==
* Linux: CI_DRM_4529 -> Patchwork_9749
CI_DRM_4529: f44f476c6bb735cb4067af0c4417c49d105bf419 @ git://anongit.freedesktop.org/gfx-ci/linux
IGT_4571: 65fccc149b85968cdce4737266b056059c1510f3 @ git://anongit.freedesktop.org/xorg/app/intel-gpu-tools
Patchwork_9749: 9b348bfd231b38751c4d528a89d795745484c760 @ git://anongit.freedesktop.org/gfx-ci/linux
piglit_4509: fdc5a4ca11124ab8413c7988896eec4c97336694 @ git://anongit.freedesktop.org/piglit
== Logs ==
For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_9749/shards.html
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 19+ messages in thread
* ✗ Fi.CI.CHECKPATCH: warning for drm/i915: Skip repeated calls to i915_gem_set_wedged() (rev3)
2018-07-23 14:53 [PATCH] drm/i915: Skip repeated calls to i915_gem_set_wedged() Chris Wilson
` (6 preceding siblings ...)
2018-07-23 19:41 ` ✓ Fi.CI.IGT: success for drm/i915: Skip repeated calls to i915_gem_set_wedged() (rev2) Patchwork
@ 2018-07-23 19:54 ` Patchwork
2018-07-23 19:56 ` [PATCH v4] drm/i915: Skip repeated calls to i915_gem_set_wedged() Chris Wilson
` (4 subsequent siblings)
12 siblings, 0 replies; 19+ messages in thread
From: Patchwork @ 2018-07-23 19:54 UTC (permalink / raw)
To: Chris Wilson; +Cc: intel-gfx
== Series Details ==
Series: drm/i915: Skip repeated calls to i915_gem_set_wedged() (rev3)
URL : https://patchwork.freedesktop.org/series/47067/
State : warning
== Summary ==
$ dim checkpatch origin/drm-tip
fbfeaf105d25 drm/i915: Skip repeated calls to i915_gem_set_wedged()
-:60: WARNING:MEMORY_BARRIER: memory barrier without comment
#60: FILE: drivers/gpu/drm/i915/i915_gem.c:3388:
+ smp_mb__before_atomic();
total: 0 errors, 1 warnings, 0 checks, 73 lines checked
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 19+ messages in thread
* [PATCH v4] drm/i915: Skip repeated calls to i915_gem_set_wedged()
2018-07-23 14:53 [PATCH] drm/i915: Skip repeated calls to i915_gem_set_wedged() Chris Wilson
` (7 preceding siblings ...)
2018-07-23 19:54 ` ✗ Fi.CI.CHECKPATCH: warning for drm/i915: Skip repeated calls to i915_gem_set_wedged() (rev3) Patchwork
@ 2018-07-23 19:56 ` Chris Wilson
2018-07-23 20:15 ` ✓ Fi.CI.BAT: success for drm/i915: Skip repeated calls to i915_gem_set_wedged() (rev3) Patchwork
` (3 subsequent siblings)
12 siblings, 0 replies; 19+ messages in thread
From: Chris Wilson @ 2018-07-23 19:56 UTC (permalink / raw)
To: intel-gfx
If we already wedged, i915_gem_set_wedged() becomes a complicated no-op.
v2: Make sure the double set-wedged is synchronous, a parallel call
should not return before the driver is indeed wedged.
References: https://bugs.freedesktop.org/show_bug.cgi?id=107343
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
---
drivers/gpu/drm/i915/i915_gem.c | 32 ++++++++++++++++++++++-----
drivers/gpu/drm/i915/i915_gpu_error.h | 3 ++-
2 files changed, 29 insertions(+), 6 deletions(-)
diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
index 8b52cb768a67..912be7356984 100644
--- a/drivers/gpu/drm/i915/i915_gem.c
+++ b/drivers/gpu/drm/i915/i915_gem.c
@@ -3298,12 +3298,27 @@ static void nop_complete_submit_request(struct i915_request *request)
spin_unlock_irqrestore(&request->engine->timeline.lock, flags);
}
+static void wait_for_wedged(struct i915_gpu_error *error)
+{
+ DEFINE_WAIT_BIT(wq_entry, &error->flags, I915_WEDGED);
+
+ __wait_on_bit(&error->reset_queue,
+ &wq_entry, bit_wait, TASK_UNINTERRUPTIBLE);
+}
+
void i915_gem_set_wedged(struct drm_i915_private *i915)
{
+ struct i915_gpu_error *error = &i915->gpu_error;
struct intel_engine_cs *engine;
enum intel_engine_id id;
- GEM_TRACE("start\n");
+ if (test_bit(I915_WEDGED, &error->flags))
+ return;
+
+ if (test_and_set_bit(I915_WEDGE_IN_PROGRESS, &error->flags)) {
+ wait_for_wedged(error);
+ return;
+ }
if (GEM_SHOW_DEBUG()) {
struct drm_printer p = drm_debug_printer(__func__);
@@ -3312,8 +3327,7 @@ void i915_gem_set_wedged(struct drm_i915_private *i915)
intel_engine_dump(engine, &p, "%s\n", engine->name);
}
- set_bit(I915_WEDGED, &i915->gpu_error.flags);
- smp_mb__after_atomic();
+ GEM_TRACE("start\n");
/*
* First, stop submission to hw, but do not yet complete requests by
@@ -3372,17 +3386,25 @@ void i915_gem_set_wedged(struct drm_i915_private *i915)
i915_gem_reset_finish_engine(engine);
}
+ smp_mb__before_atomic();
+ set_bit(I915_WEDGED, &error->flags);
+ clear_bit(I915_WEDGE_IN_PROGRESS, &error->flags);
+
GEM_TRACE("end\n");
- wake_up_all(&i915->gpu_error.reset_queue);
+ wake_up_all(&error->reset_queue);
}
bool i915_gem_unset_wedged(struct drm_i915_private *i915)
{
+ struct i915_gpu_error *error = &i915->gpu_error;
struct i915_timeline *tl;
lockdep_assert_held(&i915->drm.struct_mutex);
- if (!test_bit(I915_WEDGED, &i915->gpu_error.flags))
+
+ if (test_bit(I915_WEDGE_IN_PROGRESS, &error->flags))
+ wait_for_wedged(error);
+ if (!test_bit(I915_WEDGED, &error->flags))
return true;
GEM_TRACE("start\n");
diff --git a/drivers/gpu/drm/i915/i915_gpu_error.h b/drivers/gpu/drm/i915/i915_gpu_error.h
index f893a4e8b783..1a78a8f330f2 100644
--- a/drivers/gpu/drm/i915/i915_gpu_error.h
+++ b/drivers/gpu/drm/i915/i915_gpu_error.h
@@ -267,8 +267,9 @@ struct i915_gpu_error {
#define I915_RESET_BACKOFF 0
#define I915_RESET_HANDOFF 1
#define I915_RESET_MODESET 2
+#define I915_RESET_ENGINE 3
#define I915_WEDGED (BITS_PER_LONG - 1)
-#define I915_RESET_ENGINE (I915_WEDGED - I915_NUM_ENGINES)
+#define I915_WEDGE_IN_PROGRESS (I915_WEDGED - 1)
/** Number of times an engine has been reset */
u32 reset_engine_count[I915_NUM_ENGINES];
--
2.18.0
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply related [flat|nested] 19+ messages in thread
* ✓ Fi.CI.BAT: success for drm/i915: Skip repeated calls to i915_gem_set_wedged() (rev3)
2018-07-23 14:53 [PATCH] drm/i915: Skip repeated calls to i915_gem_set_wedged() Chris Wilson
` (8 preceding siblings ...)
2018-07-23 19:56 ` [PATCH v4] drm/i915: Skip repeated calls to i915_gem_set_wedged() Chris Wilson
@ 2018-07-23 20:15 ` Patchwork
2018-07-23 20:19 ` ✗ Fi.CI.CHECKPATCH: warning for drm/i915: Skip repeated calls to i915_gem_set_wedged() (rev4) Patchwork
` (2 subsequent siblings)
12 siblings, 0 replies; 19+ messages in thread
From: Patchwork @ 2018-07-23 20:15 UTC (permalink / raw)
To: Chris Wilson; +Cc: intel-gfx
== Series Details ==
Series: drm/i915: Skip repeated calls to i915_gem_set_wedged() (rev3)
URL : https://patchwork.freedesktop.org/series/47067/
State : success
== Summary ==
= CI Bug Log - changes from CI_DRM_4530 -> Patchwork_9751 =
== Summary - SUCCESS ==
No regressions found.
External URL: https://patchwork.freedesktop.org/api/1.0/series/47067/revisions/3/mbox/
== Known issues ==
Here are the changes found in Patchwork_9751 that come from known issues:
=== IGT changes ===
==== Issues hit ====
igt@drv_selftest@live_workarounds:
{fi-cfl-8109u}: PASS -> DMESG-FAIL (fdo#107292)
igt@gem_exec_suspend@basic-s4-devices:
fi-kbl-7500u: PASS -> DMESG-WARN (fdo#107139, fdo#105128)
igt@kms_flip@basic-flip-vs-wf_vblank:
fi-glk-j4005: PASS -> FAIL (fdo#100368)
igt@kms_pipe_crc_basic@read-crc-pipe-a-frame-sequence:
fi-glk-j4005: PASS -> FAIL (fdo#103481)
==== Possible fixes ====
igt@drv_selftest@live_workarounds:
fi-skl-6700hq: DMESG-FAIL (fdo#107292) -> PASS
igt@gem_exec_suspend@basic-s3:
fi-glk-j4005: DMESG-WARN (fdo#106097) -> PASS
igt@kms_chamelium@dp-edid-read:
fi-kbl-7500u: FAIL (fdo#103841) -> PASS
igt@kms_flip@basic-flip-vs-wf_vblank:
fi-glk-dsi: FAIL (fdo#100368) -> PASS
{name}: This element is suppressed. This means it is ignored when computing
the status of the difference (SUCCESS, WARNING, or FAILURE).
fdo#100368 https://bugs.freedesktop.org/show_bug.cgi?id=100368
fdo#103481 https://bugs.freedesktop.org/show_bug.cgi?id=103481
fdo#103841 https://bugs.freedesktop.org/show_bug.cgi?id=103841
fdo#105128 https://bugs.freedesktop.org/show_bug.cgi?id=105128
fdo#106097 https://bugs.freedesktop.org/show_bug.cgi?id=106097
fdo#107139 https://bugs.freedesktop.org/show_bug.cgi?id=107139
fdo#107292 https://bugs.freedesktop.org/show_bug.cgi?id=107292
== Participating hosts (50 -> 43) ==
Missing (7): fi-ilk-m540 fi-hsw-4200u fi-byt-squawks fi-bsw-cyan fi-ctg-p8600 fi-skl-caroline fi-byt-clapper
== Build changes ==
* Linux: CI_DRM_4530 -> Patchwork_9751
CI_DRM_4530: d27cc4a37a5cc1ef14a3aafdcb6682e5f6a85d09 @ git://anongit.freedesktop.org/gfx-ci/linux
IGT_4571: 65fccc149b85968cdce4737266b056059c1510f3 @ git://anongit.freedesktop.org/xorg/app/intel-gpu-tools
Patchwork_9751: fbfeaf105d2509bfd9333dfe8779b143b0dbd14a @ git://anongit.freedesktop.org/gfx-ci/linux
== Linux commits ==
fbfeaf105d25 drm/i915: Skip repeated calls to i915_gem_set_wedged()
== Logs ==
For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_9751/issues.html
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 19+ messages in thread
* ✗ Fi.CI.CHECKPATCH: warning for drm/i915: Skip repeated calls to i915_gem_set_wedged() (rev4)
2018-07-23 14:53 [PATCH] drm/i915: Skip repeated calls to i915_gem_set_wedged() Chris Wilson
` (9 preceding siblings ...)
2018-07-23 20:15 ` ✓ Fi.CI.BAT: success for drm/i915: Skip repeated calls to i915_gem_set_wedged() (rev3) Patchwork
@ 2018-07-23 20:19 ` Patchwork
2018-07-23 20:42 ` ✗ Fi.CI.BAT: failure " Patchwork
2018-07-23 22:23 ` [PATCH] drm/i915: Skip repeated calls to i915_gem_set_wedged() Rodrigo Vivi
12 siblings, 0 replies; 19+ messages in thread
From: Patchwork @ 2018-07-23 20:19 UTC (permalink / raw)
To: Chris Wilson; +Cc: intel-gfx
== Series Details ==
Series: drm/i915: Skip repeated calls to i915_gem_set_wedged() (rev4)
URL : https://patchwork.freedesktop.org/series/47067/
State : warning
== Summary ==
$ dim checkpatch origin/drm-tip
a85ab6631205 drm/i915: Skip repeated calls to i915_gem_set_wedged()
-:61: WARNING:MEMORY_BARRIER: memory barrier without comment
#61: FILE: drivers/gpu/drm/i915/i915_gem.c:3389:
+ smp_mb__before_atomic();
total: 0 errors, 1 warnings, 0 checks, 74 lines checked
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 19+ messages in thread
* ✗ Fi.CI.BAT: failure for drm/i915: Skip repeated calls to i915_gem_set_wedged() (rev4)
2018-07-23 14:53 [PATCH] drm/i915: Skip repeated calls to i915_gem_set_wedged() Chris Wilson
` (10 preceding siblings ...)
2018-07-23 20:19 ` ✗ Fi.CI.CHECKPATCH: warning for drm/i915: Skip repeated calls to i915_gem_set_wedged() (rev4) Patchwork
@ 2018-07-23 20:42 ` Patchwork
2018-07-23 22:23 ` [PATCH] drm/i915: Skip repeated calls to i915_gem_set_wedged() Rodrigo Vivi
12 siblings, 0 replies; 19+ messages in thread
From: Patchwork @ 2018-07-23 20:42 UTC (permalink / raw)
To: Chris Wilson; +Cc: intel-gfx
== Series Details ==
Series: drm/i915: Skip repeated calls to i915_gem_set_wedged() (rev4)
URL : https://patchwork.freedesktop.org/series/47067/
State : failure
== Summary ==
= CI Bug Log - changes from CI_DRM_4530 -> Patchwork_9752 =
== Summary - FAILURE ==
Serious unknown changes coming with Patchwork_9752 absolutely need to be
verified manually.
If you think the reported changes have nothing to do with the changes
introduced in Patchwork_9752, please notify your bug team to allow them
to document this new failure mode, which will reduce false positives in CI.
External URL: https://patchwork.freedesktop.org/api/1.0/series/47067/revisions/4/mbox/
== Possible new issues ==
Here are the unknown changes that may have been introduced in Patchwork_9752:
=== IGT changes ===
==== Possible regressions ====
igt@gem_cpu_reloc@basic:
fi-byt-n2820: PASS -> FAIL
== Known issues ==
Here are the changes found in Patchwork_9752 that come from known issues:
=== IGT changes ===
==== Issues hit ====
igt@drv_selftest@live_hangcheck:
fi-kbl-7560u: PASS -> DMESG-FAIL (fdo#106947, fdo#106560)
igt@kms_flip@basic-flip-vs-modeset:
fi-glk-j4005: PASS -> DMESG-WARN (fdo#106000)
igt@kms_flip@basic-flip-vs-wf_vblank:
fi-glk-j4005: PASS -> FAIL (fdo#100368)
igt@kms_pipe_crc_basic@suspend-read-crc-pipe-b:
fi-snb-2520m: NOTRUN -> INCOMPLETE (fdo#103713)
igt@kms_pipe_crc_basic@suspend-read-crc-pipe-c:
fi-bxt-dsi: PASS -> INCOMPLETE (fdo#103927)
==== Possible fixes ====
igt@debugfs_test@read_all_entries:
fi-snb-2520m: INCOMPLETE (fdo#103713) -> PASS
igt@drv_selftest@live_workarounds:
fi-skl-6700hq: DMESG-FAIL (fdo#107292) -> PASS
igt@gem_exec_suspend@basic-s3:
fi-glk-j4005: DMESG-WARN (fdo#106097) -> PASS
igt@kms_chamelium@dp-edid-read:
fi-kbl-7500u: FAIL (fdo#103841) -> PASS
igt@kms_flip@basic-flip-vs-wf_vblank:
fi-glk-dsi: FAIL (fdo#100368) -> PASS
fdo#100368 https://bugs.freedesktop.org/show_bug.cgi?id=100368
fdo#103713 https://bugs.freedesktop.org/show_bug.cgi?id=103713
fdo#103841 https://bugs.freedesktop.org/show_bug.cgi?id=103841
fdo#103927 https://bugs.freedesktop.org/show_bug.cgi?id=103927
fdo#106000 https://bugs.freedesktop.org/show_bug.cgi?id=106000
fdo#106097 https://bugs.freedesktop.org/show_bug.cgi?id=106097
fdo#106560 https://bugs.freedesktop.org/show_bug.cgi?id=106560
fdo#106947 https://bugs.freedesktop.org/show_bug.cgi?id=106947
fdo#107292 https://bugs.freedesktop.org/show_bug.cgi?id=107292
== Participating hosts (50 -> 43) ==
Missing (7): fi-ilk-m540 fi-hsw-4200u fi-byt-squawks fi-bsw-cyan fi-ctg-p8600 fi-skl-caroline fi-byt-clapper
== Build changes ==
* Linux: CI_DRM_4530 -> Patchwork_9752
CI_DRM_4530: d27cc4a37a5cc1ef14a3aafdcb6682e5f6a85d09 @ git://anongit.freedesktop.org/gfx-ci/linux
IGT_4571: 65fccc149b85968cdce4737266b056059c1510f3 @ git://anongit.freedesktop.org/xorg/app/intel-gpu-tools
Patchwork_9752: a85ab663120589128f229d9d90a434d726b37fdf @ git://anongit.freedesktop.org/gfx-ci/linux
== Linux commits ==
a85ab6631205 drm/i915: Skip repeated calls to i915_gem_set_wedged()
== Logs ==
For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_9752/issues.html
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [PATCH] drm/i915: Skip repeated calls to i915_gem_set_wedged()
2018-07-23 14:53 [PATCH] drm/i915: Skip repeated calls to i915_gem_set_wedged() Chris Wilson
` (11 preceding siblings ...)
2018-07-23 20:42 ` ✗ Fi.CI.BAT: failure " Patchwork
@ 2018-07-23 22:23 ` Rodrigo Vivi
2018-07-25 7:09 ` Chris Wilson
12 siblings, 1 reply; 19+ messages in thread
From: Rodrigo Vivi @ 2018-07-23 22:23 UTC (permalink / raw)
To: Chris Wilson; +Cc: intel-gfx
On Mon, Jul 23, 2018 at 03:53:35PM +0100, Chris Wilson wrote:
> If we already wedged, i915_gem_set_wedged() becomes a complicated no-op.
>
> References: https://bugs.freedesktop.org/show_bug.cgi?id=107343
> Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Reviewed-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
> ---
> drivers/gpu/drm/i915/i915_gem.c | 5 +++--
> 1 file changed, 3 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
> index 8b52cb768a67..a4031fab57b0 100644
> --- a/drivers/gpu/drm/i915/i915_gem.c
> +++ b/drivers/gpu/drm/i915/i915_gem.c
> @@ -3312,8 +3312,8 @@ void i915_gem_set_wedged(struct drm_i915_private *i915)
> intel_engine_dump(engine, &p, "%s\n", engine->name);
> }
>
> - set_bit(I915_WEDGED, &i915->gpu_error.flags);
> - smp_mb__after_atomic();
> + if (test_and_set_bit(I915_WEDGED, &i915->gpu_error.flags))
> + goto out;
>
> /*
> * First, stop submission to hw, but do not yet complete requests by
> @@ -3372,6 +3372,7 @@ void i915_gem_set_wedged(struct drm_i915_private *i915)
> i915_gem_reset_finish_engine(engine);
> }
>
> +out:
> GEM_TRACE("end\n");
>
> wake_up_all(&i915->gpu_error.reset_queue);
> --
> 2.18.0
>
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/intel-gfx
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [PATCH] drm/i915: Skip repeated calls to i915_gem_set_wedged()
2018-07-23 22:23 ` [PATCH] drm/i915: Skip repeated calls to i915_gem_set_wedged() Rodrigo Vivi
@ 2018-07-25 7:09 ` Chris Wilson
0 siblings, 0 replies; 19+ messages in thread
From: Chris Wilson @ 2018-07-25 7:09 UTC (permalink / raw)
To: Rodrigo Vivi; +Cc: intel-gfx
Quoting Rodrigo Vivi (2018-07-23 23:23:32)
> On Mon, Jul 23, 2018 at 03:53:35PM +0100, Chris Wilson wrote:
> > If we already wedged, i915_gem_set_wedged() becomes a complicated no-op.
> >
> > References: https://bugs.freedesktop.org/show_bug.cgi?id=107343
> > Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
>
> Reviewed-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
Ta, I'll come back to v2+ when we have a test case that demonstrates the
danger in the race between wedging and unwedging. (Ever descending the
scale of probability.)
-Chris
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 19+ messages in thread
* [PATCH] drm/i915: Skip repeated calls to i915_gem_set_wedged()
2018-08-15 9:25 Chris Wilson
2018-08-15 9:40 ` Chris Wilson
2018-08-15 9:42 ` Chris Wilson
@ 2018-08-15 12:45 ` Chris Wilson
2 siblings, 0 replies; 19+ messages in thread
From: Chris Wilson @ 2018-08-15 12:45 UTC (permalink / raw)
To: intel-gfx
If we already wedged, i915_gem_set_wedged() becomes a complicated no-op.
v2: Make sure the double set-wedged is synchronous, a parallel call
should not return before the driver is indeed wedged.
v3: Use a real mutex (and fingers crossed that lockdep is ok!)
v4: Fix incorrect conversion to return false if unwedged.
References: https://bugs.freedesktop.org/show_bug.cgi?id=107343
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Mika Kuoppala <mika.kuoppala@linux.intel.com>
---
drivers/gpu/drm/i915/i915_gem.c | 34 +++++++++++++------
drivers/gpu/drm/i915/i915_gpu_error.h | 4 ++-
.../gpu/drm/i915/selftests/mock_gem_device.c | 1 +
3 files changed, 28 insertions(+), 11 deletions(-)
diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
index 0453eb42a1a3..98a3e2601ab4 100644
--- a/drivers/gpu/drm/i915/i915_gem.c
+++ b/drivers/gpu/drm/i915/i915_gem.c
@@ -3300,10 +3300,15 @@ static void nop_complete_submit_request(struct i915_request *request)
void i915_gem_set_wedged(struct drm_i915_private *i915)
{
+ struct i915_gpu_error *error = &i915->gpu_error;
struct intel_engine_cs *engine;
enum intel_engine_id id;
- GEM_TRACE("start\n");
+ mutex_lock(&error->wedge_mutex);
+ if (test_bit(I915_WEDGED, &error->flags)) {
+ mutex_unlock(&error->wedge_mutex);
+ return;
+ }
if (GEM_SHOW_DEBUG()) {
struct drm_printer p = drm_debug_printer(__func__);
@@ -3312,8 +3317,7 @@ void i915_gem_set_wedged(struct drm_i915_private *i915)
intel_engine_dump(engine, &p, "%s\n", engine->name);
}
- if (test_and_set_bit(I915_WEDGED, &i915->gpu_error.flags))
- goto out;
+ GEM_TRACE("start\n");
/*
* First, stop submission to hw, but do not yet complete requests by
@@ -3373,20 +3377,28 @@ void i915_gem_set_wedged(struct drm_i915_private *i915)
i915_gem_reset_finish_engine(engine);
}
-out:
+ smp_mb__before_atomic();
+ set_bit(I915_WEDGED, &error->flags);
+
GEM_TRACE("end\n");
+ mutex_unlock(&error->wedge_mutex);
- wake_up_all(&i915->gpu_error.reset_queue);
+ wake_up_all(&error->reset_queue);
}
bool i915_gem_unset_wedged(struct drm_i915_private *i915)
{
+ struct i915_gpu_error *error = &i915->gpu_error;
struct i915_timeline *tl;
+ bool ret = false;
lockdep_assert_held(&i915->drm.struct_mutex);
- if (!test_bit(I915_WEDGED, &i915->gpu_error.flags))
+
+ if (!test_bit(I915_WEDGED, &error->flags))
return true;
+ mutex_lock(&error->wedge_mutex);
+
GEM_TRACE("start\n");
/*
@@ -3420,7 +3432,7 @@ bool i915_gem_unset_wedged(struct drm_i915_private *i915)
*/
if (dma_fence_default_wait(&rq->fence, true,
MAX_SCHEDULE_TIMEOUT) < 0)
- return false;
+ goto unlock;
}
i915_retire_requests(i915);
GEM_BUG_ON(i915->gt.active_requests);
@@ -3439,10 +3451,11 @@ bool i915_gem_unset_wedged(struct drm_i915_private *i915)
GEM_TRACE("end\n");
- smp_mb__before_atomic(); /* complete takeover before enabling execbuf */
- clear_bit(I915_WEDGED, &i915->gpu_error.flags);
+ ret = true;
+unlock:
+ mutex_unlock(&i915->gpu_error.wedge_mutex);
- return true;
+ return ret;
}
static void
@@ -5764,6 +5777,7 @@ int i915_gem_init_early(struct drm_i915_private *dev_priv)
i915_gem_idle_work_handler);
init_waitqueue_head(&dev_priv->gpu_error.wait_queue);
init_waitqueue_head(&dev_priv->gpu_error.reset_queue);
+ mutex_init(&dev_priv->gpu_error.wedge_mutex);
atomic_set(&dev_priv->mm.bsd_engine_dispatch_index, 0);
diff --git a/drivers/gpu/drm/i915/i915_gpu_error.h b/drivers/gpu/drm/i915/i915_gpu_error.h
index f893a4e8b783..49950b1231cf 100644
--- a/drivers/gpu/drm/i915/i915_gpu_error.h
+++ b/drivers/gpu/drm/i915/i915_gpu_error.h
@@ -267,8 +267,8 @@ struct i915_gpu_error {
#define I915_RESET_BACKOFF 0
#define I915_RESET_HANDOFF 1
#define I915_RESET_MODESET 2
+#define I915_RESET_ENGINE 3
#define I915_WEDGED (BITS_PER_LONG - 1)
-#define I915_RESET_ENGINE (I915_WEDGED - I915_NUM_ENGINES)
/** Number of times an engine has been reset */
u32 reset_engine_count[I915_NUM_ENGINES];
@@ -279,6 +279,8 @@ struct i915_gpu_error {
/** Reason for the current *global* reset */
const char *reason;
+ struct mutex wedge_mutex; /* serialises wedging/unwedging */
+
/**
* Waitqueue to signal when a hang is detected. Used to for waiters
* to release the struct_mutex for the reset to procede.
diff --git a/drivers/gpu/drm/i915/selftests/mock_gem_device.c b/drivers/gpu/drm/i915/selftests/mock_gem_device.c
index 43ed8b28aeaa..6beb1f47e988 100644
--- a/drivers/gpu/drm/i915/selftests/mock_gem_device.c
+++ b/drivers/gpu/drm/i915/selftests/mock_gem_device.c
@@ -186,6 +186,7 @@ struct drm_i915_private *mock_gem_device(void)
init_waitqueue_head(&i915->gpu_error.wait_queue);
init_waitqueue_head(&i915->gpu_error.reset_queue);
+ mutex_init(&i915->gpu_error.wedge_mutex);
i915->wq = alloc_ordered_workqueue("mock", 0);
if (!i915->wq)
--
2.18.0
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply related [flat|nested] 19+ messages in thread
* Re: [PATCH] drm/i915: Skip repeated calls to i915_gem_set_wedged()
2018-08-15 9:25 Chris Wilson
2018-08-15 9:40 ` Chris Wilson
@ 2018-08-15 9:42 ` Chris Wilson
2018-08-15 12:45 ` Chris Wilson
2 siblings, 0 replies; 19+ messages in thread
From: Chris Wilson @ 2018-08-15 9:42 UTC (permalink / raw)
To: intel-gfx
Quoting Chris Wilson (2018-08-15 10:25:37)
> If we already wedged, i915_gem_set_wedged() becomes a complicated no-op.
>
> v2: Make sure the double set-wedged is synchronous, a parallel call
> should not return before the driver is indeed wedged.
>
> References: https://bugs.freedesktop.org/show_bug.cgi?id=107343
> Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
> Cc: Mika Kuoppala <mika.kuoppala@linux.intel.com>
Fwiw, I actually a landed a different version of this patch earlier.
The only advantage (esp. v3) is that we serialise the wedging more
carefully.
-Chris
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 19+ messages in thread
* [PATCH] drm/i915: Skip repeated calls to i915_gem_set_wedged()
2018-08-15 9:25 Chris Wilson
@ 2018-08-15 9:40 ` Chris Wilson
2018-08-15 9:42 ` Chris Wilson
2018-08-15 12:45 ` Chris Wilson
2 siblings, 0 replies; 19+ messages in thread
From: Chris Wilson @ 2018-08-15 9:40 UTC (permalink / raw)
To: intel-gfx
If we already wedged, i915_gem_set_wedged() becomes a complicated no-op.
v2: Make sure the double set-wedged is synchronous, a parallel call
should not return before the driver is indeed wedged.
v3: Use a real mutex (and fingers crossed that lockdep is ok!)
References: https://bugs.freedesktop.org/show_bug.cgi?id=107343
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Mika Kuoppala <mika.kuoppala@linux.intel.com>
---
drivers/gpu/drm/i915/i915_gem.c | 36 +++++++++++++------
drivers/gpu/drm/i915/i915_gpu_error.h | 4 ++-
.../gpu/drm/i915/selftests/mock_gem_device.c | 1 +
3 files changed, 29 insertions(+), 12 deletions(-)
diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
index 0453eb42a1a3..d9e00705536d 100644
--- a/drivers/gpu/drm/i915/i915_gem.c
+++ b/drivers/gpu/drm/i915/i915_gem.c
@@ -3300,10 +3300,15 @@ static void nop_complete_submit_request(struct i915_request *request)
void i915_gem_set_wedged(struct drm_i915_private *i915)
{
+ struct i915_gpu_error *error = &i915->gpu_error;
struct intel_engine_cs *engine;
enum intel_engine_id id;
- GEM_TRACE("start\n");
+ mutex_lock(&error->wedge_mutex);
+ if (test_bit(I915_WEDGED, &error->flags)) {
+ mutex_unlock(&error->wedge_mutex);
+ return;
+ }
if (GEM_SHOW_DEBUG()) {
struct drm_printer p = drm_debug_printer(__func__);
@@ -3312,8 +3317,7 @@ void i915_gem_set_wedged(struct drm_i915_private *i915)
intel_engine_dump(engine, &p, "%s\n", engine->name);
}
- if (test_and_set_bit(I915_WEDGED, &i915->gpu_error.flags))
- goto out;
+ GEM_TRACE("start\n");
/*
* First, stop submission to hw, but do not yet complete requests by
@@ -3373,19 +3377,27 @@ void i915_gem_set_wedged(struct drm_i915_private *i915)
i915_gem_reset_finish_engine(engine);
}
-out:
+ smp_mb__before_atomic();
+ set_bit(I915_WEDGED, &error->flags);
+
GEM_TRACE("end\n");
+ mutex_unlock(&error->wedge_mutex);
- wake_up_all(&i915->gpu_error.reset_queue);
+ wake_up_all(&error->reset_queue);
}
bool i915_gem_unset_wedged(struct drm_i915_private *i915)
{
+ struct i915_gpu_error *error = &i915->gpu_error;
struct i915_timeline *tl;
+ bool ret = false;
lockdep_assert_held(&i915->drm.struct_mutex);
- if (!test_bit(I915_WEDGED, &i915->gpu_error.flags))
- return true;
+
+ if (!test_bit(I915_WEDGED, &error->flags))
+ return false;
+
+ mutex_lock(&error->wedge_mutex);
GEM_TRACE("start\n");
@@ -3420,7 +3432,7 @@ bool i915_gem_unset_wedged(struct drm_i915_private *i915)
*/
if (dma_fence_default_wait(&rq->fence, true,
MAX_SCHEDULE_TIMEOUT) < 0)
- return false;
+ goto unlock;
}
i915_retire_requests(i915);
GEM_BUG_ON(i915->gt.active_requests);
@@ -3439,10 +3451,11 @@ bool i915_gem_unset_wedged(struct drm_i915_private *i915)
GEM_TRACE("end\n");
- smp_mb__before_atomic(); /* complete takeover before enabling execbuf */
- clear_bit(I915_WEDGED, &i915->gpu_error.flags);
+ ret = true;
+unlock:
+ mutex_unlock(&i915->gpu_error.wedge_mutex);
- return true;
+ return ret;
}
static void
@@ -5764,6 +5777,7 @@ int i915_gem_init_early(struct drm_i915_private *dev_priv)
i915_gem_idle_work_handler);
init_waitqueue_head(&dev_priv->gpu_error.wait_queue);
init_waitqueue_head(&dev_priv->gpu_error.reset_queue);
+ mutex_init(&dev_priv->gpu_error.wedge_mutex);
atomic_set(&dev_priv->mm.bsd_engine_dispatch_index, 0);
diff --git a/drivers/gpu/drm/i915/i915_gpu_error.h b/drivers/gpu/drm/i915/i915_gpu_error.h
index f893a4e8b783..49950b1231cf 100644
--- a/drivers/gpu/drm/i915/i915_gpu_error.h
+++ b/drivers/gpu/drm/i915/i915_gpu_error.h
@@ -267,8 +267,8 @@ struct i915_gpu_error {
#define I915_RESET_BACKOFF 0
#define I915_RESET_HANDOFF 1
#define I915_RESET_MODESET 2
+#define I915_RESET_ENGINE 3
#define I915_WEDGED (BITS_PER_LONG - 1)
-#define I915_RESET_ENGINE (I915_WEDGED - I915_NUM_ENGINES)
/** Number of times an engine has been reset */
u32 reset_engine_count[I915_NUM_ENGINES];
@@ -279,6 +279,8 @@ struct i915_gpu_error {
/** Reason for the current *global* reset */
const char *reason;
+ struct mutex wedge_mutex; /* serialises wedging/unwedging */
+
/**
* Waitqueue to signal when a hang is detected. Used to for waiters
* to release the struct_mutex for the reset to procede.
diff --git a/drivers/gpu/drm/i915/selftests/mock_gem_device.c b/drivers/gpu/drm/i915/selftests/mock_gem_device.c
index 43ed8b28aeaa..6beb1f47e988 100644
--- a/drivers/gpu/drm/i915/selftests/mock_gem_device.c
+++ b/drivers/gpu/drm/i915/selftests/mock_gem_device.c
@@ -186,6 +186,7 @@ struct drm_i915_private *mock_gem_device(void)
init_waitqueue_head(&i915->gpu_error.wait_queue);
init_waitqueue_head(&i915->gpu_error.reset_queue);
+ mutex_init(&i915->gpu_error.wedge_mutex);
i915->wq = alloc_ordered_workqueue("mock", 0);
if (!i915->wq)
--
2.18.0
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply related [flat|nested] 19+ messages in thread
* [PATCH] drm/i915: Skip repeated calls to i915_gem_set_wedged()
@ 2018-08-15 9:25 Chris Wilson
2018-08-15 9:40 ` Chris Wilson
` (2 more replies)
0 siblings, 3 replies; 19+ messages in thread
From: Chris Wilson @ 2018-08-15 9:25 UTC (permalink / raw)
To: intel-gfx
If we already wedged, i915_gem_set_wedged() becomes a complicated no-op.
v2: Make sure the double set-wedged is synchronous, a parallel call
should not return before the driver is indeed wedged.
References: https://bugs.freedesktop.org/show_bug.cgi?id=107343
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Mika Kuoppala <mika.kuoppala@linux.intel.com>
---
drivers/gpu/drm/i915/i915_gem.c | 33 ++++++++++++++++++++++-----
drivers/gpu/drm/i915/i915_gpu_error.h | 3 ++-
2 files changed, 29 insertions(+), 7 deletions(-)
diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
index 0453eb42a1a3..4778d324529e 100644
--- a/drivers/gpu/drm/i915/i915_gem.c
+++ b/drivers/gpu/drm/i915/i915_gem.c
@@ -3298,12 +3298,27 @@ static void nop_complete_submit_request(struct i915_request *request)
spin_unlock_irqrestore(&request->engine->timeline.lock, flags);
}
+static void wait_for_wedged(struct i915_gpu_error *error)
+{
+ DEFINE_WAIT_BIT(wq_entry, &error->flags, I915_WEDGED);
+
+ __wait_on_bit(&error->reset_queue,
+ &wq_entry, bit_wait, TASK_UNINTERRUPTIBLE);
+}
+
void i915_gem_set_wedged(struct drm_i915_private *i915)
{
+ struct i915_gpu_error *error = &i915->gpu_error;
struct intel_engine_cs *engine;
enum intel_engine_id id;
- GEM_TRACE("start\n");
+ if (test_bit(I915_WEDGED, &error->flags))
+ return;
+
+ if (test_and_set_bit(I915_WEDGE_IN_PROGRESS, &error->flags)) {
+ wait_for_wedged(error);
+ return;
+ }
if (GEM_SHOW_DEBUG()) {
struct drm_printer p = drm_debug_printer(__func__);
@@ -3312,8 +3327,7 @@ void i915_gem_set_wedged(struct drm_i915_private *i915)
intel_engine_dump(engine, &p, "%s\n", engine->name);
}
- if (test_and_set_bit(I915_WEDGED, &i915->gpu_error.flags))
- goto out;
+ GEM_TRACE("start\n");
/*
* First, stop submission to hw, but do not yet complete requests by
@@ -3373,18 +3387,25 @@ void i915_gem_set_wedged(struct drm_i915_private *i915)
i915_gem_reset_finish_engine(engine);
}
-out:
+ smp_mb__before_atomic();
+ set_bit(I915_WEDGED, &error->flags);
+ clear_bit(I915_WEDGE_IN_PROGRESS, &error->flags);
+
GEM_TRACE("end\n");
- wake_up_all(&i915->gpu_error.reset_queue);
+ wake_up_all(&error->reset_queue);
}
bool i915_gem_unset_wedged(struct drm_i915_private *i915)
{
+ struct i915_gpu_error *error = &i915->gpu_error;
struct i915_timeline *tl;
lockdep_assert_held(&i915->drm.struct_mutex);
- if (!test_bit(I915_WEDGED, &i915->gpu_error.flags))
+
+ if (test_bit(I915_WEDGE_IN_PROGRESS, &error->flags))
+ wait_for_wedged(error);
+ if (!test_bit(I915_WEDGED, &error->flags))
return true;
GEM_TRACE("start\n");
diff --git a/drivers/gpu/drm/i915/i915_gpu_error.h b/drivers/gpu/drm/i915/i915_gpu_error.h
index f893a4e8b783..1a78a8f330f2 100644
--- a/drivers/gpu/drm/i915/i915_gpu_error.h
+++ b/drivers/gpu/drm/i915/i915_gpu_error.h
@@ -267,8 +267,9 @@ struct i915_gpu_error {
#define I915_RESET_BACKOFF 0
#define I915_RESET_HANDOFF 1
#define I915_RESET_MODESET 2
+#define I915_RESET_ENGINE 3
#define I915_WEDGED (BITS_PER_LONG - 1)
-#define I915_RESET_ENGINE (I915_WEDGED - I915_NUM_ENGINES)
+#define I915_WEDGE_IN_PROGRESS (I915_WEDGED - 1)
/** Number of times an engine has been reset */
u32 reset_engine_count[I915_NUM_ENGINES];
--
2.18.0
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply related [flat|nested] 19+ messages in thread
end of thread, other threads:[~2018-08-15 12:45 UTC | newest]
Thread overview: 19+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-07-23 14:53 [PATCH] drm/i915: Skip repeated calls to i915_gem_set_wedged() Chris Wilson
2018-07-23 15:35 ` ✓ Fi.CI.BAT: success for " Patchwork
2018-07-23 16:44 ` ✓ Fi.CI.IGT: " Patchwork
2018-07-23 17:21 ` [PATCH] " Chris Wilson
2018-07-23 17:37 ` ✗ Fi.CI.CHECKPATCH: warning for drm/i915: Skip repeated calls to i915_gem_set_wedged() (rev2) Patchwork
2018-07-23 17:59 ` ✓ Fi.CI.BAT: success " Patchwork
2018-07-23 19:39 ` [PATCH] drm/i915: Skip repeated calls to i915_gem_set_wedged() Chris Wilson
2018-07-23 19:41 ` ✓ Fi.CI.IGT: success for drm/i915: Skip repeated calls to i915_gem_set_wedged() (rev2) Patchwork
2018-07-23 19:54 ` ✗ Fi.CI.CHECKPATCH: warning for drm/i915: Skip repeated calls to i915_gem_set_wedged() (rev3) Patchwork
2018-07-23 19:56 ` [PATCH v4] drm/i915: Skip repeated calls to i915_gem_set_wedged() Chris Wilson
2018-07-23 20:15 ` ✓ Fi.CI.BAT: success for drm/i915: Skip repeated calls to i915_gem_set_wedged() (rev3) Patchwork
2018-07-23 20:19 ` ✗ Fi.CI.CHECKPATCH: warning for drm/i915: Skip repeated calls to i915_gem_set_wedged() (rev4) Patchwork
2018-07-23 20:42 ` ✗ Fi.CI.BAT: failure " Patchwork
2018-07-23 22:23 ` [PATCH] drm/i915: Skip repeated calls to i915_gem_set_wedged() Rodrigo Vivi
2018-07-25 7:09 ` Chris Wilson
2018-08-15 9:25 Chris Wilson
2018-08-15 9:40 ` Chris Wilson
2018-08-15 9:42 ` Chris Wilson
2018-08-15 12:45 ` Chris Wilson
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.