* [PATCH] drm/i915: Limit C-states when waiting for the active request
@ 2018-08-03 14:53 Chris Wilson
2018-08-03 15:47 ` ✓ Fi.CI.BAT: success for drm/i915: Limit C-states when waiting for the active request (rev7) Patchwork
2018-08-03 17:44 ` ✓ Fi.CI.IGT: " Patchwork
0 siblings, 2 replies; 3+ messages in thread
From: Chris Wilson @ 2018-08-03 14:53 UTC (permalink / raw)
To: intel-gfx; +Cc: Eero Tamminen
If we are waiting for the currently executing request, we have a good
idea that it will be completed in the very near future and so want to
cap the CPU_DMA_LATENCY to ensure that we wake up the client quickly.
v2: Not allowed to block in kmalloc after setting TASK_INTERRUPTIBLE.
v3: Avoid the blocking notifier as well for TASK_INTERRUPTIBLE
v4: Beautification?
v5: And ignore the preemptibility of queue_work before schedule.
v6: Use highpri wq to keep our pm_qos window as small as possible.
Testcase: igt/gem_sync/store-default
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Tvrtko Ursulin <tvrtko.ursulin@linux.intel.com>
Cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
Cc: Eero Tamminen <eero.t.tamminen@intel.com>
Cc: Francisco Jerez <currojerez@riseup.net>
Cc: Mika Kuoppala <mika.kuoppala@linux.intel.com>
Cc: Dmitry Rogozhkin <dmitry.v.rogozhkin@intel.com>
---
drivers/gpu/drm/i915/i915_request.c | 59 +++++++++++++++++++++++++++++
1 file changed, 59 insertions(+)
diff --git a/drivers/gpu/drm/i915/i915_request.c b/drivers/gpu/drm/i915/i915_request.c
index 5c2c93cbab12..67fd2ec75d78 100644
--- a/drivers/gpu/drm/i915/i915_request.c
+++ b/drivers/gpu/drm/i915/i915_request.c
@@ -1258,6 +1258,58 @@ static bool __i915_wait_request_check_and_reset(struct i915_request *request)
return true;
}
+struct wait_dma_qos {
+ struct pm_qos_request req;
+ struct work_struct add, del;
+};
+
+static void __wait_dma_qos_add(struct work_struct *work)
+{
+ struct wait_dma_qos *qos = container_of(work, typeof(*qos), add);
+
+ pm_qos_add_request(&qos->req, PM_QOS_CPU_DMA_LATENCY, 50);
+}
+
+static void __wait_dma_qos_del(struct work_struct *work)
+{
+ struct wait_dma_qos *qos = container_of(work, typeof(*qos), del);
+
+ if (!cancel_work_sync(&qos->add))
+ pm_qos_remove_request(&qos->req);
+
+ kfree(qos);
+}
+
+static struct wait_dma_qos *wait_dma_qos_add(void)
+{
+ struct wait_dma_qos *qos;
+
+ /* Called under TASK_INTERRUPTIBLE, so not allowed to sleep/block. */
+ qos = kzalloc(sizeof(*qos), GFP_NOWAIT | __GFP_NOWARN);
+ if (!qos)
+ return NULL;
+
+ INIT_WORK(&qos->add, __wait_dma_qos_add);
+ INIT_WORK(&qos->del, __wait_dma_qos_del);
+
+ /*
+ * Schedule the enabling work on the local cpu so that it should only
+ * take effect if we actually sleep. If schedule() short circuits due to
+ * our request already being completed, we should then be able to cancel
+ * the work before it is even run.
+ */
+ queue_work_on(raw_smp_processor_id(), system_highpri_wq, &qos->add);
+
+ return qos;
+}
+
+static void wait_dma_qos_del(struct wait_dma_qos *qos)
+{
+ /* Defer to worker so not incur extra latency for our woken client. */
+ if (qos)
+ queue_work(system_highpri_wq, &qos->del);
+}
+
/**
* i915_request_wait - wait until execution of request has finished
* @rq: the request to wait upon
@@ -1286,6 +1338,7 @@ long i915_request_wait(struct i915_request *rq,
wait_queue_head_t *errq = &rq->i915->gpu_error.wait_queue;
DEFINE_WAIT_FUNC(reset, default_wake_function);
DEFINE_WAIT_FUNC(exec, default_wake_function);
+ struct wait_dma_qos *qos = NULL;
struct intel_wait wait;
might_sleep();
@@ -1363,6 +1416,11 @@ long i915_request_wait(struct i915_request *rq,
break;
}
+ if (!qos &&
+ i915_seqno_passed(intel_engine_get_seqno(rq->engine),
+ wait.seqno - 1))
+ qos = wait_dma_qos_add();
+
timeout = io_schedule_timeout(timeout);
if (intel_wait_complete(&wait) &&
@@ -1412,6 +1470,7 @@ long i915_request_wait(struct i915_request *rq,
if (flags & I915_WAIT_LOCKED)
remove_wait_queue(errq, &reset);
remove_wait_queue(&rq->execute, &exec);
+ wait_dma_qos_del(qos);
trace_i915_request_wait_end(rq);
return timeout;
--
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] 3+ messages in thread
* ✓ Fi.CI.BAT: success for drm/i915: Limit C-states when waiting for the active request (rev7)
2018-08-03 14:53 [PATCH] drm/i915: Limit C-states when waiting for the active request Chris Wilson
@ 2018-08-03 15:47 ` Patchwork
2018-08-03 17:44 ` ✓ Fi.CI.IGT: " Patchwork
1 sibling, 0 replies; 3+ messages in thread
From: Patchwork @ 2018-08-03 15:47 UTC (permalink / raw)
To: Chris Wilson; +Cc: intel-gfx
== Series Details ==
Series: drm/i915: Limit C-states when waiting for the active request (rev7)
URL : https://patchwork.freedesktop.org/series/47420/
State : success
== Summary ==
= CI Bug Log - changes from CI_DRM_4613 -> Patchwork_9847 =
== Summary - SUCCESS ==
No regressions found.
External URL: https://patchwork.freedesktop.org/api/1.0/series/47420/revisions/7/mbox/
== Known issues ==
Here are the changes found in Patchwork_9847 that come from known issues:
=== IGT changes ===
==== Issues hit ====
igt@kms_frontbuffer_tracking@basic:
fi-hsw-peppy: PASS -> DMESG-FAIL (fdo#106103, fdo#102614)
igt@kms_pipe_crc_basic@nonblocking-crc-pipe-b:
{fi-byt-clapper}: PASS -> FAIL (fdo#107362)
igt@kms_pipe_crc_basic@suspend-read-crc-pipe-c:
fi-bxt-dsi: PASS -> INCOMPLETE (fdo#103927)
==== Possible fixes ====
igt@drv_selftest@live_hangcheck:
fi-skl-guc: DMESG-FAIL (fdo#107174) -> PASS
igt@drv_selftest@live_workarounds:
fi-bdw-5557u: DMESG-FAIL (fdo#107292) -> PASS
fi-cnl-psr: DMESG-FAIL (fdo#107292) -> PASS
{name}: This element is suppressed. This means it is ignored when computing
the status of the difference (SUCCESS, WARNING, or FAILURE).
fdo#102614 https://bugs.freedesktop.org/show_bug.cgi?id=102614
fdo#103927 https://bugs.freedesktop.org/show_bug.cgi?id=103927
fdo#106103 https://bugs.freedesktop.org/show_bug.cgi?id=106103
fdo#107174 https://bugs.freedesktop.org/show_bug.cgi?id=107174
fdo#107292 https://bugs.freedesktop.org/show_bug.cgi?id=107292
fdo#107362 https://bugs.freedesktop.org/show_bug.cgi?id=107362
== Participating hosts (52 -> 48) ==
Additional (1): fi-glk-j4005
Missing (5): fi-ctg-p8600 fi-ilk-m540 fi-byt-squawks fi-bsw-cyan fi-hsw-4200u
== Build changes ==
* Linux: CI_DRM_4613 -> Patchwork_9847
CI_DRM_4613: e3dd88c4ffdcda9f36bdb43cbdd7eaa605002055 @ git://anongit.freedesktop.org/gfx-ci/linux
IGT_4587: 5d78c73d871525ec9caecd88ad7d9abe36637314 @ git://anongit.freedesktop.org/xorg/app/intel-gpu-tools
Patchwork_9847: f6472a130b414b074498fbe6ced8faf47ac5c685 @ git://anongit.freedesktop.org/gfx-ci/linux
== Linux commits ==
f6472a130b41 drm/i915: Limit C-states when waiting for the active request
== Logs ==
For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_9847/issues.html
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 3+ messages in thread
* ✓ Fi.CI.IGT: success for drm/i915: Limit C-states when waiting for the active request (rev7)
2018-08-03 14:53 [PATCH] drm/i915: Limit C-states when waiting for the active request Chris Wilson
2018-08-03 15:47 ` ✓ Fi.CI.BAT: success for drm/i915: Limit C-states when waiting for the active request (rev7) Patchwork
@ 2018-08-03 17:44 ` Patchwork
1 sibling, 0 replies; 3+ messages in thread
From: Patchwork @ 2018-08-03 17:44 UTC (permalink / raw)
To: Chris Wilson; +Cc: intel-gfx
== Series Details ==
Series: drm/i915: Limit C-states when waiting for the active request (rev7)
URL : https://patchwork.freedesktop.org/series/47420/
State : success
== Summary ==
= CI Bug Log - changes from CI_DRM_4613_full -> Patchwork_9847_full =
== Summary - WARNING ==
Minor unknown changes coming with Patchwork_9847_full need to be verified
manually.
If you think the reported changes have nothing to do with the changes
introduced in Patchwork_9847_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_9847_full:
=== IGT changes ===
==== Warnings ====
igt@pm_rc6_residency@rc6-accuracy:
shard-kbl: PASS -> SKIP
== Known issues ==
Here are the changes found in Patchwork_9847_full that come from known issues:
=== IGT changes ===
==== Issues hit ====
igt@kms_atomic_transition@1x-modeset-transitions-nonblocking-fencing:
shard-glk: PASS -> FAIL (fdo#105703)
igt@kms_flip@flip-vs-expired-vblank:
shard-glk: PASS -> FAIL (fdo#102887, fdo#105363)
igt@kms_setmode@basic:
shard-kbl: NOTRUN -> FAIL (fdo#99912)
==== Possible fixes ====
igt@gem_eio@reset-stress:
shard-hsw: FAIL -> PASS
igt@gem_ppgtt@blt-vs-render-ctx0:
shard-kbl: INCOMPLETE (fdo#106023, fdo#103665) -> PASS
igt@kms_setmode@basic:
shard-apl: FAIL (fdo#99912) -> PASS
fdo#102887 https://bugs.freedesktop.org/show_bug.cgi?id=102887
fdo#103665 https://bugs.freedesktop.org/show_bug.cgi?id=103665
fdo#105363 https://bugs.freedesktop.org/show_bug.cgi?id=105363
fdo#105703 https://bugs.freedesktop.org/show_bug.cgi?id=105703
fdo#106023 https://bugs.freedesktop.org/show_bug.cgi?id=106023
fdo#99912 https://bugs.freedesktop.org/show_bug.cgi?id=99912
== Participating hosts (5 -> 5) ==
No changes in participating hosts
== Build changes ==
* Linux: CI_DRM_4613 -> Patchwork_9847
CI_DRM_4613: e3dd88c4ffdcda9f36bdb43cbdd7eaa605002055 @ git://anongit.freedesktop.org/gfx-ci/linux
IGT_4587: 5d78c73d871525ec9caecd88ad7d9abe36637314 @ git://anongit.freedesktop.org/xorg/app/intel-gpu-tools
Patchwork_9847: f6472a130b414b074498fbe6ced8faf47ac5c685 @ 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_9847/shards.html
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2018-08-03 17:44 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-08-03 14:53 [PATCH] drm/i915: Limit C-states when waiting for the active request Chris Wilson
2018-08-03 15:47 ` ✓ Fi.CI.BAT: success for drm/i915: Limit C-states when waiting for the active request (rev7) Patchwork
2018-08-03 17:44 ` ✓ Fi.CI.IGT: " Patchwork
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.