Use pad-to-size to fill the entire GTT. Make sure we own it all! Suggested-by: Matthew Auld <matthew.a...@intel.com> Signed-off-by: Chris Wilson <ch...@chris-wilson.co.uk> Cc: Matthew Auld <matthew.a...@intel.com> --- tests/i915/gem_softpin.c | 49 ++++++++++++++++++++++++++++++++++++---- 1 file changed, 45 insertions(+), 4 deletions(-)
diff --git a/tests/i915/gem_softpin.c b/tests/i915/gem_softpin.c index f761a6839..4a1622e75 100644 --- a/tests/i915/gem_softpin.c +++ b/tests/i915/gem_softpin.c @@ -32,6 +32,8 @@ #define EXEC_OBJECT_PINNED (1<<4) #define EXEC_OBJECT_SUPPORTS_48B_ADDRESS (1<<3) +#define LIMIT_32b ((1ull << 32) - (1ull << 12)) + /* gen8_canonical_addr * Used to convert any address into canonical form, i.e. [63:48] == [47]. * Based on kernel's sign_extend64 implementation. @@ -132,27 +134,27 @@ static void test_zero(int i915) object.offset = 0; igt_assert_f(__gem_execbuf(i915, &execbuf) == 0, - "execbuff failed with object.offset=%llx\n", + "execbuf failed with object.offset=%llx\n", object.offset); if (gtt >> 32) { object.offset = (1ull << 32) - sz; igt_assert_f(__gem_execbuf(i915, &execbuf) == 0, - "execbuff failed with object.offset=%llx\n", + "execbuf failed with object.offset=%llx\n", object.offset); } if ((gtt - sz) >> 32) { object.offset = 1ull << 32; igt_assert_f(__gem_execbuf(i915, &execbuf) == 0, - "execbuff failed with object.offset=%llx\n", + "execbuf failed with object.offset=%llx\n", object.offset); } object.offset = gtt - sz; object.offset = gen8_canonical_addr(object.offset); igt_assert_f(__gem_execbuf(i915, &execbuf) == 0, - "execbuff failed with object.offset=%llx\n", + "execbuf failed with object.offset=%llx\n", object.offset); gem_close(i915, object.handle); @@ -191,6 +193,39 @@ static void test_32b_last_page(int i915) gem_close(i915, object.handle); } +static void test_full(int i915) +{ + uint64_t sz, gtt = gem_aperture_size(i915); + struct drm_i915_gem_exec_object2 object = { + .handle = batch_create(i915, &sz), + .flags = EXEC_OBJECT_PINNED, + }; + struct drm_i915_gem_execbuffer2 execbuf = { + .buffers_ptr = to_user_pointer(&object), + .buffer_count = 1, + }; + + /* Under full-ppgtt, we have complete control of the GTT */ + + object.pad_to_size = gtt; + if (object.pad_to_size > LIMIT_32b) + object.pad_to_size = LIMIT_32b; + igt_assert_f(__gem_execbuf(i915, &execbuf) == 0, + "[32b] execbuf failed with offset 0 and object.pad_to_size=%llx\n", + object.pad_to_size); + + if (object.pad_to_size < gtt) { + object.flags |= EXEC_OBJECT_SUPPORTS_48B_ADDRESS; + object.pad_to_size = gtt; + + igt_assert_f(__gem_execbuf(i915, &execbuf) == 0, + "[48b] execbuf failed with offset 0 and object.pad_to_size=%llx\n", + object.pad_to_size); + } + + gem_close(i915, object.handle); +} + static void test_softpin(int fd) { const uint32_t size = 1024 * 1024; @@ -653,6 +688,7 @@ igt_main igt_subtest("invalid") test_invalid(fd); + igt_subtest("zero") { igt_require(gem_uses_full_ppgtt(fd)); test_zero(fd); @@ -661,6 +697,11 @@ igt_main igt_require(gem_uses_full_ppgtt(fd)); test_32b_last_page(fd); } + igt_subtest("full") { + igt_require(gem_uses_full_ppgtt(fd)); + test_full(fd); + } + igt_subtest("softpin") test_softpin(fd); igt_subtest("overlap") -- 2.30.0.rc1 _______________________________________________ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/intel-gfx