[igt-dev] [PATCH i-g-t 2/4] tests/gen7_exec_parse: Test lrm/lri
Mika Kuoppala
mika.kuoppala at linux.intel.com
Mon Aug 17 12:28:59 UTC 2020
Test also with lrm and lri with bad mask to assert
that access is not allowed.
v2: no need to sync with check (Chris)
Cc: Jon Bloomfield <jon.bloomfield at intel.com>
Cc: Chris Wilson <chris at chris-wilson.co.uk>
Signed-off-by: Mika Kuoppala <mika.kuoppala at linux.intel.com>
Reviewed-by: Chris Wilson <chris at chris-wilson.co.uk>
---
tests/i915/gen7_exec_parse.c | 39 +++++++++++++++++++++++++++++++-----
1 file changed, 34 insertions(+), 5 deletions(-)
diff --git a/tests/i915/gen7_exec_parse.c b/tests/i915/gen7_exec_parse.c
index 22ccbc68..546ea504 100644
--- a/tests/i915/gen7_exec_parse.c
+++ b/tests/i915/gen7_exec_parse.c
@@ -48,6 +48,7 @@
#define MI_LOAD_REGISTER_REG (0x2a << 23)
#define MI_STORE_REGISTER_MEM (0x24 << 23)
+#define MI_LOAD_REGISTER_MEM (0x29 << 23)
#define MI_ARB_ON_OFF (0x8 << 23)
#define MI_DISPLAY_FLIP ((0x14 << 23) | 1)
@@ -91,6 +92,7 @@ static uint64_t __exec_batch_patched(int fd,
struct drm_i915_gem_execbuffer2 execbuf;
struct drm_i915_gem_exec_object2 obj[2];
struct drm_i915_gem_relocation_entry reloc[1];
+ int ret;
uint32_t target_bo = gem_create(fd, 4096);
uint64_t actual_value = 0;
@@ -117,8 +119,9 @@ static uint64_t __exec_batch_patched(int fd,
execbuf.batch_len = size;
execbuf.flags = I915_EXEC_RENDER;
- gem_execbuf(fd, &execbuf);
- gem_sync(fd, cmd_bo);
+ ret = __checked_execbuf(fd, &execbuf);
+ if (ret)
+ return ret;
gem_read(fd,target_bo, 0, &actual_value, sizeof(actual_value));
@@ -380,7 +383,7 @@ static void hsw_load_register_reg(void)
uint32_t store_gpr0[16] = {
MI_STORE_REGISTER_MEM | (3 - 2),
HSW_CS_GPR0,
- 0, /* reloc*/
+ 0, /* reloc */
MI_BATCH_BUFFER_END,
};
uint32_t do_lrr[16] = {
@@ -389,6 +392,18 @@ static void hsw_load_register_reg(void)
HSW_CS_GPR0, /* dst */
MI_BATCH_BUFFER_END,
};
+ uint32_t do_lrm[16] = {
+ MI_LOAD_REGISTER_MEM | (3 - 2),
+ 0, /* dst reg */
+ 0, /* reloc */
+ MI_BATCH_BUFFER_END,
+ };
+ uint32_t do_lri_wrong_mask[16] = {
+ MI_LOAD_REGISTER_IMM | (3 - 2),
+ 0, /* [1] = dst */
+ 0xffffffff, /* value */
+ MI_BATCH_BUFFER_END,
+ };
uint32_t allowed_regs[] = {
HSW_CS_GPR1,
SO_WRITE_OFFSET_0,
@@ -441,7 +456,7 @@ static void hsw_load_register_reg(void)
store_gpr0, sizeof(store_gpr0),
2 * sizeof(uint32_t), /* reloc */
0xabcdabc0);
- igt_debug("Testing disallowed reg src 0x%08x\n", disallowed_regs[i]);
+ igt_debug("Testing disallowed lrr 0x%08x\n", disallowed_regs[i]);
do_lrr[1] = disallowed_regs[i];
exec_batch(fd, handle, do_lrr, sizeof(do_lrr),
I915_EXEC_RENDER,
@@ -460,12 +475,26 @@ static void hsw_load_register_reg(void)
store_gpr0, sizeof(store_gpr0),
2 * sizeof(uint32_t), /* reloc */
0xabcdabc0);
- igt_debug("Testing disallowed reg dst 0x%08x\n", disallowed_regs[i]);
+
+ igt_debug("Testing disallowed lrr dst 0x%08x\n", disallowed_regs[i]);
do_lrr[1] = HSW_CS_GPR0;
do_lrr[2] = disallowed_regs[i];
exec_batch(fd, handle, do_lrr, sizeof(do_lrr),
I915_EXEC_RENDER,
bad_lrr_errno);
+
+ igt_debug("Testing disallowed lrm 0x%08x\n", disallowed_regs[i]);
+ do_lrm[1] = disallowed_regs[i];
+ exec_batch_patched(fd, handle, do_lrm, sizeof(do_lrm),
+ 2 * sizeof(uint32_t), /* reloc */
+ bad_lrr_errno);
+
+ igt_debug("Testing disallowed wrong mask lri 0x%08x\n", disallowed_regs[i]);
+ do_lri_wrong_mask[1] = disallowed_regs[i];
+ exec_batch(fd, handle, do_lri_wrong_mask, sizeof(do_lri_wrong_mask),
+ I915_EXEC_RENDER,
+ bad_lrr_errno);
+
exec_batch_patched(fd, handle,
store_gpr0, sizeof(store_gpr0),
2 * sizeof(uint32_t), /* reloc */
--
2.17.1
More information about the igt-dev
mailing list