All of lore.kernel.org
 help / color / mirror / Atom feed
From: Alan Previn <alan.previn.teres.alexis@intel.com>
To: igt-dev@lists.freedesktop.org
Cc: Alan Previn <alan.previn.teres.alexis@intel.com>
Subject: [igt-dev] [PATCH i-g-t v7 15/17] Ensure RESET_STATS reports invalidated protected contexts
Date: Tue, 24 Aug 2021 22:31:07 -0700	[thread overview]
Message-ID: <20210825053109.336142-16-alan.previn.teres.alexis@intel.com> (raw)
In-Reply-To: <20210825053109.336142-1-alan.previn.teres.alexis@intel.com>

When protected contexts are created but get invalidated
due to PXP session teardown, RESET_STATS ioctl for said
context shall log an increased count in lost batch_active
equal to all engines of this context indicating the pxp
context is now banned.

Signed-off-by: Alan Previn <alan.previn.teres.alexis@intel.com>
---
 tests/i915/gem_pxp.c | 73 +++++++++++++++++++++++++++++++++++++++++---
 1 file changed, 69 insertions(+), 4 deletions(-)

diff --git a/tests/i915/gem_pxp.c b/tests/i915/gem_pxp.c
index 24727f8a..4e560962 100644
--- a/tests/i915/gem_pxp.c
+++ b/tests/i915/gem_pxp.c
@@ -776,9 +776,34 @@ static void trigger_pxp_debugfs_forced_teardown(int i915)
 	close(fd);
 }
 
-static void test_pxp_stale_ctx_execution(int i915)
+static int get_context_num_engines(int i915, uint32_t ctx)
+{
+	intel_ctx_cfg_t cfg;
+	int n = 4; /* at the very least Gen12s have 4 engines */
+
+	if (gem_has_engine_topology(i915)) {
+		cfg =  intel_ctx_cfg_all_physical(i915);
+		n = cfg.num_engines;
+	}
+	return n;
+}
+
+static int get_context_lost_count(int i915, uint32_t ctx)
 {
+	struct drm_i915_reset_stats rs;
 	int ret;
+
+	memset(&rs, 0, sizeof(rs));
+	rs.ctx_id = ctx;
+	ret = drmIoctl(i915, DRM_IOCTL_I915_GET_RESET_STATS, &rs);
+	igt_assert(ret == 0);
+
+	return (int)rs.batch_active;
+}
+
+static void test_pxp_stale_ctx_execution(int i915)
+{
+	int ret, lostcount;
 	struct simple_exec_assets data = {0};
 
 	/*
@@ -790,7 +815,15 @@ static void test_pxp_stale_ctx_execution(int i915)
 	ret = gem_execbuf_flush_store_dw(i915, data.ibb, data.ctx, data.fencebuf);
 	igt_assert(ret == 0);
 
+	lostcount = get_context_lost_count(i915, data.ctx);
 	trigger_pxp_debugfs_forced_teardown(i915);
+	/* After teardown, verify RESET_STATS for pxp context reflects
+	 * the non-recoverable invalidation
+	 */
+	usleep(50000);
+	igt_assert_f(get_context_lost_count(i915, data.ctx) >=
+		     lostcount + get_context_num_engines(i915, data.ctx),
+		     "RESET_STATS didn't reflect stale pxp context1\n");
 
 	ret = gem_execbuf_flush_store_dw(i915, data.ibb, data.ctx, data.fencebuf);
 	igt_assert_f((ret == -EIO), "Executing stale pxp context didn't fail with -EIO\n");
@@ -800,7 +833,7 @@ static void test_pxp_stale_ctx_execution(int i915)
 
 static void test_pxp_stale_buf_execution(int i915)
 {
-	int ret;
+	int ret, lostcount;
 	struct simple_exec_assets data = {0};
 	uint32_t ctx2;
 	struct intel_bb *ibb2;
@@ -810,7 +843,15 @@ static void test_pxp_stale_buf_execution(int i915)
 	ret = gem_execbuf_flush_store_dw(i915, data.ibb, data.ctx, data.fencebuf);
 	igt_assert(ret == 0);
 
+	lostcount = get_context_lost_count(i915, data.ctx);
 	trigger_pxp_debugfs_forced_teardown(i915);
+	/* After teardown, verify RESET_STATS for pxp context reflects
+	 * the non-recoverable invalidation
+	 */
+	usleep(50000);
+	igt_assert_f(get_context_lost_count(i915, data.ctx) >=
+		     lostcount + get_context_num_engines(i915, data.ctx),
+		     "RESET_STATS didn't reflect stale pxp context2\n");
 
 	/*
 	 * After teardown, use a new pxp context but reuse the stale bo to ensure
@@ -833,7 +874,7 @@ static void test_pxp_stale_buf_execution(int i915)
 
 static void test_pxp_stale_buf_optout_execution(int i915)
 {
-	int ret;
+	int ret, lostcount;
 	struct simple_exec_assets data = {0};
 
 	/*
@@ -844,7 +885,14 @@ static void test_pxp_stale_buf_optout_execution(int i915)
 	ret = gem_execbuf_flush_store_dw(i915, data.ibb, data.ctx, data.fencebuf);
 	igt_assert(ret == 0);
 
+	lostcount = get_context_lost_count(i915, data.ctx);
 	trigger_pxp_debugfs_forced_teardown(i915);
+	/* After teardown, verify RESET_STATS for regular context doesn't
+	 * exhibit any invalidation
+	 */
+	usleep(50000);
+	igt_assert_f(get_context_lost_count(i915, data.ctx) ==  lostcount,
+		     "Bad RESET_STATS report for regular context3\n");
 
 	ret = gem_execbuf_flush_store_dw(i915, data.ibb, data.ctx, data.fencebuf);
 	igt_assert_f((ret == 0), "Opt-out-execution with stale pxp buffer didn't succeed\n");
@@ -854,7 +902,7 @@ static void test_pxp_stale_buf_optout_execution(int i915)
 
 static void test_pxp_pwrcycle_staleasset_execution(int i915, struct powermgt_data *pm)
 {
-	int ret;
+	int ret, lostcount[3];
 	struct simple_exec_assets data[3] = {{0}, {0}, {0}};
 	uint32_t ctx2;
 	struct intel_bb *ibb2;
@@ -885,8 +933,25 @@ static void test_pxp_pwrcycle_staleasset_execution(int i915, struct powermgt_dat
 	igt_assert(ret == 0);
 
 	/* Do an S3 suspend resume cycle which also causes the pxp teardown event */
+	lostcount[0] = get_context_lost_count(i915, data[0].ctx);
+	lostcount[1] = get_context_lost_count(i915, data[1].ctx);
+	lostcount[2] = get_context_lost_count(i915, data[2].ctx);
 	trigger_powermgt_suspend_cycle(i915, pm);
 
+	/* After teardown, verify RESET_STATS reflect:
+	 * for data[0]: non-recoverable invalidation
+	 * for data[1]: non-recoverable invalidation
+	 * for data[2]: no invalidation
+	 */
+	igt_assert_f(get_context_lost_count(i915,
+		     data[0].ctx) >= lostcount[0] + get_context_num_engines(i915, data[0].ctx),
+		     "Post-s3 RESET_STATS didn't reflect stale pxp context1\n");
+	igt_assert_f(get_context_lost_count(i915,
+		     data[1].ctx) >= lostcount[1] + get_context_num_engines(i915, data[1].ctx),
+		     "Post-s3 RESET_STATS didn't reflect stale pxp context2\n");
+	igt_assert_f(get_context_lost_count(i915, data[2].ctx) == lostcount[2],
+		     "Post-s3 bad RESET_STATS report for regular context3\n");
+
 	ret = gem_execbuf_flush_store_dw(i915, data[0].ibb, data[0].ctx, data[0].fencebuf);
 	igt_assert_f((ret == -EIO), "Executing stale pxp context didn't fail with -EIO\n");
 
-- 
2.25.1

  parent reply	other threads:[~2021-08-25  5:31 UTC|newest]

Thread overview: 25+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-08-25  5:30 [igt-dev] [PATCH i-g-t v7 00/17] Introduce PXP Test Alan Previn
2021-08-25  5:30 ` [igt-dev] [PATCH i-g-t v7 01/17] Add PXP UAPI support in i915_drm.h Alan Previn
2021-08-25  5:30 ` [igt-dev] [PATCH i-g-t v7 02/17] Update IOCTL wrapper with DRM_IOCTL_I915_GEM_CONTEXT_CREATE_EXT Alan Previn
2021-08-26  5:54   ` Petri Latvala
2021-09-02 15:35   ` Teres Alexis, Alan Previn
2021-08-25  5:30 ` [igt-dev] [PATCH i-g-t v7 03/17] Add basic PXP testing of buffer and context alloc Alan Previn
2021-08-25  5:30 ` [igt-dev] [PATCH i-g-t v7 04/17] Perform a regular 3d copy as a control checkpoint Alan Previn
2021-08-25  5:30 ` [igt-dev] [PATCH i-g-t v7 05/17] Add PXP attribute support in batchbuffer and buffer_ops libs Alan Previn
2021-08-25  5:30 ` [igt-dev] [PATCH i-g-t v7 06/17] Add MI_SET_APPID instruction definition Alan Previn
2021-08-25  5:30 ` [igt-dev] [PATCH i-g-t v7 07/17] Enable protected session cmd in gen12_render_copyfunc Alan Previn
2021-08-25  5:31 ` [igt-dev] [PATCH i-g-t v7 08/17] Add subtest to copy raw source to protected dest Alan Previn
2021-08-25  5:31 ` [igt-dev] [PATCH i-g-t v7 09/17] Add test where both src and dest are protected Alan Previn
2021-08-25  5:31 ` [igt-dev] [PATCH i-g-t v7 10/17] Verify PXP teardown occurred through suspend-resume Alan Previn
2021-08-25  5:31 ` [igt-dev] [PATCH i-g-t v7 11/17] Verify execbuf fails with stale PXP context after teardown Alan Previn
2021-08-25  5:31 ` [igt-dev] [PATCH i-g-t v7 12/17] Verify execbuf fails with stale PXP buffer " Alan Previn
2021-08-25  5:31 ` [igt-dev] [PATCH i-g-t v7 13/17] Verify execbuf ok with stale PXP buf in opt-out use Alan Previn
2021-08-25  5:31 ` [igt-dev] [PATCH i-g-t v7 14/17] Verify execution behavior with stale PXP assets through suspend-resume Alan Previn
2021-08-25  5:31 ` Alan Previn [this message]
2021-08-25  5:31 ` [igt-dev] [PATCH i-g-t v7 16/17] Verify protected surfaces are dma buffer sharable Alan Previn
2021-08-25  5:31 ` [igt-dev] [PATCH i-g-t v7 17/17] tests/i915_pxp: CRC validation for display tests Alan Previn
2021-08-25  6:15 ` [igt-dev] ✗ GitLab.Pipeline: warning for Introduce PXP Test (rev7) Patchwork
2021-08-25  6:26 ` [igt-dev] ✓ Fi.CI.BAT: success " Patchwork
2021-08-25 11:59 ` [igt-dev] ✓ Fi.CI.IGT: " Patchwork
2021-09-02 16:11 ` [igt-dev] ✗ Fi.CI.BUILD: failure for Introduce PXP Test (rev8) Patchwork
2021-09-02 16:17   ` Teres Alexis, Alan Previn

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20210825053109.336142-16-alan.previn.teres.alexis@intel.com \
    --to=alan.previn.teres.alexis@intel.com \
    --cc=igt-dev@lists.freedesktop.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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.