diff --git a/tests/gem_ppgtt.c b/tests/gem_ppgtt.c index 78d5b48f..1a620ad8 100644 --- a/tests/gem_ppgtt.c +++ b/tests/gem_ppgtt.c @@ -252,8 +252,8 @@ static void flink_and_close(void) static void flink_and_exit(void) { - uint32_t fd, fd2; - uint32_t bo, flinked_bo, name; + uint32_t fd, fd2, fd3; + uint32_t bo, bo2, flinked_bo, name; char match[100]; int to_match; bool matched; @@ -270,12 +270,19 @@ static void flink_and_exit(void) igt_assert(to_match < sizeof(match)); fd2 = drm_open_driver(DRIVER_INTEL); - flinked_bo = gem_open(fd2, name); + + fd3 = drm_open_driver(DRIVER_INTEL); + bo2 = gem_create(fd3, 4096); + + /* Verify VMA is not there yet. */ + matched = igt_debugfs_search("i915_gem_gtt", match); + igt_assert_eq(matched, false); + exec_and_get_offset(fd2, flinked_bo); gem_sync(fd2, flinked_bo); - /* Verify looking for string works OK. */ + /* Verify VMA has been created. */ matched = igt_debugfs_search("i915_gem_gtt", match); igt_assert_eq(matched, true); @@ -284,6 +291,11 @@ static void flink_and_exit(void) /* Close the context. */ close(fd2); + /* Execute a different and unrelated (wrt object sharing) context to + * ensure engine drops its last context reference. + */ + exec_and_get_offset(fd3, bo2); + retry: /* Give cleanup some time to run. */ usleep(100000); @@ -297,6 +309,9 @@ retry: igt_assert_eq(matched, false); + gem_close(fd3, bo2); + close(fd3); + gem_close(fd, bo); close(fd); }