Skip to contentSkip to conversation

tests/kms_sequence: Add tests for new CRTC get/queue sequence ioctls

PATCH In review [email protected] 4 participants 4 messages Sep 30, 2017 – Oct 10, 2017

Subsystems (2)
lore
Share & tools
lore
#0 lore raw

PATCH 1/1 tests/kms_sequence: Add tests for new CRTC get/queue sequence ioctls

From: Keith Packard <[email protected]>

These ioctls replace drmWaitVBlank and add ns time resolution and 64-bit sequence numbers to comply with the Vulkan API specifications.

The tests were derived from the existing kms_vblank tests with the 'wait' variant elided as the new API doesn't provide a mechanism for blocking in the kernel.

---
 lib/igt_kms.c          |   2 +-
 lib/igt_kms.h          |   1 +
 tests/Makefile.sources |   1 +
 tests/kms_sequence.c   | 289 +++++++++++++++++++++++++++++++++++++++++++++++++
 tests/meson.build      |   1 +
 5 files changed, 293 insertions(+), 1 deletion(-)
 create mode 100644 tests/kms_sequence.c
lib/igt_kms.c +1 -1
index 7bcafc07..61ecb1f2 100644
@@ -1983,7 +1983,7 @@ report_dup:
 	}
 }
 
-static igt_pipe_t *igt_output_get_driving_pipe(igt_output_t *output)
+igt_pipe_t *igt_output_get_driving_pipe(igt_output_t *output)
 {
 	igt_display_t *display = output->display;
 	enum pipe pipe;
lib/igt_kms.h +1 -0
index 3d1061fa..758d22e3 100644
@@ -397,6 +397,7 @@ igt_plane_t *igt_output_get_plane(igt_output_t *output, int plane_idx);
 igt_plane_t *igt_output_get_plane_type(igt_output_t *output, int plane_type);
 igt_output_t *igt_output_from_connector(igt_display_t *display,
     drmModeConnector *connector);
+igt_pipe_t *igt_output_get_driving_pipe(igt_output_t *output);
 igt_plane_t *igt_pipe_get_plane_type(igt_pipe_t *pipe, int plane_type);
 bool igt_pipe_get_property(igt_pipe_t *pipe, const char *name,
 			   uint32_t *prop_id, uint64_t *value,
tests/Makefile.sources +1 -0
index 0adc28a0..19e8ae3f 100644
@@ -215,6 +215,7 @@ TESTS_progs = \
 	kms_tv_load_detect \
 	kms_universal_plane \
 	kms_vblank \
+	kms_sequence \
 	meta_test \
 	perf \
 	pm_backlight \
tests/kms_sequence.c new file +289 -0

289 lines not on this page · raw message

tests/meson.build +1 -0
index 53d02d13..6db92788 100644
@@ -195,6 +195,7 @@ test_progs = [
 	'kms_tv_load_detect',
 	'kms_universal_plane',
 	'kms_vblank',
+	'kms_sequence',
 	'meta_test',
 	'perf',
 	'pm_backlight',
Signature · 6 lines
2.14.1

_______________________________________________
Intel-gfx mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
#1 lore raw

✗ Fi.CI.BAT: failure for tests/kms_sequence: Add tests for new CRTC get/queue sequence ioctls

== Series Details ==

== Series Details ==

Series: tests/kms_sequence: Add tests for new CRTC get/queue sequence ioctls
URL : https://patchwork.freedesktop.org/series/31230/
State : failure

== Summary ==

IGT patchset build failed on latest successful build 09f8cb1a3758fa9868a07b83a3d3db2973d795cc igt/gem_sync: Sync before starting the clock

make all-recursive
Making all in lib
make all-recursive
Making all in .
Making all in tests
make[4]: Nothing to be done for 'all'.
Making all in man
make[2]: Nothing to be done for 'all'.
Making all in tools
Making all in null_state_gen
make[3]: Nothing to be done for 'all'.
Making all in registers
make[3]: Nothing to be done for 'all'.
make[3]: Nothing to be done for 'all-am'.
Making all in scripts
make[2]: Nothing to be done for 'all'.
Making all in benchmarks
make[2]: Nothing to be done for 'all'.
Making all in tests
Making all in intel-ci
make[3]: Nothing to be done for 'all'.

  CCLD     gem_bad_batch
  CCLD     gem_hang
  CCLD     gem_bad_blit
  CCLD     gem_bad_address
  CCLD     gem_non_secure_batch
  CCLD     gem_stress
  CCLD     core_auth
  CCLD     core_get_client_auth
  CCLD     core_getclient
  CCLD     core_getstats
  CCLD     core_getversion
  CCLD     core_prop_blob
  CCLD     core_setmaster_vs_auth
  CCLD     debugfs_test
  CCLD     drm_import_export
  CCLD     drm_mm
  CCLD     drm_read
  CCLD     drm_vma_limiter
  CCLD     drm_vma_limiter_cached
  CCLD     drm_vma_limiter_cpu
  CCLD     drm_vma_limiter_gtt
  CCLD     drv_getparams_basic
  CCLD     drv_hangman
  CCLD     drv_missed_irq
  CCLD     drv_module_reload
  CCLD     drv_selftest
  CCLD     drv_suspend
  CCLD     gem_bad_length
  CCLD     gem_bad_reloc
  CCLD     gem_basic
  CCLD     gem_busy
  CCLD     gem_caching
  CCLD     gem_close
  CCLD     gem_close_race
  CCLD     gem_concurrent_blit
  CCLD     gem_cpu_reloc
  CCLD     gem_create
  CCLD     gem_cs_prefetch
  CCLD     gem_cs_tlb
  CCLD     gem_ctx_bad_destroy
  CCLD     gem_ctx_bad_exec
  CCLD     gem_ctx_basic
  CCLD     gem_ctx_create
  CCLD     gem_ctx_exec
  CCLD     gem_ctx_param
  CCLD     gem_ctx_switch
  CCLD     gem_ctx_thrash
  CCLD     gem_double_irq_loop
  CCLD     gem_eio
  CCLD     gem_evict_alignment
  CCLD     gem_evict_everything
  CCLD     gem_exec_alignment
  CCLD     gem_exec_async
  CCLD     gem_exec_await
  CCLD     gem_exec_bad_domains
  CCLD     gem_exec_basic
  CCLD     gem_exec_big
  CCLD     gem_exec_blt
  CCLD     gem_exec_capture
  CCLD     gem_exec_create
  CCLD     gem_exec_faulting_reloc
  CCLD     gem_exec_fence
  CCLD     gem_exec_flush
  CCLD     gem_exec_gttfill
  CCLD     gem_exec_latency
  CCLD     gem_exec_lut_handle
  CCLD     gem_exec_nop
  CCLD     gem_exec_parallel
  CCLD     gem_exec_params
  CCLD     gem_exec_parse
  CCLD     gem_exec_reloc
  CCLD     gem_exec_reuse
  CCLD     gem_exec_schedule
  CCLD     gem_exec_store
  CCLD     gem_exec_suspend
  CCLD     gem_exec_whisper
  CCLD     gem_fd_exhaustion
  CCLD     gem_fence_thrash
  CCLD     gem_fence_upload
  CCLD     gem_fenced_exec_thrash
  CCLD     gem_flink_basic
  CCLD     gem_flink_race
  CCLD     gem_gpgpu_fill
  CCLD     gem_gtt_cpu_tlb
  CCLD     gem_gtt_hog
  CCLD     gem_gtt_speed
  CCLD     gem_hangcheck_forcewake
  CCLD     gem_largeobject
  CCLD     gem_linear_blits
  CCLD     gem_lut_handle
  CCLD     gem_madvise
  CCLD     gem_media_fill
  CCLD     gem_mmap
  CCLD     gem_mmap_gtt
  CCLD     gem_mmap_offset_exhaustion
  CCLD     gem_mmap_wc
  CCLD     gem_mocs_settings
  CCLD     gem_partial_pwrite_pread
  CCLD     gem_persistent_relocs
  CCLD     gem_pin
  CCLD     gem_pipe_control_store_loop
  CCLD     gem_ppgtt
  CCLD     gem_pread
  CCLD     gem_pread_after_blit
  CCLD     gem_pwrite
  CCLD     gem_pwrite_pread
  CCLD     gem_pwrite_snooped
  CCLD     gem_read_read_speed
  CCLD     gem_readwrite
  CCLD     gem_reg_read
  CCLD     gem_reloc_overflow
  CCLD     gem_reloc_vs_gpu
  CCLD     gem_render_copy
  CCLD     gem_render_copy_redux
  CCLD     gem_render_linear_blits
  CCLD     gem_render_tiled_blits
  CCLD     gem_request_retire
  CCLD     gem_reset_stats
  CCLD     gem_ring_sync_copy
  CCLD     gem_ring_sync_loop
  CCLD     gem_ringfill
  CCLD     gem_seqno_wrap
  CCLD     gem_set_tiling_vs_blt
  CCLD     gem_set_tiling_vs_gtt
  CCLD     gem_set_tiling_vs_pwrite
  CCLD     gem_shrink
  CCLD     gem_softpin
  CCLD     gem_spin_batch
  CCLD     gem_stolen
  CCLD     gem_storedw_batches_loop
  CCLD     gem_storedw_loop
  CCLD     gem_streaming_writes
  CCLD     gem_sync
  CCLD     gem_threaded_access_tiled
  CCLD     gem_tiled_blits
  CCLD     gem_tiled_fence_blits
  CCLD     gem_tiled_partial_pwrite_pread
  CCLD     gem_tiled_pread_basic
  CCLD     gem_tiled_pread_pwrite
  CCLD     gem_tiled_swapping
  CCLD     gem_tiled_wb
  CCLD     gem_tiled_wc
  CCLD     gem_tiling_max_stride
  CCLD     gem_unfence_active_buffers
  CCLD     gem_unref_active_buffers
  CCLD     gem_userptr_blits
  CCLD     gem_wait
  CCLD     gem_workarounds
  CCLD     gem_write_read_ring_switch
  CCLD     gen3_mixed_blits
  CCLD     gen3_render_linear_blits
  CCLD     gen3_render_mixed_blits
  CCLD     gen3_render_tiledx_blits
  CCLD     gen3_render_tiledy_blits
  CCLD     gen7_forcewake_mt
  CCLD     gvt_basic
  CCLD     kms_3d
  CCLD     kms_addfb_basic
  CCLD     kms_atomic
  CCLD     kms_atomic_interruptible
  CCLD     kms_atomic_transition
  CCLD     kms_busy
  CCLD     kms_ccs
  CCLD     kms_chv_cursor_fail
  CCLD     kms_concurrent
  CCLD     kms_crtc_background_color
  CCLD     kms_cursor_crc
  CCLD     kms_cursor_legacy
  CCLD     kms_draw_crc
  CCLD     kms_fbc_crc
  CCLD     kms_fbcon_fbt
  CCLD     kms_fence_pin_leak
  CCLD     kms_flip
  CCLD     kms_flip_event_leak
  CCLD     kms_flip_tiling
  CCLD     kms_force_connector_basic
  CCLD     kms_frontbuffer_tracking
  CCLD     kms_hdmi_inject
  CCLD     kms_invalid_dotclock
  CCLD     kms_legacy_colorkey
  CCLD     kms_mmap_write_crc
  CCLD     kms_mmio_vs_cs_flip
  CCLD     kms_panel_fitting
  CCLD     kms_pipe_b_c_ivb
  CCLD     kms_pipe_color
  CCLD     kms_pipe_crc_basic
  CCLD     kms_plane
  CCLD     kms_plane_lowres
  CCLD     kms_plane_multiple
  CCLD     kms_plane_scaling
  CCLD     kms_properties
  CCLD     kms_psr_sink_crc
  CCLD     kms_pwrite_crc
  CCLD     kms_render
  CCLD     kms_rmfb
  CCLD     kms_rotation_crc
  CCLD     kms_setmode
  CCLD     kms_sink_crc_basic
  CCLD     kms_sysfs_edid_timing
  CCLD     kms_tv_load_detect
  CCLD     kms_universal_plane
  CCLD     kms_vblank
  CC       kms_sequence.o
kms_sequence.c:109:45: warning: ‘struct drm_crtc_get_sequence’ declared inside parameter list will not be visible outside of this definition or declaration
 static int crtc_get_sequence(int fd, struct drm_crtc_get_sequence *cgs)
                                             ^~~~~~~~~~~~~~~~~~~~~
kms_sequence.c: In function ‘crtc_get_sequence’:
kms_sequence.c:114:20: error: ‘DRM_IOCTL_CRTC_GET_SEQUENCE’ undeclared (first use in this function)
  if (igt_ioctl(fd, DRM_IOCTL_CRTC_GET_SEQUENCE, cgs))
                    ^~~~~~~~~~~~~~~~~~~~~~~~~~~

kms_sequence.c:114:20: note: each undeclared identifier is reported only once for each function it appears in
kms_sequence.c: At top level:
kms_sequence.c:120:47: warning: ‘struct drm_crtc_queue_sequence’ declared inside parameter list will not be visible outside of this definition or declaration
static int crtc_queue_sequence(int fd, struct drm_crtc_queue_sequence *cqs)

                                               ^~~~~~~~~~~~~~~~~~~~~~~
kms_sequence.c: In function ‘crtc_queue_sequence’:
kms_sequence.c:125:20: error: ‘DRM_IOCTL_CRTC_QUEUE_SEQUENCE’ undeclared (first use in this function)
  if (igt_ioctl(fd, DRM_IOCTL_CRTC_QUEUE_SEQUENCE, cqs))
                    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
kms_sequence.c: In function ‘run_test’:
kms_sequence.c:150:35: error: storage size of ‘cqs’ isn’t known
    struct drm_crtc_queue_sequence cqs;
                                   ^~~
kms_sequence.c:154:16: error: ‘DRM_CRTC_SEQUENCE_RELATIVE’ undeclared (first use in this function)
    cqs.flags = DRM_CRTC_SEQUENCE_RELATIVE | DRM_CRTC_SEQUENCE_FIRST_PIXEL_OUT;
                ^~~~~~~~~~~~~~~~~~~~~~~~~~
kms_sequence.c:154:45: error: ‘DRM_CRTC_SEQUENCE_FIRST_PIXEL_OUT’ undeclared (first use in this function)
    cqs.flags = DRM_CRTC_SEQUENCE_RELATIVE | DRM_CRTC_SEQUENCE_FIRST_PIXEL_OUT;
                                             ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
kms_sequence.c:150:35: warning: unused variable ‘cqs’ [-Wunused-variable]
    struct drm_crtc_queue_sequence cqs;
                                   ^~~
kms_sequence.c: In function ‘sequence_get’:
kms_sequence.c:186:31: error: storage size of ‘cgs’ isn’t known
  struct drm_crtc_get_sequence cgs;
                               ^~~
kms_sequence.c:186:31: warning: unused variable ‘cgs’ [-Wunused-variable]
kms_sequence.c: In function ‘sequence_queue’:
kms_sequence.c:209:31: error: storage size of ‘cgs_start’ isn’t known
  struct drm_crtc_get_sequence cgs_start, cgs_end;
                               ^~~~~~~~~
kms_sequence.c:209:42: error: storage size of ‘cgs_end’ isn’t known
  struct drm_crtc_get_sequence cgs_start, cgs_end;
                                          ^~~~~~~
kms_sequence.c:210:33: error: storage size of ‘cqs’ isn’t known
  struct drm_crtc_queue_sequence cqs;
                                 ^~~
kms_sequence.c:224:15: error: ‘DRM_CRTC_SEQUENCE_FIRST_PIXEL_OUT’ undeclared (first use in this function)
   cqs.flags = DRM_CRTC_SEQUENCE_FIRST_PIXEL_OUT;
               ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
kms_sequence.c:231:34: error: storage size of ‘ev’ isn’t known
   struct drm_event_crtc_sequence ev;
                                  ^~
kms_sequence.c:231:34: warning: unused variable ‘ev’ [-Wunused-variable]
kms_sequence.c:210:33: warning: unused variable ‘cqs’ [-Wunused-variable]
  struct drm_crtc_queue_sequence cqs;
                                 ^~~
kms_sequence.c:209:42: warning: unused variable ‘cgs_end’ [-Wunused-variable]
  struct drm_crtc_get_sequence cgs_start, cgs_end;
                                          ^~~~~~~
kms_sequence.c:209:31: warning: unused variable ‘cgs_start’ [-Wunused-variable]
  struct drm_crtc_get_sequence cgs_start, cgs_end;
                               ^~~~~~~~~

Makefile:3965: recipe for target 'kms_sequence.o' failed make[3]: *** [kms_sequence.o] Error 1 Makefile:4450: recipe for target 'all-recursive' failed make[2]: *** [all-recursive] Error 1 Makefile:528: recipe for target 'all-recursive' failed make[1]: *** [all-recursive] Error 1 Makefile:460: recipe for target 'all' failed
make: *** [all] Error 2

_______________________________________________
Intel-gfx mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

#2 lore raw
In reply to [email protected]
Quoted 24 lines · On Sat, Sep 30, 2017 at 12:35:33PM -0700, [email protected] wrote:

From: Keith Packard <[email protected]>

These ioctls replace drmWaitVBlank and add ns time resolution and 64-bit sequence numbers to comply with the Vulkan API specifications.

The tests were derived from the existing kms_vblank tests with the 'wait' variant elided as the new API doesn't provide a mechanism for blocking in the kernel.

---
 lib/igt_kms.c          |   2 +-
 lib/igt_kms.h          |   1 +
 tests/Makefile.sources |   1 +
 tests/kms_sequence.c   | 289 +++++++++++++++++++++++++++++++++++++++++++++++++
 tests/meson.build      |   1 +
 5 files changed, 293 insertions(+), 1 deletion(-)
 create mode 100644 tests/kms_sequence.c
lib/igt_kms.c +0 -0
index 7bcafc07..61ecb1f2 100644

lib/igt_kms.c report_dup: · line 1987

Quoted 6 lines
lib/igt_kms.c +1 -1
@@ -1983,7 +1983,7 @@ report_dup:
 	}
 }
 
-static igt_pipe_t *igt_output_get_driving_pipe(igt_output_t *output)
+igt_pipe_t *igt_output_get_driving_pipe(igt_output_t *output)
 {

Some documentation for this function is in order if it's made non-static.

Signature · 5 lines
Petri Latvala
_______________________________________________
Intel-gfx mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
#3 lore raw
Quoted 9 lines · Petri Latvala
Quoted 8 lines · On Sat, Sep 30, 2017 at 12:35:33PM -0700, [email protected] wrote:

From: Keith Packard <[email protected]>

These ioctls replace drmWaitVBlank and add ns time resolution and 64-bit sequence numbers to comply with the Vulkan API specifications.

The tests were derived from the existing kms_vblank tests with the 'wait' variant elided as the new API doesn't provide a mechanism for blocking in the kernel.

Because this is a new set of ioctls, IGT doesn't require a latest libdrm headers, we
usually add local_ version of things so we can continue to keep building.

I've done this locally and it seems to work fine.
https://cgit.freedesktop.org/~airlied/intel-gpu-tools/commit/?h=kms_sequence&id=14300a7377a0a8ce19300b7e7486d17a028d8c41

Feel free to take that and squash it in, though you should also document get igt_output_get_driver_pipe function since you exported it as Petri suggested.

Dave.

Quoted 27 lines
Quoted 16 lines
---
 lib/igt_kms.c          |   2 +-
 lib/igt_kms.h          |   1 +
 tests/Makefile.sources |   1 +
 tests/kms_sequence.c   | 289 +++++++++++++++++++++++++++++++++++++++++++++++++
 tests/meson.build      |   1 +
 5 files changed, 293 insertions(+), 1 deletion(-)
 create mode 100644 tests/kms_sequence.c
lib/igt_kms.c +0 -0
index 7bcafc07..61ecb1f2 100644

lib/igt_kms.c report_dup: · line 1987

Quoted 6 lines
lib/igt_kms.c +1 -1
@@ -1983,7 +1983,7 @@ report_dup:
      }
 }
 
-static igt_pipe_t *igt_output_get_driving_pipe(igt_output_t *output)
+igt_pipe_t *igt_output_get_driving_pipe(igt_output_t *output)
 {

Some documentation for this function is in order if it's made non-static.

Quoted 6 lines

--
Petri Latvala
_______________________________________________
Intel-gfx mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

_______________________________________________
Intel-gfx mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/intel-gfx