[igt-dev] [PATCH i-g-t 1/3] tests/kms_busy: Limit the execution to two pipes
Shankar, Uma
uma.shankar at intel.com
Fri Jul 23 05:23:22 UTC 2021
> -----Original Message-----
> From: Modem, Bhanuprakash <bhanuprakash.modem at intel.com>
> Sent: Monday, July 5, 2021 6:26 PM
> To: igt-dev at lists.freedesktop.org; Gupta, Anshuman <anshuman.gupta at intel.com>
> Cc: Modem, Bhanuprakash <bhanuprakash.modem at intel.com>; B S, Karthik
> <karthik.b.s at intel.com>; Latvala, Petri <petri.latvala at intel.com>; Kunche, Kishore
> <kishore.kunche at intel.com>; Shankar, Uma <uma.shankar at intel.com>
> Subject: [PATCH i-g-t 1/3] 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.
Looks Good to me.
Reviewed-by: Uma Shankar <uma.shankar at intel.com>
> Cc: Karthik B S <karthik.b.s at intel.com>
> Cc: Latvala Petri <petri.latvala at intel.com>
> Cc: Kunche Kishore <kishore.kunche at intel.com>
> Cc: Uma Shankar <uma.shankar at intel.com>
> Signed-off-by: Bhanuprakash Modem <bhanuprakash.modem at intel.com>
> ---
> tests/kms_busy.c | 149 ++++++++++++++++++++++++++++-------------------
> 1 file changed, 90 insertions(+), 59 deletions(-)
>
> diff --git a/tests/kms_busy.c b/tests/kms_busy.c index 0973daf04e..61d4d35ddf
> 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);
> }
> }
> --
> 2.20.1
More information about the igt-dev
mailing list