Skip to contentSkip to conversation

drm/i915: Introduce execlist_port_* accessors

PATCH In review Mika Kuoppala 2 participants 5 messages Nov 30, 2017 – Dec 1, 2017

Subsystems (2)
lore
Share & tools
lore
#0 lore raw

PATCH 1/3 drm/i915: Introduce execlist_port_* accessors

From: Mika Kuoppala <[email protected]>

Instead of trusting that first available port is at index 0, use accessor to hide this. This is a preparation for a following patches where head can be at arbitrary location in the port array.

v2: improved commit message, elsp_ready readability (Chris)
v3: s/execlist_port_index/execlist_port (Chris)
v4: rebase to new naming
v5: fix port_next indexing
v6: adapt to preempt
v7: improved _port_next (Chris)
v8: whitespace, for loop (Chris),
find_first_unset and GEM_BUG_ON after next_port in guc submission

Cc Michał Winiarski <[email protected]>
Cc Joonas Lahtinen <[email protected]>
Cc Chris Wilson <[email protected]>
---
 drivers/gpu/drm/i915/i915_gpu_error.c       |  5 +-
 drivers/gpu/drm/i915/intel_engine_cs.c      | 18 +++++---
 drivers/gpu/drm/i915/intel_guc_submission.c | 71 ++++++++++++++++++++---------
 drivers/gpu/drm/i915/intel_lrc.c            | 55 +++++++++++++---------
 drivers/gpu/drm/i915/intel_ringbuffer.h     | 44 +++++++++++++++++-
 5 files changed, 139 insertions(+), 54 deletions(-)
drivers/gpu/drm/i915/i915_gpu_error.c +3 -2
index 876be8f1d930..02bae7d697da 100644
@@ -1350,11 +1350,12 @@ static void engine_record_requests(struct intel_engine_cs *engine,
 static void error_record_engine_execlists(struct intel_engine_cs *engine,
 					  struct drm_i915_error_engine *ee)
 {
-	const struct intel_engine_execlists * const execlists = &engine->execlists;
+	struct intel_engine_execlists * const execlists = &engine->execlists;
 	unsigned int n;
 
 	for (n = 0; n < execlists_num_ports(execlists); n++) {
-		struct drm_i915_gem_request *rq = port_request(&execlists->port[n]);
+		struct drm_i915_gem_request *rq =
+			port_request(execlists_port(execlists, n));
 
 		if (!rq)
 			break;
drivers/gpu/drm/i915/intel_engine_cs.c +11 -7
index 86d4c85c8725..e36e896d2f84 100644
@@ -1669,7 +1669,7 @@ static void print_request(struct drm_printer *m,
 void intel_engine_dump(struct intel_engine_cs *engine, struct drm_printer *m)
 {
 	struct intel_breadcrumbs * const b = &engine->breadcrumbs;
-	const struct intel_engine_execlists * const execlists = &engine->execlists;
+	struct intel_engine_execlists * const execlists = &engine->execlists;
 	struct i915_gpu_error * const error = &engine->i915->gpu_error;
 	struct drm_i915_private *dev_priv = engine->i915;
 	struct drm_i915_gem_request *rq;
@@ -1782,16 +1782,20 @@ void intel_engine_dump(struct intel_engine_cs *engine, struct drm_printer *m)
 
 		rcu_read_lock();
 		for (idx = 0; idx < execlists_num_ports(execlists); idx++) {
-			unsigned int count;
+			struct execlist_port *port;
+			unsigned int count, idx_abs;
+
+			port = execlists_port(execlists, idx);
+			idx_abs = port_index(port, execlists);
 
-			rq = port_unpack(&execlists->port[idx], &count);
+			rq = port_unpack(port, &count);
 			if (rq) {
-				drm_printf(m, "\t\tELSP[%d] count=%d, ",
-					   idx, count);
+				drm_printf(m, "\t\tELSP[%d:%d] count=%d, ",
+					   idx, idx_abs, count);
 				print_request(m, rq, "rq: ");
 			} else {
-				drm_printf(m, "\t\tELSP[%d] idle\n",
-					   idx);
+				drm_printf(m, "\t\tELSP[%d:%d] idle\n",
+					   idx, idx_abs);
 			}
 		}
 		drm_printf(m, "\t\tHW active? 0x%x\n", execlists->active);
drivers/gpu/drm/i915/intel_guc_submission.c +50 -21

132 lines not on this page · raw message

drivers/gpu/drm/i915/intel_lrc.c +33 -22

168 lines not on this page · raw message

drivers/gpu/drm/i915/intel_ringbuffer.h +42 -2

62 lines not on this page · raw message

Signature · 6 lines
2.11.0

_______________________________________________
Intel-gfx mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
#1 lore raw

PATCH 2/3 drm/i915: Move execlists port head instead of memmoving array

From: Mika Kuoppala <[email protected]>

As all our access to execlist ports are through head and tail helpers, we can now move the head instead of memmoving the array.

v2: use memset (Chris)

Cc Michał Winiarski <[email protected]>
Cc Joonas Lahtinen <[email protected]>
Cc Chris Wilson <[email protected]>
---
 drivers/gpu/drm/i915/intel_ringbuffer.h | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)
drivers/gpu/drm/i915/intel_ringbuffer.h +5 -5
index 17f1fb4ded89..6a3cb8e09ed6 100644
@@ -685,13 +685,13 @@ static inline struct execlist_port *
 execlists_head_complete(struct intel_engine_execlists * const execlists,
 			struct execlist_port * const port)
 {
-	const unsigned int m = execlists->port_mask;
-
-	GEM_BUG_ON(port_index(port, execlists) != 0);
+	GEM_BUG_ON(port_index(port, execlists) != execlists->port_head);
+	GEM_BUG_ON(!port_isset(port));
 	GEM_BUG_ON(!execlists_is_active(execlists, EXECLISTS_ACTIVE_USER));
 
-	memmove(port, port + 1, m * sizeof(struct execlist_port));
-	memset(port + m, 0, sizeof(struct execlist_port));
+	memset(port, 0, sizeof(*port));
+
+	execlists->port_head = port_head_add(execlists, 1);
 
 	return execlists_port_head(execlists);
 }
Signature · 6 lines
2.11.0

_______________________________________________
Intel-gfx mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
#2 lore raw

PATCH 3/3 HAX Enable GuC Submission for CI

In reply to Mika Kuoppala

From: Michał Winiarski <[email protected]>

Also:
Revert "drm/i915/guc: Assert that we switch between known ggtt->invalidate functions"

This reverts commit 04f7b24eccdfae680a36e9825fe0d61dcd5ed528.

---
 drivers/gpu/drm/i915/i915_gem_gtt.c | 8 ++------
 drivers/gpu/drm/i915/i915_params.h  | 4 ++--
 2 files changed, 4 insertions(+), 8 deletions(-)
drivers/gpu/drm/i915/i915_gem_gtt.c +2 -6
index f3c35e826321..b3ce35330365 100644
@@ -3590,17 +3590,13 @@ int i915_ggtt_enable_hw(struct drm_i915_private *dev_priv)
 
 void i915_ggtt_enable_guc(struct drm_i915_private *i915)
 {
-	GEM_BUG_ON(i915->ggtt.invalidate != gen6_ggtt_invalidate);
-
 	i915->ggtt.invalidate = guc_ggtt_invalidate;
 }
 
 void i915_ggtt_disable_guc(struct drm_i915_private *i915)
 {
-	/* We should only be called after i915_ggtt_enable_guc() */
-	GEM_BUG_ON(i915->ggtt.invalidate != guc_ggtt_invalidate);
-
-	i915->ggtt.invalidate = gen6_ggtt_invalidate;
+	if (i915->ggtt.invalidate == guc_ggtt_invalidate)
+		i915->ggtt.invalidate = gen6_ggtt_invalidate;
 }
 
 void i915_gem_restore_gtt_mappings(struct drm_i915_private *dev_priv)
drivers/gpu/drm/i915/i915_params.h +2 -2
index 8321bd86cba5..69ee2484c6bb 100644
@@ -42,8 +42,8 @@
 	param(int, disable_power_well, -1) \
 	param(int, enable_ips, 1) \
 	param(int, invert_brightness, 0) \
-	param(int, enable_guc_loading, 0) \
-	param(int, enable_guc_submission, 0) \
+	param(int, enable_guc_loading, 1) \
+	param(int, enable_guc_submission, 1) \
 	param(int, guc_log_level, -1) \
 	param(char *, guc_firmware_path, NULL) \
 	param(char *, huc_firmware_path, NULL) \
Signature · 6 lines
2.11.0

_______________________________________________
Intel-gfx mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
#3 lore raw

✗ Fi.CI.BAT: failure for series starting with [CI,1/3] drm/i915: Introduce execlist_port_* accessors

In reply to Mika Kuoppala
== Series Details ==

== Series Details ==

Series: series starting with [CI,1/3] drm/i915: Introduce execlist_port_* accessors
URL : https://patchwork.freedesktop.org/series/34685/
State : failure

== Summary ==

Series 34685v1 series starting with [CI,1/3] drm/i915: Introduce execlist_port_* accessors
https://patchwork.freedesktop.org/api/1.0/series/34685/revisions/1/mbox/

Test debugfs_test:

        Subgroup read_all_entries:
                pass       -> DMESG-WARN (fi-skl-6260u)
                pass       -> DMESG-WARN (fi-skl-6600u)
                pass       -> DMESG-WARN (fi-skl-6700hq)
                pass       -> DMESG-WARN (fi-skl-6700k)
                pass       -> DMESG-WARN (fi-skl-6770hq)
                pass       -> DMESG-WARN (fi-skl-gvtdvm)
                pass       -> DMESG-WARN (fi-bxt-dsi)
                pass       -> DMESG-WARN (fi-bxt-j4205)
                pass       -> DMESG-WARN (fi-kbl-7500u) fdo#103285
                pass       -> DMESG-WARN (fi-kbl-7560u)
                pass       -> DMESG-WARN (fi-kbl-7567u)
                pass       -> DMESG-WARN (fi-kbl-r)
                pass       -> DMESG-WARN (fi-glk-1)
Test gem_exec_suspend:
        Subgroup basic-s3:
                pass       -> DMESG-FAIL (fi-skl-6700k)
        Subgroup basic-s4-devices:
                pass       -> SKIP       (fi-skl-6700k)
Test gem_linear_blits:
        Subgroup basic:
                pass       -> SKIP       (fi-skl-6700k)
Test gem_render_linear_blits:
        Subgroup basic:
                pass       -> SKIP       (fi-skl-6700k)
Test gem_render_tiled_blits:
        Subgroup basic:
                pass       -> SKIP       (fi-skl-6700k)
Test gem_ringfill:
        Subgroup basic-default:
                pass       -> SKIP       (fi-skl-6700k)
        Subgroup basic-default-interruptible:
                pass       -> SKIP       (fi-skl-6700k)
        Subgroup basic-default-forked:
                pass       -> SKIP       (fi-skl-6700k)
        Subgroup basic-default-fd:
                pass       -> SKIP       (fi-skl-6700k)
        Subgroup basic-default-hang:
                pass       -> DMESG-WARN (fi-elk-e7500)
                pass       -> SKIP       (fi-skl-6700k)
Test gem_sync:
        Subgroup basic-all:
                pass       -> SKIP       (fi-elk-e7500)
                pass       -> SKIP       (fi-skl-6700k)
        Subgroup basic-each:
                pass       -> SKIP       (fi-elk-e7500)
                pass       -> SKIP       (fi-skl-6700k)
        Subgroup basic-many-each:
                pass       -> SKIP       (fi-elk-e7500)
                pass       -> SKIP       (fi-skl-6700k)
        Subgroup basic-store-all:
                pass       -> SKIP       (fi-elk-e7500)
                pass       -> SKIP       (fi-skl-6700k)
        Subgroup basic-store-each:
                pass       -> SKIP       (fi-elk-e7500)
                pass       -> SKIP       (fi-skl-6700k)
Test gem_tiled_blits:
        Subgroup basic:
                pass       -> SKIP       (fi-elk-e7500)
                pass       -> SKIP       (fi-skl-6700k)
Test gem_tiled_fence_blits:
        Subgroup basic:
                pass       -> SKIP       (fi-elk-e7500)
                pass       -> SKIP       (fi-skl-6700k)
Test gem_wait:
        Subgroup basic-busy-all:
                pass       -> SKIP       (fi-elk-e7500)
                pass       -> SKIP       (fi-skl-6700k)
        Subgroup basic-wait-all:
                pass       -> SKIP       (fi-elk-e7500)
                pass       -> SKIP       (fi-skl-6700k)
        Subgroup basic-await-all:
                pass       -> SKIP       (fi-elk-e7500)
                pass       -> SKIP       (fi-skl-6700k)
Test gem_workarounds:
        Subgroup basic-read:
                pass       -> SKIP       (fi-skl-6700k)
Test kms_busy:
        Subgroup basic-flip-a:
                dmesg-warn -> SKIP       (fi-elk-e7500) fdo#103989 +3
                pass       -> SKIP       (fi-skl-6700k)
        Subgroup basic-flip-b:
                pass       -> SKIP       (fi-skl-6700k)
        Subgroup basic-flip-c:
                pass       -> SKIP       (fi-skl-6700k)
Test kms_chamelium:
        Subgroup common-hpd-after-suspend:
                pass       -> DMESG-WARN (fi-skl-6700k)
Test kms_cursor_legacy:
        Subgroup basic-busy-flip-before-cursor-atomic:
                pass       -> SKIP       (fi-skl-6700k)
        Subgroup basic-busy-flip-before-cursor-legacy:
                pass       -> SKIP       (fi-skl-6700k)
Test kms_frontbuffer_tracking:
        Subgroup basic:
                pass       -> SKIP       (fi-skl-6700k) fdo#103735

WARNING: Long output truncated

0c2cf368f9fbb26cdf4e355f01c7ddf16e65d25a drm-tip: 2017y-11m-30d-15h-54m-58s UTC integration manifest a39595105d3b HAX Enable GuC Submission for CI
cf01db25c2fc drm/i915: Move execlists port head instead of memmoving array df93ca89010e drm/i915: Introduce execlist_port_* accessors

== Logs ==

For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_7379/
_______________________________________________
Intel-gfx mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

#4 lore raw

Re: ✗ Fi.CI.BAT: failure for series starting with [CI,1/3] drm/i915: Introduce execlist_port_* accessors

Quoted 12 lines · Patchwork

== Series Details ==

Series: series starting with [CI,1/3] drm/i915: Introduce execlist_port_* accessors
URL : https://patchwork.freedesktop.org/series/34685/
State : failure

== Summary ==

Series 34685v1 series starting with [CI,1/3] drm/i915: Introduce execlist_port_* accessors
https://patchwork.freedesktop.org/api/1.0/series/34685/revisions/1/mbox/

Test debugfs_test:

Quoted 9 lines
        Subgroup read_all_entries:
                pass       -> DMESG-WARN (fi-skl-6260u)
                pass       -> DMESG-WARN (fi-skl-6600u)
                pass       -> DMESG-WARN (fi-skl-6700hq)
                pass       -> DMESG-WARN (fi-skl-6700k)
                pass       -> DMESG-WARN (fi-skl-6770hq)
                pass       -> DMESG-WARN (fi-skl-gvtdvm)
                pass       -> DMESG-WARN (fi-bxt-dsi)
                pass       -> DMESG-WARN (fi-bxt-j4205)

These are similar of:

https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_7379/fi-bxt-j4205/igt@debugfs_test@read_all_entries.html

The lockdep is not fully tamed?
Daniel, halp!

-Mika

Quoted 89 lines
                pass       -> DMESG-WARN (fi-kbl-7500u) fdo#103285
                pass       -> DMESG-WARN (fi-kbl-7560u)
                pass       -> DMESG-WARN (fi-kbl-7567u)
                pass       -> DMESG-WARN (fi-kbl-r)
                pass       -> DMESG-WARN (fi-glk-1)
Test gem_exec_suspend:
        Subgroup basic-s3:
                pass       -> DMESG-FAIL (fi-skl-6700k)
        Subgroup basic-s4-devices:
                pass       -> SKIP       (fi-skl-6700k)
Test gem_linear_blits:
        Subgroup basic:
                pass       -> SKIP       (fi-skl-6700k)
Test gem_render_linear_blits:
        Subgroup basic:
                pass       -> SKIP       (fi-skl-6700k)
Test gem_render_tiled_blits:
        Subgroup basic:
                pass       -> SKIP       (fi-skl-6700k)
Test gem_ringfill:
        Subgroup basic-default:
                pass       -> SKIP       (fi-skl-6700k)
        Subgroup basic-default-interruptible:
                pass       -> SKIP       (fi-skl-6700k)
        Subgroup basic-default-forked:
                pass       -> SKIP       (fi-skl-6700k)
        Subgroup basic-default-fd:
                pass       -> SKIP       (fi-skl-6700k)
        Subgroup basic-default-hang:
                pass       -> DMESG-WARN (fi-elk-e7500)
                pass       -> SKIP       (fi-skl-6700k)
Test gem_sync:
        Subgroup basic-all:
                pass       -> SKIP       (fi-elk-e7500)
                pass       -> SKIP       (fi-skl-6700k)
        Subgroup basic-each:
                pass       -> SKIP       (fi-elk-e7500)
                pass       -> SKIP       (fi-skl-6700k)
        Subgroup basic-many-each:
                pass       -> SKIP       (fi-elk-e7500)
                pass       -> SKIP       (fi-skl-6700k)
        Subgroup basic-store-all:
                pass       -> SKIP       (fi-elk-e7500)
                pass       -> SKIP       (fi-skl-6700k)
        Subgroup basic-store-each:
                pass       -> SKIP       (fi-elk-e7500)
                pass       -> SKIP       (fi-skl-6700k)
Test gem_tiled_blits:
        Subgroup basic:
                pass       -> SKIP       (fi-elk-e7500)
                pass       -> SKIP       (fi-skl-6700k)
Test gem_tiled_fence_blits:
        Subgroup basic:
                pass       -> SKIP       (fi-elk-e7500)
                pass       -> SKIP       (fi-skl-6700k)
Test gem_wait:
        Subgroup basic-busy-all:
                pass       -> SKIP       (fi-elk-e7500)
                pass       -> SKIP       (fi-skl-6700k)
        Subgroup basic-wait-all:
                pass       -> SKIP       (fi-elk-e7500)
                pass       -> SKIP       (fi-skl-6700k)
        Subgroup basic-await-all:
                pass       -> SKIP       (fi-elk-e7500)
                pass       -> SKIP       (fi-skl-6700k)
Test gem_workarounds:
        Subgroup basic-read:
                pass       -> SKIP       (fi-skl-6700k)
Test kms_busy:
        Subgroup basic-flip-a:
                dmesg-warn -> SKIP       (fi-elk-e7500) fdo#103989 +3
                pass       -> SKIP       (fi-skl-6700k)
        Subgroup basic-flip-b:
                pass       -> SKIP       (fi-skl-6700k)
        Subgroup basic-flip-c:
                pass       -> SKIP       (fi-skl-6700k)
Test kms_chamelium:
        Subgroup common-hpd-after-suspend:
                pass       -> DMESG-WARN (fi-skl-6700k)
Test kms_cursor_legacy:
        Subgroup basic-busy-flip-before-cursor-atomic:
                pass       -> SKIP       (fi-skl-6700k)
        Subgroup basic-busy-flip-before-cursor-legacy:
                pass       -> SKIP       (fi-skl-6700k)
Test kms_frontbuffer_tracking:
        Subgroup basic:
                pass       -> SKIP       (fi-skl-6700k) fdo#103735

WARNING: Long output truncated

Quoted 8 lines

0c2cf368f9fbb26cdf4e355f01c7ddf16e65d25a drm-tip: 2017y-11m-30d-15h-54m-58s UTC integration manifest a39595105d3b HAX Enable GuC Submission for CI
cf01db25c2fc drm/i915: Move execlists port head instead of memmoving array df93ca89010e drm/i915: Introduce execlist_port_* accessors

== Logs ==

For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_7379/

_______________________________________________
Intel-gfx mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/intel-gfx