public inbox for igt-dev@lists.freedesktop.org
 help / color / mirror / Atom feed
* [igt-dev] [RFC i-g-t] igt/kms_cursor_legacy: Add single atomic 2x flip vs cursor tests
@ 2018-10-12  0:46 sunpeng.li
  2018-10-12  1:48 ` [igt-dev] ✓ Fi.CI.BAT: success for " Patchwork
  2018-10-12  5:55 ` [igt-dev] ✓ Fi.CI.IGT: " Patchwork
  0 siblings, 2 replies; 3+ messages in thread
From: sunpeng.li @ 2018-10-12  0:46 UTC (permalink / raw)
  To: igt-dev

From: Leo Li <sunpeng.li@amd.com>

This test executes flips on both CRTCs by using a single atomic commit,
while running cursor updates in parallel.

It tests the problem as described by this DRM patch:
https://patchwork.freedesktop.org/patch/256297/

This is a rough test that I c-and-p'd together with existing code,
just to showcase the issue. The 2x-nonblocking-modeset-vs-cursor-atomic
test might have been sufficient, but amdgpu currently doesn't like
non-blocking modesets. I can't try it on i915 either, since the issue is
being masked by commit_hw_done() being done after wait_for_flip_done().

It's currently quite flakey. On my system, it usually causes the
protection fault on second run, regardless of the test duration. I'm not
yet sure how to write something that can test this reliably.

It also isn't verifying the vblank counts. Interestingly, it seems to
reproduce less when I do verify them. So for the sake of showcasing
the problem, I left it out.

Needless to say, lots of wrong things being done here. Any input on how
to structure this test and make it more reliable will be much
appreciated :)

Signed-off-by: Leo Li <sunpeng.li@amd.com>
---
 tests/kms_cursor_legacy.c | 97 +++++++++++++++++++++++++++++++++++++++
 1 file changed, 97 insertions(+)

diff --git a/tests/kms_cursor_legacy.c b/tests/kms_cursor_legacy.c
index 79df79a3..64d6545d 100644
--- a/tests/kms_cursor_legacy.c
+++ b/tests/kms_cursor_legacy.c
@@ -266,6 +266,27 @@ static void flip_nonblocking(igt_display_t *display, enum pipe pipe_id, bool ato
 	igt_reset_timeout();
 }
 
+static void flip_two_pipes_nonblocking(igt_display_t *display,
+				      enum pipe pipe1_id, enum pipe pipe2_id,
+				      struct igt_fb *fb1, struct igt_fb *fb2,
+				      void *data)
+{
+	igt_pipe_t *pipe1 = &display->pipes[pipe1_id];
+	igt_pipe_t *pipe2 = &display->pipes[pipe2_id];
+	igt_plane_t *primary1 = igt_pipe_get_plane_type(pipe1, DRM_PLANE_TYPE_PRIMARY);
+	igt_plane_t *primary2 = igt_pipe_get_plane_type(pipe2, DRM_PLANE_TYPE_PRIMARY);
+	int ret;
+
+	igt_set_timeout(1, "Scheduling page flip\n");
+	igt_plane_set_fb(primary1, fb1);
+	igt_plane_set_fb(primary2, fb2);
+	do {
+		ret = igt_display_try_commit_atomic(display, DRM_MODE_ATOMIC_NONBLOCK | DRM_MODE_PAGE_FLIP_EVENT, data);
+	} while (ret == -EBUSY);
+	igt_assert(!ret);
+	igt_reset_timeout();
+}
+
 enum flip_test {
 	flip_test_legacy = 0,
 	flip_test_varying_size,
@@ -1022,6 +1043,76 @@ done:
 	igt_remove_fb(display->drm_fd, &cursor_fb);
 }
 
+static void two_screens_single_atomic_flip_vs_cursor(igt_display_t *display,
+						     int nloops)
+{
+	struct drm_mode_cursor arg1[2], arg2[2];
+	struct igt_fb fb_info, fb2_info, cursor_fb;
+	enum pipe pipe = find_connected_pipe(display, false);
+	enum pipe pipe2 = find_connected_pipe(display, true);
+	igt_output_t *output, *output2;
+	volatile unsigned long *shared;
+	struct drm_event_vblank vbl;
+
+	shared = mmap(NULL, 4096, PROT_WRITE, MAP_SHARED | MAP_ANON, -1, 0);
+	igt_assert(shared != MAP_FAILED);
+
+	igt_require(display->is_atomic);
+
+	igt_require((output = set_fb_on_crtc(display, pipe, &fb_info)));
+	igt_require((output2 = set_fb_on_crtc(display, pipe2, &fb2_info)));
+
+	igt_create_color_fb(display->drm_fd, 64, 64, DRM_FORMAT_ARGB8888, 0, 1., 1., 1., &cursor_fb);
+	set_cursor_on_pipe(display, pipe, &cursor_fb);
+	populate_cursor_args(display, pipe, arg1, &cursor_fb);
+
+	arg1[1].x = arg1[1].y = 192;
+
+	set_cursor_on_pipe(display, pipe2, &cursor_fb);
+	populate_cursor_args(display, pipe2, arg2, &cursor_fb);
+
+	arg2[1].x = arg2[1].y = 192;
+
+
+	igt_display_commit2(display, COMMIT_ATOMIC);
+
+	igt_fork(child, 2) {
+		struct drm_mode_cursor *arg = child ? arg2 : arg1;
+
+		while (!shared[0])
+			do_ioctl(display->drm_fd, DRM_IOCTL_MODE_CURSOR,
+				 &arg[!shared[1]]);
+	}
+
+	flip_two_pipes_nonblocking(display, pipe, pipe2, &fb_info, &fb2_info, NULL);
+
+	while (nloops) {
+		shared[1] = nloops & 1;
+
+		igt_set_timeout(1, "Stuck page flip");
+		igt_assert_eq(read(display->drm_fd, &vbl, sizeof(vbl)), sizeof(vbl));
+		igt_assert_eq(read(display->drm_fd, &vbl, sizeof(vbl)), sizeof(vbl));
+		igt_reset_timeout();
+
+		/* Do not requeue on the last 2 events. */
+		if (nloops <= 1) {
+			nloops--;
+			continue;
+		}
+
+		flip_two_pipes_nonblocking(display, pipe, pipe2, &fb_info, &fb2_info, NULL);
+		nloops--;
+
+	}
+
+	shared[0] = 1;
+	igt_waitchildren();
+
+	igt_remove_fb(display->drm_fd, &fb_info);
+	igt_remove_fb(display->drm_fd, &fb2_info);
+	igt_remove_fb(display->drm_fd, &cursor_fb);
+}
+
 static void cursor_vs_flip(igt_display_t *display, enum flip_test mode, int nloops)
 {
 	struct drm_mode_cursor arg[2];
@@ -1445,6 +1536,12 @@ igt_main
 	igt_subtest("2x-long-cursor-vs-flip-atomic")
 		two_screens_cursor_vs_flip(&display, 50, true);
 
+	igt_subtest("2x-mirrored-flip-vs-cursor-atomic")
+		two_screens_single_atomic_flip_vs_cursor(&display, 8);
+
+	igt_subtest("2x-long-mirrored-flip-vs-cursor-atomic")
+		two_screens_single_atomic_flip_vs_cursor(&display, 150);
+
 	igt_subtest("flip-vs-cursor-crc-legacy")
 		flip_vs_cursor_crc(&display, false);
 
-- 
2.17.1

_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev

^ permalink raw reply related	[flat|nested] 3+ messages in thread

* [igt-dev] ✓ Fi.CI.BAT: success for igt/kms_cursor_legacy: Add single atomic 2x flip vs cursor tests
  2018-10-12  0:46 [igt-dev] [RFC i-g-t] igt/kms_cursor_legacy: Add single atomic 2x flip vs cursor tests sunpeng.li
@ 2018-10-12  1:48 ` Patchwork
  2018-10-12  5:55 ` [igt-dev] ✓ Fi.CI.IGT: " Patchwork
  1 sibling, 0 replies; 3+ messages in thread
From: Patchwork @ 2018-10-12  1:48 UTC (permalink / raw)
  To: sunpeng.li; +Cc: igt-dev

== Series Details ==

Series: igt/kms_cursor_legacy: Add single atomic 2x flip vs cursor tests
URL   : https://patchwork.freedesktop.org/series/50895/
State : success

== Summary ==

= CI Bug Log - changes from CI_DRM_4973 -> IGTPW_1944 =

== Summary - SUCCESS ==

  No regressions found.

  External URL: https://patchwork.freedesktop.org/api/1.0/series/50895/revisions/1/mbox/

== Known issues ==

  Here are the changes found in IGTPW_1944 that come from known issues:

  === IGT changes ===

    ==== Issues hit ====

    igt@gem_exec_suspend@basic-s3:
      fi-blb-e6850:       PASS -> INCOMPLETE (fdo#107718)

    
    ==== Possible fixes ====

    igt@kms_frontbuffer_tracking@basic:
      fi-byt-clapper:     FAIL (fdo#103167) -> PASS

    igt@kms_pipe_crc_basic@nonblocking-crc-pipe-a:
      fi-byt-clapper:     FAIL (fdo#107362) -> PASS

    
  fdo#103167 https://bugs.freedesktop.org/show_bug.cgi?id=103167
  fdo#107362 https://bugs.freedesktop.org/show_bug.cgi?id=107362
  fdo#107718 https://bugs.freedesktop.org/show_bug.cgi?id=107718


== Participating hosts (43 -> 40) ==

  Additional (2): fi-skl-guc fi-gdg-551 
  Missing    (5): fi-ctg-p8600 fi-ilk-m540 fi-byt-squawks fi-bsw-cyan fi-hsw-4200u 


== Build changes ==

    * IGT: IGT_4673 -> IGTPW_1944

  CI_DRM_4973: 60ba18212b324d02e961232953f190612d7a6ca3 @ git://anongit.freedesktop.org/gfx-ci/linux
  IGTPW_1944: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_1944/
  IGT_4673: 54cb1aeb4e50dea9f3abae632e317875d147c4ab @ git://anongit.freedesktop.org/xorg/app/intel-gpu-tools



== Testlist changes ==

+igt@kms_cursor_legacy@2x-long-mirrored-flip-vs-cursor-atomic
+igt@kms_cursor_legacy@2x-mirrored-flip-vs-cursor-atomic

== Logs ==

For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_1944/issues.html
_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev

^ permalink raw reply	[flat|nested] 3+ messages in thread

* [igt-dev] ✓ Fi.CI.IGT: success for igt/kms_cursor_legacy: Add single atomic 2x flip vs cursor tests
  2018-10-12  0:46 [igt-dev] [RFC i-g-t] igt/kms_cursor_legacy: Add single atomic 2x flip vs cursor tests sunpeng.li
  2018-10-12  1:48 ` [igt-dev] ✓ Fi.CI.BAT: success for " Patchwork
@ 2018-10-12  5:55 ` Patchwork
  1 sibling, 0 replies; 3+ messages in thread
From: Patchwork @ 2018-10-12  5:55 UTC (permalink / raw)
  To: sunpeng.li; +Cc: igt-dev

== Series Details ==

Series: igt/kms_cursor_legacy: Add single atomic 2x flip vs cursor tests
URL   : https://patchwork.freedesktop.org/series/50895/
State : success

== Summary ==

= CI Bug Log - changes from IGT_4673_full -> IGTPW_1944_full =

== Summary - WARNING ==

  Minor unknown changes coming with IGTPW_1944_full need to be verified
  manually.
  
  If you think the reported changes have nothing to do with the changes
  introduced in IGTPW_1944_full, please notify your bug team to allow them
  to document this new failure mode, which will reduce false positives in CI.

  External URL: https://patchwork.freedesktop.org/api/1.0/series/50895/revisions/1/mbox/

== Possible new issues ==

  Here are the unknown changes that may have been introduced in IGTPW_1944_full:

  === IGT changes ===

    ==== Warnings ====

    igt@perf_pmu@rc6:
      shard-kbl:          SKIP -> PASS

    
== Known issues ==

  Here are the changes found in IGTPW_1944_full that come from known issues:

  === IGT changes ===

    ==== Issues hit ====

    igt@gem_eio@in-flight-suspend:
      shard-snb:          PASS -> INCOMPLETE (fdo#105411)

    igt@kms_available_modes_crc@available_mode_test_crc:
      shard-apl:          PASS -> FAIL (fdo#106641)

    igt@kms_busy@extended-pageflip-modeset-hang-oldfb-render-c:
      shard-apl:          PASS -> DMESG-WARN (fdo#107956)

    igt@kms_cursor_crc@cursor-128x128-suspend:
      shard-apl:          PASS -> FAIL (fdo#103191, fdo#103232)

    igt@kms_cursor_crc@cursor-256x256-dpms:
      shard-glk:          PASS -> FAIL (fdo#103232) +4

    igt@kms_cursor_crc@cursor-256x256-random:
      shard-apl:          PASS -> FAIL (fdo#103232) +2

    igt@kms_draw_crc@draw-method-rgb565-pwrite-xtiled:
      shard-glk:          PASS -> FAIL (fdo#103184)

    igt@kms_frontbuffer_tracking@fbc-1p-rte:
      shard-apl:          PASS -> FAIL (fdo#105682, fdo#103167)

    igt@kms_frontbuffer_tracking@fbc-2p-primscrn-spr-indfb-draw-pwrite:
      shard-glk:          PASS -> FAIL (fdo#103167) +2

    igt@kms_plane@plane-position-covered-pipe-b-planes:
      shard-kbl:          PASS -> FAIL (fdo#103166) +1

    igt@kms_plane_alpha_blend@pipe-a-constant-alpha-max:
      shard-kbl:          PASS -> FAIL (fdo#108145)
      shard-apl:          PASS -> FAIL (fdo#108145)

    igt@kms_plane_alpha_blend@pipe-b-constant-alpha-max:
      shard-glk:          PASS -> FAIL (fdo#108145) +1

    igt@kms_plane_alpha_blend@pipe-c-alpha-7efc:
      shard-kbl:          NOTRUN -> FAIL (fdo#108146)

    igt@kms_plane_multiple@atomic-pipe-b-tiling-y:
      shard-glk:          PASS -> FAIL (fdo#103166) +2

    igt@kms_plane_multiple@atomic-pipe-c-tiling-yf:
      shard-apl:          PASS -> FAIL (fdo#103166) +2

    igt@kms_rotation_crc@primary-rotation-180:
      shard-snb:          PASS -> FAIL (fdo#103925)

    igt@kms_setmode@basic:
      shard-apl:          PASS -> FAIL (fdo#99912)

    igt@kms_vblank@pipe-b-ts-continuation-suspend:
      shard-kbl:          PASS -> INCOMPLETE (fdo#103665)

    igt@perf@low-oa-exponent-permissions:
      shard-glk:          PASS -> INCOMPLETE (fdo#103359, k.org#198133)

    
    ==== Possible fixes ====

    igt@gem_exec_basic@readonly-bsd:
      shard-snb:          INCOMPLETE (fdo#105411) -> PASS

    igt@gem_mmap@bad-object:
      shard-apl:          DMESG-WARN (fdo#103558, fdo#105602) -> PASS

    igt@kms_addfb_basic@bo-too-small-due-to-tiling:
      shard-snb:          DMESG-WARN (fdo#107469) -> PASS +1

    igt@kms_available_modes_crc@available_mode_test_crc:
      shard-snb:          FAIL (fdo#106641) -> PASS

    igt@kms_busy@extended-modeset-hang-newfb-render-a:
      shard-kbl:          DMESG-WARN (fdo#107956) -> PASS

    igt@kms_busy@extended-pageflip-modeset-hang-oldfb-render-a:
      shard-hsw:          DMESG-WARN (fdo#107956) -> PASS

    igt@kms_chv_cursor_fail@pipe-c-128x128-right-edge:
      shard-glk:          INCOMPLETE (fdo#103359, k.org#198133) -> PASS

    igt@kms_color@pipe-c-legacy-gamma:
      shard-kbl:          FAIL (fdo#104782) -> PASS
      shard-apl:          FAIL (fdo#104782) -> PASS

    igt@kms_cursor_crc@cursor-128x128-random:
      shard-apl:          FAIL (fdo#103232) -> PASS

    igt@kms_cursor_crc@cursor-128x128-suspend:
      shard-kbl:          INCOMPLETE (fdo#103665) -> PASS

    igt@kms_cursor_legacy@cursora-vs-flipa-toggle:
      shard-glk:          DMESG-WARN (fdo#106538, fdo#105763) -> PASS

    igt@kms_frontbuffer_tracking@fbc-1p-primscrn-spr-indfb-draw-mmap-cpu:
      shard-kbl:          FAIL (fdo#103167) -> PASS

    igt@kms_frontbuffer_tracking@fbc-1p-primscrn-spr-indfb-draw-pwrite:
      shard-apl:          FAIL (fdo#103167) -> PASS +2

    igt@kms_frontbuffer_tracking@fbc-2p-primscrn-spr-indfb-draw-mmap-cpu:
      shard-glk:          FAIL (fdo#103167) -> PASS +6

    igt@kms_plane_alpha_blend@pipe-b-alpha-opaque-fb:
      shard-glk:          FAIL (fdo#108145) -> PASS

    igt@kms_plane_alpha_blend@pipe-b-constant-alpha-max:
      shard-apl:          FAIL (fdo#108145) -> PASS

    igt@kms_plane_multiple@atomic-pipe-a-tiling-y:
      shard-glk:          FAIL (fdo#103166) -> PASS +4
      shard-apl:          FAIL (fdo#103166) -> PASS +2

    igt@kms_plane_multiple@atomic-pipe-b-tiling-x:
      shard-kbl:          FAIL (fdo#103166) -> PASS

    igt@perf_pmu@rc6-runtime-pm:
      shard-apl:          FAIL (fdo#105010) -> PASS

    igt@perf_pmu@rc6-runtime-pm-long:
      shard-kbl:          FAIL (fdo#105010) -> PASS

    
  fdo#103166 https://bugs.freedesktop.org/show_bug.cgi?id=103166
  fdo#103167 https://bugs.freedesktop.org/show_bug.cgi?id=103167
  fdo#103184 https://bugs.freedesktop.org/show_bug.cgi?id=103184
  fdo#103191 https://bugs.freedesktop.org/show_bug.cgi?id=103191
  fdo#103232 https://bugs.freedesktop.org/show_bug.cgi?id=103232
  fdo#103359 https://bugs.freedesktop.org/show_bug.cgi?id=103359
  fdo#103558 https://bugs.freedesktop.org/show_bug.cgi?id=103558
  fdo#103665 https://bugs.freedesktop.org/show_bug.cgi?id=103665
  fdo#103925 https://bugs.freedesktop.org/show_bug.cgi?id=103925
  fdo#104782 https://bugs.freedesktop.org/show_bug.cgi?id=104782
  fdo#105010 https://bugs.freedesktop.org/show_bug.cgi?id=105010
  fdo#105411 https://bugs.freedesktop.org/show_bug.cgi?id=105411
  fdo#105602 https://bugs.freedesktop.org/show_bug.cgi?id=105602
  fdo#105682 https://bugs.freedesktop.org/show_bug.cgi?id=105682
  fdo#105763 https://bugs.freedesktop.org/show_bug.cgi?id=105763
  fdo#106538 https://bugs.freedesktop.org/show_bug.cgi?id=106538
  fdo#106641 https://bugs.freedesktop.org/show_bug.cgi?id=106641
  fdo#107469 https://bugs.freedesktop.org/show_bug.cgi?id=107469
  fdo#107956 https://bugs.freedesktop.org/show_bug.cgi?id=107956
  fdo#108145 https://bugs.freedesktop.org/show_bug.cgi?id=108145
  fdo#108146 https://bugs.freedesktop.org/show_bug.cgi?id=108146
  fdo#99912 https://bugs.freedesktop.org/show_bug.cgi?id=99912
  k.org#198133 https://bugzilla.kernel.org/show_bug.cgi?id=198133


== Participating hosts (6 -> 5) ==

  Missing    (1): shard-skl 


== Build changes ==

    * IGT: IGT_4673 -> IGTPW_1944
    * Linux: CI_DRM_4958 -> CI_DRM_4973

  CI_DRM_4958: 9990e1665029dc2ef4a9c0632b8a2f516263e595 @ git://anongit.freedesktop.org/gfx-ci/linux
  CI_DRM_4973: 60ba18212b324d02e961232953f190612d7a6ca3 @ git://anongit.freedesktop.org/gfx-ci/linux
  IGTPW_1944: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_1944/
  IGT_4673: 54cb1aeb4e50dea9f3abae632e317875d147c4ab @ git://anongit.freedesktop.org/xorg/app/intel-gpu-tools

== Logs ==

For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_1944/shards.html
_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2018-10-12  5:55 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2018-10-12  0:46 [igt-dev] [RFC i-g-t] igt/kms_cursor_legacy: Add single atomic 2x flip vs cursor tests sunpeng.li
2018-10-12  1:48 ` [igt-dev] ✓ Fi.CI.BAT: success for " Patchwork
2018-10-12  5:55 ` [igt-dev] ✓ Fi.CI.IGT: " Patchwork

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox