[igt-dev] [PATCH i-g-t] tests/kms_cursor_legacy: Remove vblank counter check immediately after flip_nonblocking
Rob Clark
robdclark at gmail.com
Mon Jul 25 23:07:59 UTC 2022
On Fri, Dec 17, 2021 at 4:51 AM Ville Syrjälä
<ville.syrjala at linux.intel.com> wrote:
>
> On Fri, Dec 10, 2021 at 09:20:06AM -0800, Jessica Zhang wrote:
> > Currently, there is a check that the vblank counter shouldn't change after
> > a nonblocking page flip and DRM_IOCTL_MODE_CURSOR call. This assumes
> > that ioctl is performed before the commit from the nonblocking flip is
> > dequeued.
> >
> > The DRM_IOCTL_MODE_CURSOR callstack is as such:
> > drm_mode_cursor_ioctl
> > drm_mode_cursor_common
> > drm_mode_cursor_universal
> > __setplane_atomic
> > drm_atomic_helper_update_plane
> > drm_atomic_commit
> >
> > Becuase the commit work queue is scheduled earlier than
> > DRM_CURSOR_IOCTL, it will finish before the ioctl. Thus, we can't
> > assume that the current vblank count will match vblank_start after the
> > cursor ioctl finishes.
>
> Your driver is broken. The legacy cursor ioctl is expected to
> not get stuck behind the page flip.
Well, perhaps the atomic helpers are broken in that case? But I don't
really agree that the legacy cursor was *that* well defined that we
can call this a driver bug.
What I'd propose instead is to do reverse the order of the pageflip
and cursor updates, so the cursor updates don't get stuck behind the
pageflip.
BR,
-R
>
> >
> > Tested-on: Chromebook Lazor (Trogdor)
> >
> > Signed-off-by: Jessica Zhang <quic_jesszhan at quicinc.com>
> > ---
> > tests/kms_cursor_legacy.c | 2 --
> > 1 file changed, 2 deletions(-)
> >
> > diff --git a/tests/kms_cursor_legacy.c b/tests/kms_cursor_legacy.c
> > index d50155e8..82c01bc8 100644
> > --- a/tests/kms_cursor_legacy.c
> > +++ b/tests/kms_cursor_legacy.c
> > @@ -1307,8 +1307,6 @@ static void flip_vs_cursor_crc(igt_display_t *display, bool atomic)
> > flip_nonblocking(display, pipe, atomic, &fb_info, NULL);
> > do_ioctl(display->drm_fd, DRM_IOCTL_MODE_CURSOR, &arg[i]);
> >
> > - igt_assert_eq(kmstest_get_vblank(display->drm_fd, pipe, 0), vblank_start);
> > -
> > igt_set_timeout(1, "Stuck page flip");
> > igt_ignore_warn(read(display->drm_fd, &vbl, sizeof(vbl)));
> > igt_reset_timeout();
> > --
> > 2.31.0
>
> --
> Ville Syrjälä
> Intel
More information about the igt-dev
mailing list