summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBhanuprakash Modem <bhanuprakash.modem@intel.com>2021-07-05 18:26:15 +0530
committerKunal Joshi <kunal1.joshi@intel.com>2021-07-27 09:49:35 +0530
commit030c28d099a5c6793c92e2b22c8e9abd3d340fdc (patch)
tree24a7af32b6d3efb239f51c8e7c8a9fe0ddc87d21
parentc3170c2d3744521b8351a4b9c579792bc9a5f835 (diff)
tests/kms_busy: Limit the execution to two pipes
To save the CI time, we can restrict the execution to two pipes i.e first and last active pipes. If we want to execute on all pipes, we need to pass an extra argument "-e" indicates extended. Example: ./build/tests/kms_busy -e --r basic V2, V3: * Fix the typo in args handler (Petri) V4: * Handle clampling cleanly (Petri) * Restore lost test coverage in the previous version (Petri/Bhanu) V5: * Fix two subtest with the name "basic" (Petri) V6: * Refactor to run on first & last pipes. Cc: Karthik B S <karthik.b.s@intel.com> Cc: Latvala Petri <petri.latvala@intel.com> Cc: Kunche Kishore <kishore.kunche@intel.com> Cc: Uma Shankar <uma.shankar@intel.com> Signed-off-by: Bhanuprakash Modem <bhanuprakash.modem@intel.com> Reviewed-by: Uma Shankar <uma.shankar@intel.com>
-rw-r--r--tests/kms_busy.c149
1 files changed, 90 insertions, 59 deletions
diff --git a/tests/kms_busy.c b/tests/kms_busy.c
index 9722aadc..a60ff6b0 100644
--- a/tests/kms_busy.c
+++ b/tests/kms_busy.c
@@ -30,6 +30,8 @@
IGT_TEST_DESCRIPTION("Basic check of KMS ABI with busy framebuffers.");
+static bool all_pipes = false;
+
static igt_output_t *
set_fb_on_crtc(igt_display_t *dpy, int pipe, struct igt_fb *fb)
{
@@ -287,13 +289,46 @@ static void test_pageflip_modeset_hang(igt_display_t *dpy, enum pipe pipe)
igt_remove_fb(dpy->drm_fd, &fb);
}
-igt_main
+static int opt_handler(int opt, int opt_index, void *data)
+{
+ switch (opt) {
+ case 'e':
+ all_pipes = true;
+ break;
+ default:
+ return IGT_OPT_HANDLER_ERROR;
+ }
+
+ return IGT_OPT_HANDLER_SUCCESS;
+}
+
+const char *help_str =
+ " -e \tRun on all pipes. (By default subtests will run on two pipes)\n";
+
+igt_main_args("e", NULL, help_str, opt_handler, NULL)
{
igt_display_t display = { .drm_fd = -1, .n_pipes = IGT_MAX_PIPES };
- enum pipe n;
+
+ enum pipe active_pipes[IGT_MAX_PIPES];
+ uint32_t last_pipe = 0;
+ int i;
+ struct {
+ const char *name;
+ bool modeset;
+ bool hang_newfb;
+ bool reset;
+ } tests[] = {
+ { "extended-pageflip-hang-oldfb", false, false, false },
+ { "extended-pageflip-hang-newfb", false, true, false },
+ { "extended-modeset-hang-oldfb", true, false, false },
+ { "extended-modeset-hang-newfb", true, true, false },
+ { "extended-modeset-hang-oldfb-with-reset", true, false, true },
+ { "extended-modeset-hang-newfb-with-reset", true, true, true },
+ };
igt_fixture {
int fd = drm_open_driver_master(DRIVER_INTEL);
+ enum pipe pipe;
igt_require_gem(fd);
gem_require_mmap_wc(fd);
@@ -301,6 +336,11 @@ igt_main
kmstest_set_vt_graphics_mode();
igt_display_require(&display, fd);
+
+ /* Get active pipes. */
+ for_each_pipe(&display, pipe)
+ active_pipes[last_pipe++] = pipe;
+ last_pipe--;
}
/* XXX Extend to cover atomic rendering tests to all planes + legacy */
@@ -319,79 +359,70 @@ igt_main
}
}
- for_each_pipe_static(n) igt_subtest_group {
- igt_hang_t hang;
-
+ igt_subtest_with_dynamic("basic-hang") {
+ enum pipe pipe;
+ igt_output_t *output;
+ igt_hang_t hang = igt_allow_hang(display.drm_fd, 0, 0);
errno = 0;
- igt_fixture {
- igt_display_require_output_on_pipe(&display, n);
- }
-
- igt_describe("Tests basic flip on pipe.");
- igt_subtest_f("basic-flip-pipe-%s", kmstest_pipe_name(n)) {
- test_flip(&display, n, false);
- }
- igt_describe("Tests basic modeset on pipe.");
- igt_subtest_f("basic-modeset-pipe-%s", kmstest_pipe_name(n)) {
-
- test_flip(&display, n, true);
- }
-
- igt_fixture {
- hang = igt_allow_hang(display.drm_fd, 0, 0);
- }
+ for_each_pipe_with_valid_output(&display, pipe, output) {
+ if (!all_pipes && pipe != active_pipes[0] &&
+ pipe != active_pipes[last_pipe])
+ continue;
- igt_describe("Hang test on pipe with oldfb and extended pageflip modeset.");
- igt_subtest_f("extended-pageflip-modeset-hang-oldfb-pipe-%s",
- kmstest_pipe_name(n)) {
- test_pageflip_modeset_hang(&display, n);
+ igt_dynamic_f("flip-pipe-%s", kmstest_pipe_name(pipe))
+ test_flip(&display, pipe, false);
+ igt_dynamic_f("modeset-pipe-%s", kmstest_pipe_name(pipe))
+ test_flip(&display, pipe, true);
}
- igt_fixture
- igt_require(display.is_atomic);
+ igt_disallow_hang(display.drm_fd, hang);
+ }
- igt_describe("Test the results with a single hanging pageflip on pipe with oldfb.");
- igt_subtest_f("extended-pageflip-hang-oldfb-pipe-%s",
- kmstest_pipe_name(n))
- test_hang(&display, n, false, false);
+ igt_subtest_with_dynamic("extended-pageflip-modeset-hang-oldfb") {
+ enum pipe pipe;
+ igt_output_t *output;
+ igt_hang_t hang = igt_allow_hang(display.drm_fd, 0, 0);
+ errno = 0;
- igt_describe("Test the results with a single hanging pageflip on pipe with newfb.");
- igt_subtest_f("extended-pageflip-hang-newfb-pipe-%s",
- kmstest_pipe_name(n))
- test_hang(&display, n, false, true);
+ for_each_pipe_with_valid_output(&display, pipe, output) {
+ if (!all_pipes && pipe != active_pipes[0] &&
+ pipe != active_pipes[last_pipe])
+ continue;
- igt_describe("Tests modeset disable/enable with hang on pipe with oldfb.");
- igt_subtest_f("extended-modeset-hang-oldfb-pipe-%s",
- kmstest_pipe_name(n))
- test_hang(&display, n, true, false);
+ igt_dynamic_f("pipe-%s", kmstest_pipe_name(pipe))
+ test_pageflip_modeset_hang(&display, pipe);
+ }
- igt_describe("Tests modeset disable/enable with hang on pipe with newfb.");
- igt_subtest_f("extended-modeset-hang-newfb-pipe-%s",
- kmstest_pipe_name(n))
- test_hang(&display, n, true, true);
+ igt_disallow_hang(display.drm_fd, hang);
+ }
- igt_describe("Tests modeset disable/enable with hang on reset pipe with oldfb.");
- igt_subtest_f("extended-modeset-hang-oldfb-with-reset-pipe-%s",
- kmstest_pipe_name(n)) {
- igt_set_module_param_int(display.drm_fd, "force_reset_modeset_test", 1);
+ for (i = 0; i < sizeof(tests) / sizeof (tests[0]); i++) {
+ igt_subtest_with_dynamic(tests[i].name) {
+ enum pipe pipe;
+ igt_output_t *output;
+ igt_hang_t hang;
+ errno = 0;
- test_hang(&display, n, true, false);
+ igt_require(display.is_atomic);
+ hang = igt_allow_hang(display.drm_fd, 0, 0);
- igt_set_module_param_int(display.drm_fd, "force_reset_modeset_test", 0);
- }
+ for_each_pipe_with_valid_output(&display, pipe, output) {
+ if (!all_pipes && pipe != active_pipes[0] &&
+ pipe != active_pipes[last_pipe])
+ continue;
- igt_describe("Tests modeset disable/enable with hang on reset pipe with newfb.");
- igt_subtest_f("extended-modeset-hang-newfb-with-reset-pipe-%s",
- kmstest_pipe_name(n)) {
- igt_set_module_param_int(display.drm_fd, "force_reset_modeset_test", 1);
+ igt_dynamic_f("pipe-%s", kmstest_pipe_name(pipe)) {
+ if (tests[i].reset)
+ igt_set_module_param_int(display.drm_fd, "force_reset_modeset_test", 1);
- test_hang(&display, n, true, true);
+ test_hang(&display, pipe, tests[i].modeset, tests[i].hang_newfb);
- igt_set_module_param_int(display.drm_fd, "force_reset_modeset_test", 0);
- }
+ if (tests[i].reset)
+ igt_set_module_param_int(display.drm_fd, "force_reset_modeset_test", 0);
+ }
+ }
- igt_fixture {
igt_disallow_hang(display.drm_fd, hang);
}
}