[igt-dev] [PATCH i-g-t v6 13/16] Verify execbuf ok with stale prot-buff and regular context
Alan Previn
alan.previn.teres.alexis at intel.com
Fri Jul 16 09:23:31 UTC 2021
Add a check to verify that reusing a stale protected
buffer in a gem_execbuff call, but using a regular (not-
protected) context will succeed despite after a teardown
(triggered by suspend-resume cycle).
This ensures that user space applications that choose
not to opt-in for strict PXP teardown awareness (by
using a regular context) won't suffer gem_execbuff
failures if a protected buffer was among the assets
used in any of its rendering operations.
Reuse the existing subtest to minimize the number
of suspend resume cycles we take.
Signed-off-by: Alan Previn <alan.previn.teres.alexis at intel.com>
Reviewed-by: Rodrigo Vivi <rodrigo.vivi at intel.com>
---
tests/i915/gem_pxp.c | 15 ++++++++++++++-
1 file changed, 14 insertions(+), 1 deletion(-)
diff --git a/tests/i915/gem_pxp.c b/tests/i915/gem_pxp.c
index 701badb1..73ec9cd8 100644
--- a/tests/i915/gem_pxp.c
+++ b/tests/i915/gem_pxp.c
@@ -763,7 +763,7 @@ static void free_exec_assets(int i915, struct simple_exec_assets *data)
static void test_pxp_pwrcycle_staleasset_execution(int i915, struct powermgt_data *pm)
{
int ret;
- struct simple_exec_assets data[2] = {{0}, {0}};
+ struct simple_exec_assets data[3] = {{0}, {0}, {0}};
uint32_t ctx2;
struct intel_bb *ibb2;
@@ -780,6 +780,15 @@ static void test_pxp_pwrcycle_staleasset_execution(int i915, struct powermgt_dat
ret = gem_execbuf_flush_store_dw(i915, data[1].ibb, data[1].ctx, data[1].fencebuf);
igt_assert(ret == 0);
+ /*
+ * For data[2]: Use non-pxp contexts but with protected buffers
+ * to verify the "pxp-execution-opt-in" expectation where
+ * execution will run without error (not buffer)
+ */
+ prepare_exec_assets(i915, &data[2], false, true);
+ ret = gem_execbuf_flush_store_dw(i915, data[2].ibb, data[2].ctx, data[2].fencebuf);
+ igt_assert(ret == 0);
+
trigger_powermgt_suspend_cycle(i915, pm);
ret = gem_execbuf_flush_store_dw(i915, data[0].ibb, data[0].ctx, data[0].fencebuf);
@@ -800,8 +809,12 @@ static void test_pxp_pwrcycle_staleasset_execution(int i915, struct powermgt_dat
ret = gem_execbuf_flush_store_dw(i915, ibb2, ctx2, data[1].fencebuf);
igt_assert_f((ret == -ENOEXEC), "Executing stale pxp buffer didn't fail with -ENOEXEC\n");
+ ret = gem_execbuf_flush_store_dw(i915, data[2].ibb, data[2].ctx, data[2].fencebuf);
+ igt_assert_f((ret == 0), "Opt-out-execution with stale pxp buffer didn't succeed\n");
+
free_exec_assets(i915, &data[0]);
free_exec_assets(i915, &data[1]);
+ free_exec_assets(i915, &data[2]);
}
igt_main
--
2.25.1
More information about the igt-dev
mailing list