[igt-dev] [PATCH i-g-t] tests: Check and skip tests when driver don't have display enabled

Chris Wilson chris at chris-wilson.co.uk
Fri Sep 7 14:57:54 UTC 2018


Quoting Ville Syrjälä (2018-09-07 15:48:28)
> On Thu, Sep 06, 2018 at 05:44:54PM -0700, José Roberto de Souza wrote:
> > Right now i915 is not doing the full job to complete disable display
> > when i915.disable_display parameters is set, when that is completed
> > it will cause several tests to fail, so here skiping all the tests
> > that depends on modeset or display block when those are not
> > available.

<rant>
This changelog is a pile of excuses.

> > Cc: Jani Nikula <jani.nikula at intel.com>
> > Signed-off-by: José Roberto de Souza <jose.souza at intel.com>
> > ---
> >  lib/igt_kms.c                     | 20 ++++++++++++++++++++
> >  lib/igt_kms.h                     |  1 +
> >  tests/debugfs_test.c              |  1 +
> >  tests/gem_exec_nop.c              |  1 +
> >  tests/kms_3d.c                    |  1 +
> >  tests/kms_addfb_basic.c           |  4 +++-
> >  tests/kms_atomic.c                |  1 +
> >  tests/kms_atomic_interruptible.c  |  1 +
> >  tests/kms_available_modes_crc.c   |  1 +
> >  tests/kms_busy.c                  |  1 +
> >  tests/kms_ccs.c                   |  1 +
> >  tests/kms_chamelium.c             |  1 +
> >  tests/kms_chv_cursor_fail.c       |  1 +
> >  tests/kms_color.c                 |  1 +
> >  tests/kms_concurrent.c            |  1 +
> >  tests/kms_crtc_background_color.c |  1 +
> >  tests/kms_cursor_crc.c            |  1 +
> >  tests/kms_cursor_legacy.c         |  1 +
> >  tests/kms_draw_crc.c              |  1 +
> >  tests/kms_fbcon_fbt.c             |  1 +
> >  tests/kms_fence_pin_leak.c        |  1 +
> >  tests/kms_flip.c                  |  1 +
> >  tests/kms_flip_event_leak.c       |  1 +
> >  tests/kms_flip_tiling.c           |  1 +
> >  tests/kms_force_connector_basic.c |  1 +
> >  tests/kms_frontbuffer_tracking.c  |  1 +
> >  tests/kms_getfb.c                 |  4 +++-
> >  tests/kms_hdmi_inject.c           |  1 +
> >  tests/kms_invalid_dotclock.c      |  1 +
> >  tests/kms_legacy_colorkey.c       |  1 +
> >  tests/kms_mmap_write_crc.c        |  1 +
> >  tests/kms_panel_fitting.c         |  1 +
> >  tests/kms_pipe_b_c_ivb.c          |  1 +
> >  tests/kms_pipe_crc_basic.c        |  1 +
> >  tests/kms_plane.c                 |  1 +
> >  tests/kms_plane_lowres.c          |  1 +
> >  tests/kms_plane_multiple.c        |  1 +
> >  tests/kms_plane_scaling.c         |  1 +
> >  tests/kms_properties.c            |  1 +
> >  tests/kms_psr.c                   |  1 +
> >  tests/kms_pwrite_crc.c            |  1 +
> >  tests/kms_rmfb.c                  |  1 +
> >  tests/kms_rotation_crc.c          |  1 +
> >  tests/kms_setmode.c               |  1 +
> >  tests/kms_sysfs_edid_timing.c     |  5 +++++
> >  tests/kms_tv_load_detect.c        |  1 +
> >  tests/kms_universal_plane.c       |  1 +
> >  tests/kms_vblank.c                |  1 +
> >  tests/perf_pmu.c                  |  1 +
> >  tests/pm_backlight.c              |  5 ++++-
> >  tests/pm_lpsp.c                   |  1 +
> >  tests/pm_rpm.c                    |  1 +
> >  tests/prime_vgem.c                |  2 ++
> >  tests/testdisplay.c               |  1 +
> >  54 files changed, 85 insertions(+), 3 deletions(-)
> > 
> > diff --git a/lib/igt_kms.c b/lib/igt_kms.c
> > index 62d84684..7578a10b 100644
> > --- a/lib/igt_kms.c
> > +++ b/lib/igt_kms.c
> > @@ -2018,6 +2018,26 @@ int igt_display_get_n_pipes(igt_display_t *display)
> >       return display->n_pipes;
> >  }
> >  
> > +/**
> > + * igt_display_require_output:
> > + * @drm_fd: a drm file descriptor
> > + *
> > + * Checks if driver supports modeset and have display enabled.
> > + */
> > +void igt_require_display(int fd)
> > +{
> > +     drmModeRes *resources;
> > +     int pipes;
> > +
> > +     resources = drmModeGetResources(fd);

You don't need to allocate anything, so don't.

> > +     igt_require_f(resources, "drm driver do not support modeset\n");
> > +
> > +     pipes = resources->count_crtcs;
> > +     drmModeFreeResources(resources);
> > +
> > +     igt_require_f(pipes > 0, "drm driver without display hardware\n");
> > +}
> > +
> >  /**
> >   * igt_display_require_output:
> >   * @display: A pointer to an #igt_display_t structure
> > diff --git a/lib/igt_kms.h b/lib/igt_kms.h
> > index 3a12f278..037bcb23 100644
> > --- a/lib/igt_kms.h
> > +++ b/lib/igt_kms.h
> > @@ -388,6 +388,7 @@ void igt_display_commit_atomic(igt_display_t *display, uint32_t flags, void *use
> >  int  igt_display_try_commit2(igt_display_t *display, enum igt_commit_style s);
> >  int  igt_display_drop_events(igt_display_t *display);
> >  int  igt_display_get_n_pipes(igt_display_t *display);
> > +void igt_require_display(int fd);
> >  void igt_display_require_output(igt_display_t *display);
> >  void igt_display_require_output_on_pipe(igt_display_t *display, enum pipe pipe);
> >  
> > diff --git a/tests/debugfs_test.c b/tests/debugfs_test.c
> > index 2e87e442..6d77ee72 100644
> > --- a/tests/debugfs_test.c
> > +++ b/tests/debugfs_test.c
> > @@ -99,6 +99,7 @@ igt_main
> >       igt_fixture {
> >               fd = drm_open_driver_master(DRIVER_INTEL);
> >               igt_require_gem(fd);
> > +             igt_require_display(fd);
> >               debugfs = igt_debugfs_dir(fd);
> >  
> >               kmstest_set_vt_graphics_mode();
> 
> I guess we lose the emon subtest here. But that's ilk only so meh.

Skipping the entire set of tests just because there's no display
attached, no.

> <snip>
> > diff --git a/tests/perf_pmu.c b/tests/perf_pmu.c
> > index 6ab2595b..6c347acc 100644
> > --- a/tests/perf_pmu.c
> > +++ b/tests/perf_pmu.c
> > @@ -1397,6 +1397,7 @@ test_rc6(int gem_fd, unsigned int flags)
> >       if (flags & TEST_RUNTIME_PM) {
> >               drmModeRes *res;
> >  
> > +             igt_require_display(gem_fd);
> 
> Might we want to just skip the display interaction here but still
> execute the rest of the subtest? Or is that redundant when there is no
> display anyway?

Nope. Should work without.

> >               res = drmModeGetResources(gem_fd);
> >               igt_assert(res);
> >  
> <snip> 
> > diff --git a/tests/pm_rpm.c b/tests/pm_rpm.c
> > index c24fd95b..627b1a1a 100644
> > --- a/tests/pm_rpm.c
> > +++ b/tests/pm_rpm.c
> > @@ -719,6 +719,7 @@ static bool setup_environment(void)
> >  
> >       debugfs = igt_debugfs_dir(drm_fd);
> >       igt_require(debugfs != -1);
> > +     igt_require_display(drm_fd);
> 
> Somewhat the same question here. Although this test looks like it's
> expecting display stuff all over, so probably can't easily exclude it.

Nah, this is meant to work (and even tests) i915.disable_display.

Nacked-by: Chris Wilson <chris at chris-wilson.co.uk>
-Chris


More information about the igt-dev mailing list