If one of the previous tests fails then the following tests fail. This patch means that the following tests do not fail when the previous test fails (for some cases). Signed-off-by: Peter Antoine <peter.antoine@xxxxxxxxx> --- lib/igt_aux.c | 67 +++++++++++++++++++++++++++++++++++++++++++++++ lib/igt_aux.h | 2 ++ tests/gem_mocs_settings.c | 56 +++++++++++++++++++++------------------ 3 files changed, 99 insertions(+), 26 deletions(-) diff --git a/lib/igt_aux.c b/lib/igt_aux.c index 1cb9398..cc3ce26 100644 --- a/lib/igt_aux.c +++ b/lib/igt_aux.c @@ -629,6 +629,41 @@ void igt_cleanup_aperture_trashers(void) #define SQUELCH ">/dev/null 2>&1" /** + * igt_system_suspend_autoresume_no_assert: + * + * Execute a system suspend-to-mem cycle and automatically wake up again using + * the firmware's resume timer. + * + * This is very handy for implementing any kind of suspend/resume test. + * + * This version does not cause an "exception" as the test will need to tidy-up + * to allow for subsequent tests to run. + */ +bool igt_system_suspend_autoresume_no_assert(void) +{ + /* FIXME: Simulation doesn't like suspend/resume, and not even a lighter + * approach using /sys/power/pm_test to just test our driver's callbacks + * seems to fare better. We need to investigate what's going on. */ + if (igt_run_in_simulation()) { + igt_debug("autoresume cannot be used in simulation\n"); + return false; + + } else if (system("rtcwake -n -s 15 -m mem" SQUELCH) != 0) { + igt_debug("rtcwake -n -s 15 -m mem is not supported\n"); + return false; + + } else if (system("rtcwake -s 15 -m mem") != 0) { + igt_debug( + "This failure means that something is wrong with the " + "rtcwake tool or how your distro is set up. This is not " + "a i915.ko or i-g-t bug.\n"); + return false; + } + + return true; +} + +/** * igt_system_suspend_autoresume: * * Execute a system suspend-to-mem cycle and automatically wake up again using @@ -653,6 +688,38 @@ void igt_system_suspend_autoresume(void) } /** + * igt_system_hibernate_autoresume_no_assert: + * + * Execute a system suspend-to-disk cycle and automatically wake up again using + * the firmware's resume timer. + * + * This is very handy for implementing any kind of hibernate/resume test. + * + * This version does not cause an "exception" as the test will need to tidy-up + * to allow for subsequent tests to run. + */ +bool igt_system_hibernate_autoresume_no_assert(void) +{ + if (igt_run_in_simulation()) { + igt_debug("autoresume cannot be used in simulation\n"); + return false; + + } else if (system("rtcwake -n -s 30 -m disk" SQUELCH) != 0) { + igt_debug("rtcwake -n -s 30 -m disk is not supported\n"); + return false; + + } else if (system("rtcwake -s 30 -m disk") != 0) { + igt_debug( + "This failure means that something is wrong with the " + "rtcwake tool or how your distro is set up. This is not " + "a i915.ko or i-g-t bug.\n"); + return false; + } + + return true; +} + +/** * igt_system_hibernate_autoresume: * * Execute a system suspend-to-disk cycle and automatically wake up again using diff --git a/lib/igt_aux.h b/lib/igt_aux.h index be0d2d6..483c444 100644 --- a/lib/igt_aux.h +++ b/lib/igt_aux.h @@ -103,7 +103,9 @@ void igt_cleanup_aperture_trashers(void); /* suspend/hibernate and auto-resume system */ void igt_system_suspend_autoresume(void); +bool igt_system_suspend_autoresume_no_assert(void); void igt_system_hibernate_autoresume(void); +bool igt_system_hibernate_autoresume_no_assert(void); /* dropping priviledges */ void igt_drop_root(void); diff --git a/tests/gem_mocs_settings.c b/tests/gem_mocs_settings.c index 66d02d9..1da7473 100644 --- a/tests/gem_mocs_settings.c +++ b/tests/gem_mocs_settings.c @@ -373,6 +373,27 @@ static void test_mocs_values(int fd) } } +static void action_test(int fd, unsigned int mode) +{ + switch (mode) { + case RESET: + igt_force_gpu_reset(); + break; + case SUSPEND: + if (!igt_system_suspend_autoresume_no_assert()) { + close(fd); + igt_fail(1); + } + break; + case HIBERNATE: + if (!igt_system_hibernate_autoresume_no_assert()) { + close(fd); + igt_fail(1); + } + break; + } +} + static void default_context_tests(unsigned mode) { int fd = drm_open_driver_master(DRIVER_INTEL); @@ -380,12 +401,7 @@ static void default_context_tests(unsigned mode) igt_debug("Testing Non/Default Context Engines\n"); test_mocs_values(fd); - switch (mode) { - case NONE: break; - case RESET: igt_force_gpu_reset(); break; - case SUSPEND: igt_system_suspend_autoresume(); break; - case HIBERNATE: igt_system_hibernate_autoresume(); break; - } + action_test(fd, mode); test_mocs_values(fd); close(fd); @@ -419,12 +435,7 @@ static void default_dirty_tests(unsigned mode) engine); } - switch (mode) { - case NONE: break; - case RESET: igt_force_gpu_reset(); break; - case SUSPEND: igt_system_suspend_autoresume(); break; - case HIBERNATE: igt_system_hibernate_autoresume(); break; - } + action_test(fd, mode); close(fd); @@ -442,12 +453,7 @@ static void context_save_restore_test(unsigned mode) check_control_registers(fd, I915_EXEC_RENDER, ctx_id, false); check_l3cc_registers(fd, I915_EXEC_RENDER, ctx_id, false); - switch (mode) { - case NONE: break; - case RESET: igt_force_gpu_reset(); break; - case SUSPEND: igt_system_suspend_autoresume(); break; - case HIBERNATE: igt_system_hibernate_autoresume(); break; - } + action_test(fd, mode); check_control_registers(fd, I915_EXEC_RENDER, ctx_id, false); check_l3cc_registers(fd, I915_EXEC_RENDER, ctx_id, false); @@ -485,12 +491,7 @@ static void context_dirty_test(unsigned mode) check_control_registers(fd, I915_EXEC_RENDER, ctx_id, true); check_l3cc_registers(fd, I915_EXEC_RENDER, ctx_id, true); - switch (mode) { - case NONE: break; - case RESET: igt_force_gpu_reset(); break; - case SUSPEND: igt_system_suspend_autoresume(); break; - case HIBERNATE: igt_system_hibernate_autoresume(); break; - } + action_test(fd, mode); check_control_registers(fd, I915_EXEC_RENDER, ctx_id, true); check_l3cc_registers(fd, I915_EXEC_RENDER, ctx_id, true); @@ -562,8 +563,11 @@ static void context_rc6_test(void) check_l3cc_registers(fd, I915_EXEC_RENDER, ctx_id, false); res_ms = read_rc6_residency(); - sleep(3); - igt_assert_neq(res_ms, read_rc6_residency()); + sleep(6); + if (res_ms == read_rc6_residency()) { + close(fd); + igt_assert_neq(res_ms, read_rc6_residency()); + } check_control_registers(fd, I915_EXEC_RENDER, ctx_id, false); check_l3cc_registers(fd, I915_EXEC_RENDER, ctx_id, false); -- 1.9.1 _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/intel-gfx