.gitignore | 3 NEWS | 79 ++ autogen.sh | 4 benchmarks/.gitignore | 1 benchmarks/Makefile.am | 7 benchmarks/Makefile.sources | 2 benchmarks/ezbench.d/gem_blt.test | 38 benchmarks/ezbench.d/gem_create.test | 11 benchmarks/ezbench.d/gem_exec_ctx.test | 25 benchmarks/ezbench.d/gem_exec_fault.test | 22 benchmarks/ezbench.d/gem_exec_nop.test | 19 benchmarks/ezbench.d/gem_exec_reloc.test | 20 benchmarks/ezbench.d/gem_exec_trace.test | 19 benchmarks/ezbench.d/gem_latency.test | 79 ++ benchmarks/ezbench.d/gem_mmap.test | 14 benchmarks/ezbench.d/gem_prw.test | 20 benchmarks/ezbench.d/gem_syslatency.test | 12 benchmarks/gem_blt.c | 51 - benchmarks/gem_create.c | 62 + benchmarks/gem_exec_ctx.c | 121 ++- benchmarks/gem_exec_fault.c | 199 +++++ benchmarks/gem_exec_nop.c | 93 +- benchmarks/gem_exec_reloc.c | 4 benchmarks/gem_latency.c | 92 +- benchmarks/gem_syslatency.c | 333 ++++++++ configure.ac | 28 debugger/Makefile.am | 2 demos/Makefile.am | 5 lib/Makefile.am | 12 lib/drmtest.c | 71 - lib/drmtest.h | 8 lib/igt_aux.c | 365 ++++++++- lib/igt_aux.h | 46 + lib/igt_core.c | 123 +-- lib/igt_core.h | 67 + lib/igt_debugfs.c | 40 - lib/igt_debugfs.h | 1 lib/igt_fb.c | 208 ++++- lib/igt_fb.h | 16 lib/igt_gt.c | 148 --- lib/igt_gt.h | 42 - lib/igt_kms.c | 544 +++++++++++++- lib/igt_kms.h | 147 +++ lib/igt_stats.h | 34 lib/intel_chipset.c | 2 lib/intel_chipset.h | 14 lib/intel_os.c | 55 - lib/ioctl_wrappers.c | 264 +++--- lib/ioctl_wrappers.h | 18 lib/tests/.gitignore | 2 lib/tests/Makefile.am | 2 lib/tests/Makefile.sources | 2 lib/tests/igt_exit_handler.c | 128 +++ lib/tests/igt_subtest_group.c | 83 ++ man/.gitignore | 1 man/Makefile.am | 62 - man/intel_aubdump.man | 38 man/intel_aubdump.rst | 55 + man/intel_audio_dump.man | 11 man/intel_audio_dump.rst | 30 man/intel_bios_dumper.man | 14 man/intel_bios_dumper.rst | 36 man/intel_bios_reader.man | 15 man/intel_bios_reader.rst | 69 + man/intel_error_decode.man | 20 man/intel_error_decode.rst | 38 man/intel_gpu_frequency.man | 58 - man/intel_gpu_frequency.rst | 79 ++ man/intel_gpu_top.man | 41 - man/intel_gpu_top.rst | 64 + man/intel_gtt.man | 14 man/intel_gtt.rst | 32 man/intel_infoframes.man | 26 man/intel_infoframes.rst | 51 + man/intel_lid.man | 12 man/intel_lid.rst | 31 man/intel_panel_fitter.man | 50 - man/intel_panel_fitter.rst | 77 ++ man/intel_reg.rst | 106 +- man/intel_stepping.man | 15 man/intel_stepping.rst | 37 man/intel_upload_blit_large.man | 18 man/intel_upload_blit_large.rst | 34 man/intel_upload_blit_large_gtt.man | 18 man/intel_upload_blit_large_gtt.rst | 34 man/intel_upload_blit_large_map.man | 18 man/intel_upload_blit_large_map.rst | 34 man/intel_upload_blit_small.man | 18 man/intel_upload_blit_small.rst | 34 overlay/Makefile.am | 3 scripts/Makefile.am | 3 scripts/intel-gfx-trybot | 13 scripts/run-tests.sh | 2 tests/Android.mk | 5 tests/Makefile.am | 20 tests/Makefile.sources | 37 tests/core_getversion.c | 10 tests/drm_read.c | 62 - tests/drv_hangman.c | 14 tests/drv_missed_irq_hang | 29 tests/drv_module_reload_basic | 115 +-- tests/gem_bad_reloc.c | 158 +--- tests/gem_busy.c | 207 +++++ tests/gem_close_race.c | 178 +--- tests/gem_concurrent_all.c | 960 +++++++++++++++---------- tests/gem_cs_prefetch.c | 2 tests/gem_ctx_create.c | 166 +++- tests/gem_ctx_param.c | 167 ++++ tests/gem_ctx_param_basic.c | 167 ---- tests/gem_ctx_switch.c | 176 ++++ tests/gem_dummy_reloc_loop.c | 312 -------- tests/gem_evict_alignment.c | 13 tests/gem_evict_everything.c | 14 tests/gem_exec_basic.c | 65 + tests/gem_exec_blt.c | 18 tests/gem_exec_create.c | 168 ++++ tests/gem_exec_flush.c | 598 +++++++++++++++ tests/gem_exec_gttfill.c | 218 +++++ tests/gem_exec_lut_handle.c | 6 tests/gem_exec_nop.c | 171 +++- tests/gem_exec_parallel.c | 291 +++++++ tests/gem_exec_parse.c | 120 +++ tests/gem_exec_reloc.c | 116 +++ tests/gem_exec_store.c | 228 +++++ tests/gem_exec_suspend.c | 268 +++++++ tests/gem_exec_whisper.c | 400 ++++++++++ tests/gem_mocs_settings.c | 612 ++++++++++++++++ tests/gem_multi_bsd_sync_loop.c | 162 ---- tests/gem_ppgtt.c | 41 - tests/gem_pwrite.c | 147 +++ tests/gem_reloc_overflow.c | 353 +++++---- tests/gem_render_tiled_blits.c | 4 tests/gem_reset_stats.c | 2 tests/gem_ring_sync_loop.c | 12 tests/gem_ringfill.c | 92 +- tests/gem_shrink.c | 325 ++++++++ tests/gem_softpin.c | 64 + tests/gem_sync.c | 101 +- tests/kms_addfb_basic.c | 208 +++-- tests/kms_atomic.c | 6 tests/kms_cursor_legacy.c | 176 ++++ tests/kms_draw_crc.c | 21 tests/kms_fbcon_fbt.c | 12 tests/kms_flip.c | 130 +-- tests/kms_flip_event_leak.c | 8 tests/kms_frontbuffer_tracking.c | 167 +++- tests/kms_mmap_write_crc.c | 19 tests/kms_panel_fitting.c | 38 tests/kms_pipe_color.c | 1184 +++++++++++++++++++++++++++++++ tests/kms_pipe_crc_basic.c | 56 - tests/kms_plane.c | 18 tests/kms_render.c | 21 tests/kms_rotation_crc.c | 12 tests/kms_setmode.c | 46 + tests/kms_sink_crc_basic.c | 36 tests/kms_vblank.c | 2 tests/pm_backlight.c | 51 - tests/pm_lpsp.c | 35 tests/pm_rpm.c | 87 -- tests/pm_rps.c | 20 tests/prime_mmap_coherency.c | 107 ++ tests/prime_mmap_kms.c | 275 +++++++ tests/testdisplay.c | 20 tools/Makefile.am | 6 tools/intel_audio_dump.c | 3 tools/intel_bios_reader.c | 404 +++++++--- tools/intel_reg.c | 2 tools/intel_reg_decode.c | 18 tools/intel_residency.c | 15 tools/intel_watermark.c | 46 - tools/registers/cherryview | 1 tools/registers/chv_pipe_b_extra.txt | 240 ++++++ 172 files changed, 12430 insertions(+), 3572 deletions(-)
New commits: commit 3ce58b6f9502329d03207a786301d077e7f0cf6c Author: Marius Vlad <marius.c.v...@intel.com> Date: Tue May 31 18:33:24 2016 +0300 Updated NEWS, and bumped to 1.15. Signed-off-by: Marius Vlad <marius.c.v...@intel.com> diff --git a/NEWS b/NEWS index 62985cb..fba7ac4 100644 --- a/NEWS +++ b/NEWS @@ -1,33 +1,81 @@ -Release 1.15 (XXXX-XX-XX) +Release 1.15 (2016-05-31) ------------------------- -- prime_mmap_kms: show case dma-buf new API and processes restrictions -(Tiago Vignatti) +- New KMS test: tests/kms_cursor_legacy (Stress legacy cursor ioctl) +(Chris Wilson) + +- Several GEM tests have been removed from BAT: tests/gem_exec_whisper, +tests/gem_sync (dropped individual engines), test/gem_cs_prefetch (replaced +by test/gem_exec_gttfill), tests/gem_ctx_param_basic (got relabeled +to tests/gem_ctx_param) (Chris Wilson) + +- build: Skip configure step if is NOCONFIGURE set (Tomeu Vizoso) + +- tools/intel_bios_reader: Added options for dumping individual panels, specific +section, hex format and other various fixes (Jani Nikula) + +- build: Add optional --enable-werror +(hard-fail in case of compiler warnings) (Marius Vlad) + +- New KMS test: tests/prime_mmap_kms (show case dma-buf new API +and processes restrictions) (Tiago Vignatti) + +- Several tests have gained to ability to be run on different platforms +than Intel: tests/testdisplay (Tomeu Vizoso), tests/kms_panel_fitting +(Robert Foss), tests/kms_flip_event_leak, tests/kms_flip (Tomeu Vizoso). - compute exitcode first: In the case of running multiple subtests which all happen to be skipped, igt_exitcode is 0, but the final exit code will be 77. (Chris Wilson) -- Shorten basic tests (Tvrtko Ursulin) +- Shorten tests/kms_flip test (Tvrtko Ursulin) - Half the timeout for suspend to RAM and a third for suspend to disk (Marius Vlad) - lib: Pass format instead of bpp to create_bo_for_fb (Ville Syrjälä) -- Removed from tests/test-list.txt, tests/gem_concurrent_all/blt and added +- Removed from tests/test-list.txt, tests/gem_concurrent_all and added tests/test-list-full.txt that contains all the tests. This will speed up considerably piglit when starting tests. (Gabriel Feceoru) - piglit changed its behaviour to prevent overwriting the results. A fairly new version of piglit is required to run i-g-t tests. (Gabriel Feceoru) -- Added COMMIT_ATOMIC (lib/igt_kms, w/ test kms_rotation_crc). +- lib: Replace drmIoctl() with a layer of indirection (Chris Wilson) + +- Adding missing Broxton PCI IDs (Rodrigo Vivi) + +- Added COMMIT_ATOMIC (lib/igt_kms, w/ tests/kms_rotation_crc). Requires nuclear_pageflip parameter turned on in the i915 driver. (Mayuresh Gharpure, Pratik Vishwakarma) +- man/: rewrite manual pages in reStructuredText (Jani Nikula) + +- tests/drv_module_reload_basic: perform fault injection (Chris Wilson) +with various improvements (Imre Deak) + +- Removed tests/gem_multi_bsd_sync_loop which was superseded by +tests/gem_ring_sync_loop and tests/gem_dummy_reloc_loop by +tests/gem_exec_reloc (Chris Wilson) + +- New GEM tests: tests/gem_exec_whisper, tests/gem_exec_store, +test/gem_exec_gttfill, tests/gem_exec_suspend, tests/gem_exec_flush +(Chris Wilson) + +- New benchmarks: benchmarks/gem_syslatency, benchmarks/gem_exec_fault +(Chris Wilson) + +- tests/gem_exec_nop included in BAT (Chris Wilson) + +- tests/pm_rpm: Fix crash on machines that lack LLC (David Weinehall) + +- lib/igt_fb: Fix domain tracking for GTT cairo surfaces (Chris Wilson) + - Add igt_subtest_group to allow igt_fixture for only a subset of subtests - without skipping/failing all subsequent subtests. (Daniel Vetter) +without skipping/failing all subsequent subtests. (Daniel Vetter) + +- Many more fixes and improvements. Release 1.14 (2016-03-01) ------------------------- diff --git a/configure.ac b/configure.ac index 11b1d46..0405c8b 100644 --- a/configure.ac +++ b/configure.ac @@ -22,7 +22,7 @@ AC_PREREQ([2.60]) AC_INIT([intel-gpu-tools], - [1.14], + [1.15], [https://bugs.freedesktop.org/enter_bug.cgi?product=DRI&component=DRM/Intel], [intel-gpu-tools]) @@ -322,7 +322,7 @@ echo " Overlay : X: ${enable_overlay_xlib}, Xv: ${enable_overla echo " x86-specific tools : ${build_x86}" echo "" echo " • API-Documentation : ${enable_gtk_doc}" -echo " • Fail on warnings: : ${enable_werror}" +echo " • Fail on warnings : ${enable_werror}" echo "" # vim: set ft=config ts=8 sw=8 tw=0 noet : commit 7be235c1247a8cf51f55938ef05cb41708924b8f Author: Tomeu Vizoso <tomeu.viz...@collabora.com> Date: Fri Apr 22 11:08:45 2016 +0200 lib: Actually use provided size when creating BO When reworking igt_create_fb_with_bo_size to use igt_create_bo_with_dimensions, we mistakenly stopped acknowledging non-zero size parameters. To fix this, we move the core of the code to create_bo_for_fb and teach it to use the GEM APIs when a size is passed. igt_create_bo_with_dimensions ends up calling just create_bo_for_fb with a zero size because now the later is more generic than the former. Also, create_bo_for_fb now returns the handle of the BO that was created, as there's no point anymore in having it be a parameter passed by reference. Signed-off-by: Tomeu Vizoso <tomeu.viz...@collabora.com> diff --git a/lib/igt_fb.c b/lib/igt_fb.c index 3e53d3b..61205f3 100644 --- a/lib/igt_fb.c +++ b/lib/igt_fb.c @@ -180,39 +180,24 @@ void igt_calc_fb_size(int fd, int width, int height, int bpp, uint64_t tiling, *size_ret = size; } -/** - * igt_create_bo_with_dimensions: - * @fd: open drm file descriptor - * @width: width of the buffer object in pixels - * @height: height of the buffer object in pixels - * @format: drm fourcc pixel format code - * @modifier: modifier corresponding to the tiling layout of the buffer object - * @stride: stride of the buffer object in bytes (0 for automatic stride) - * @size_ret: size of the buffer object as created by the kernel - * @stride_ret: stride of the buffer object as created by the kernel - * @is_dumb: whether the created buffer object is a dumb buffer or not - * - * This function allocates a gem buffer object matching the requested - * properties. - * - * Returns: - * The kms id of the created buffer object. - */ -int igt_create_bo_with_dimensions(int fd, int width, int height, - uint32_t format, uint64_t modifier, - unsigned stride, unsigned *size_ret, - unsigned *stride_ret, bool *is_dumb) +/* helpers to create nice-looking framebuffers */ +static int create_bo_for_fb(int fd, int width, int height, uint32_t format, + uint64_t tiling, unsigned size, unsigned stride, + unsigned *size_ret, unsigned *stride_ret, + bool *is_dumb) { int bpp = igt_drm_format_to_bpp(format); int bo; - if (modifier || stride) { - unsigned size, calculated_stride; + if (tiling || size || stride) { + unsigned calculated_size, calculated_stride; - igt_calc_fb_size(fd, width, height, bpp, modifier, &size, - &calculated_stride); + igt_calc_fb_size(fd, width, height, bpp, tiling, + &calculated_size, &calculated_stride); if (stride == 0) stride = calculated_stride; + if (size == 0) + size = calculated_size; if (is_dumb) *is_dumb = false; @@ -220,7 +205,7 @@ int igt_create_bo_with_dimensions(int fd, int width, int height, if (is_i915_device(fd)) { bo = gem_create(fd, size); - gem_set_tiling(fd, bo, modifier, stride); + gem_set_tiling(fd, bo, tiling, stride); if (size_ret) *size_ret = size; @@ -230,9 +215,9 @@ int igt_create_bo_with_dimensions(int fd, int width, int height, return bo; } else { - bool driver_has_tiling_support = false; + bool driver_has_gem_api = false; - igt_require(driver_has_tiling_support); + igt_require(driver_has_gem_api); return -EINVAL; } } else { @@ -244,23 +229,31 @@ int igt_create_bo_with_dimensions(int fd, int width, int height, } } -/* helpers to create nice-looking framebuffers */ -static int create_bo_for_fb(int fd, int width, int height, uint32_t format, - uint64_t tiling, unsigned bo_size, - unsigned bo_stride, uint32_t *gem_handle_ret, - unsigned *size_ret, unsigned *stride_ret, - bool *is_dumb) +/** + * igt_create_bo_with_dimensions: + * @fd: open drm file descriptor + * @width: width of the buffer object in pixels + * @height: height of the buffer object in pixels + * @format: drm fourcc pixel format code + * @modifier: modifier corresponding to the tiling layout of the buffer object + * @stride: stride of the buffer object in bytes (0 for automatic stride) + * @size_ret: size of the buffer object as created by the kernel + * @stride_ret: stride of the buffer object as created by the kernel + * @is_dumb: whether the created buffer object is a dumb buffer or not + * + * This function allocates a gem buffer object matching the requested + * properties. + * + * Returns: + * The kms id of the created buffer object. + */ +int igt_create_bo_with_dimensions(int fd, int width, int height, + uint32_t format, uint64_t modifier, + unsigned stride, unsigned *size_ret, + unsigned *stride_ret, bool *is_dumb) { - uint32_t gem_handle; - int ret = 0; - - gem_handle = igt_create_bo_with_dimensions(fd, width, height, format, - tiling, bo_stride, size_ret, - stride_ret, is_dumb); - - *gem_handle_ret = gem_handle; - - return ret; + return create_bo_for_fb(fd, width, height, format, modifier, 0, stride, + size_ret, stride_ret, is_dumb); } /** @@ -600,9 +593,10 @@ igt_create_fb_with_bo_size(int fd, int width, int height, igt_debug("%s(width=%d, height=%d, format=0x%x, tiling=0x%"PRIx64", size=%d)\n", __func__, width, height, format, tiling, bo_size); - do_or_die(create_bo_for_fb(fd, width, height, format, tiling, bo_size, - bo_stride, &fb->gem_handle, &fb->size, - &fb->stride, &fb->is_dumb)); + fb->gem_handle = create_bo_for_fb(fd, width, height, format, tiling, + bo_size, bo_stride, &fb->size, + &fb->stride, &fb->is_dumb); + igt_assert(fb->gem_handle > 0); igt_debug("%s(handle=%d, pitch=%d)\n", __func__, fb->gem_handle, fb->stride); @@ -1006,7 +1000,6 @@ static void create_cairo_surface__blit(int fd, struct igt_fb *fb) struct fb_blit_upload *blit; cairo_format_t cairo_format; unsigned int obj_tiling = fb_mod_to_obj_tiling(fb->tiling); - int ret; blit = malloc(sizeof(*blit)); igt_assert(blit); @@ -1016,14 +1009,14 @@ static void create_cairo_surface__blit(int fd, struct igt_fb *fb) * cairo). This linear bo will be then blitted to its final * destination, tiling it at the same time. */ - ret = create_bo_for_fb(fd, fb->width, fb->height, fb->drm_format, - LOCAL_DRM_FORMAT_MOD_NONE, 0, 0, - &blit->linear.handle, - &blit->linear.size, - &blit->linear.stride, - &blit->linear.is_dumb); - - igt_assert(ret == 0); + blit->linear.handle = create_bo_for_fb(fd, fb->width, fb->height, + fb->drm_format, + LOCAL_DRM_FORMAT_MOD_NONE, 0, + 0, &blit->linear.size, + &blit->linear.stride, + &blit->linear.is_dumb); + + igt_assert(blit->linear.handle > 0); blit->fd = fd; blit->fb = fb; commit 303b380d728bc870c399ba46525854d323f894e7 Author: Matt Roper <matthew.d.ro...@intel.com> Date: Thu May 26 16:02:05 2016 -0700 igt_core: Search "." as final fallback for igt_fopen_data() Some validation teams seem to run tests out of source directories that have been nfs mounted or rsync'd to different locations on the target machine. This causes the igt_srcdir that the tests were built with to be invalid on the machine the tests get run on. Add the current directory as a final fallback for data file searches. Reference: https://bugs.freedesktop.org/show_bug.cgi?id=92248 Cc: Humberto Israel Perez Rodriguez <humberto.i.perez.rodrig...@intel.com> Signed-off-by: Matt Roper <matthew.d.ro...@intel.com> Signed-off-by: Marius Vlad <marius.c.v...@intel.com> diff --git a/lib/igt_core.c b/lib/igt_core.c index 56061c3..92a875c 100644 --- a/lib/igt_core.c +++ b/lib/igt_core.c @@ -1882,6 +1882,10 @@ FILE *__igt_fopen_data(const char* igt_srcdir, const char* igt_datadir, snprintf(path, sizeof(path), "%s/%s", igt_srcdir, filename); fp = fopen(path, "r"); } + if (!fp) { + snprintf(path, sizeof(path), "./%s", filename); + fp = fopen(path, "r"); + } if (!fp) igt_critical("Could not open data file \"%s\": %s", filename, diff --git a/lib/igt_core.h b/lib/igt_core.h index 1b62371..5995233 100644 --- a/lib/igt_core.h +++ b/lib/igt_core.h @@ -842,8 +842,8 @@ FILE *__igt_fopen_data(const char* igt_srcdir, const char* igt_datadir, * igt_fopen_data: * @filename: filename to open. * - * Open a datafile for test, first try from installation directory - * then from build directory. + * Open a datafile for test, first try from installation directory, + * then from build directory, and finally from current directory. */ #define igt_fopen_data(filename) \ __igt_fopen_data(IGT_SRCDIR, IGT_DATADIR, filename) commit 04b8f0e025d92b7b8f08a14c22ebe0686b9ba5ea Author: Chris Wilson <ch...@chris-wilson.co.uk> Date: Wed May 25 14:53:34 2016 +0100 igt/kms_cursor_legacy: Fixup !fixture igt_fixture and its byzantine requirements Signed-off-by: Chris Wilson <ch...@chris-wilson.co.uk> diff --git a/tests/kms_cursor_legacy.c b/tests/kms_cursor_legacy.c index 14281d1..7fa0032 100644 --- a/tests/kms_cursor_legacy.c +++ b/tests/kms_cursor_legacy.c @@ -132,11 +132,13 @@ igt_main igt_subtest_group { for (int n = 0; n < 26; n++) { - uint32_t *crtcs = &data.resources->crtcs[n]; + uint32_t *crtcs = NULL; errno = 0; - igt_fixture + igt_fixture { igt_skip_on(n >= data.resources->count_crtcs); + crtcs = &data.resources->crtcs[n]; + } igt_subtest_f("single-%c-bo", 'A' + n) stress(&data, crtcs, 1, 1, DRM_MODE_CURSOR_BO, 20); commit cce2ff084eeb0e2f95d56b2b1d8b74515c589a9e Author: Chris Wilson <ch...@chris-wilson.co.uk> Date: Wed May 25 08:34:25 2016 +0100 igt/kms_cursor_legacy: Stress each CRTC individually as well Just to compare handling of plane->mutexes Signed-off-by: Chris Wilson <ch...@chris-wilson.co.uk> diff --git a/tests/kms_cursor_legacy.c b/tests/kms_cursor_legacy.c index de63dac..14281d1 100644 --- a/tests/kms_cursor_legacy.c +++ b/tests/kms_cursor_legacy.c @@ -32,6 +32,7 @@ IGT_TEST_DESCRIPTION("Stress legacy cursor ioctl"); struct data { int fd; + drmModeRes *resources; }; static uint32_t state = 0x12345678; @@ -45,9 +46,10 @@ hars_petruska_f54_1_random (void) } static void stress(struct data *data, - int num_children, unsigned mode, int timeout) + uint32_t *crtc_id, unsigned num_crtcs, + int num_children, unsigned mode, + int timeout) { - drmModeRes *r; struct drm_mode_cursor arg; uint64_t *results; int n; @@ -55,9 +57,6 @@ static void stress(struct data *data, results = mmap(NULL, 4096, PROT_WRITE, MAP_SHARED | MAP_ANON, -1, 0); igt_assert(results != MAP_FAILED); - r = drmModeGetResources(data->fd); - igt_assert(r); - memset(&arg, 0, sizeof(arg)); arg.flags = DRM_MODE_CURSOR_BO; arg.crtc_id = 0; @@ -65,8 +64,10 @@ static void stress(struct data *data, arg.height = 64; arg.handle = gem_create(data->fd, 4*64*64); - for (n = 0; n < r->count_crtcs; n++) + for (n = 0; n < num_crtcs; n++) { + arg.crtc_id = crtc_id[n]; drmIoctl(data->fd, DRM_IOCTL_MODE_CURSOR, &arg); + } arg.flags = mode; igt_fork(child, num_children) { @@ -82,7 +83,7 @@ static void stress(struct data *data, state ^= child; igt_until_timeout(timeout) { - arg.crtc_id = r->crtcs[hars_petruska_f54_1_random() % r->count_crtcs]; + arg.crtc_id = crtc_id[hars_petruska_f54_1_random() % num_crtcs]; do_ioctl(data->fd, DRM_IOCTL_MODE_CURSOR, &arg); count++; } @@ -111,7 +112,6 @@ static void stress(struct data *data, } gem_close(data->fd, arg.handle); - drmModeFreeResources(r); munmap(results, 4096); } @@ -125,18 +125,50 @@ igt_main igt_fixture { data.fd = drm_open_driver_master(DRIVER_INTEL); kmstest_set_vt_graphics_mode(); + + data.resources = drmModeGetResources(data.fd); + igt_assert(data.resources); } - igt_subtest("single-bo") - stress(&data, 1, DRM_MODE_CURSOR_BO, 20); - igt_subtest("single-move") - stress(&data, 1, DRM_MODE_CURSOR_MOVE, 20); + igt_subtest_group { + for (int n = 0; n < 26; n++) { + uint32_t *crtcs = &data.resources->crtcs[n]; + + errno = 0; + igt_fixture + igt_skip_on(n >= data.resources->count_crtcs); + + igt_subtest_f("single-%c-bo", 'A' + n) + stress(&data, crtcs, 1, 1, DRM_MODE_CURSOR_BO, 20); + igt_subtest_f("single-%c-move", 'A' + n) + stress(&data, crtcs, 1, 1, DRM_MODE_CURSOR_MOVE, 20); + + igt_subtest_f("forked-%c-bo", 'A' + n) + stress(&data, crtcs, 1, ncpus, DRM_MODE_CURSOR_BO, 20); + igt_subtest_f("forked-%c-move", 'A' + n) + stress(&data, crtcs, 1, ncpus, DRM_MODE_CURSOR_MOVE, 20); + } + } - igt_subtest("forked-bo") - stress(&data, ncpus, DRM_MODE_CURSOR_BO, 20); - igt_subtest("forked-move") - stress(&data, ncpus, DRM_MODE_CURSOR_MOVE, 20); + igt_subtest("single-all-bo") + stress(&data, + data.resources->crtcs, data.resources->count_crtcs, + 1, DRM_MODE_CURSOR_BO, 20); + igt_subtest("single-all-move") + stress(&data, + data.resources->crtcs, data.resources->count_crtcs, + 1, DRM_MODE_CURSOR_MOVE, 20); + + igt_subtest("forked-all-bo") + stress(&data, + data.resources->crtcs, data.resources->count_crtcs, + ncpus, DRM_MODE_CURSOR_BO, 20); + igt_subtest("forked-all-move") + stress(&data, + data.resources->crtcs, data.resources->count_crtcs, + ncpus, DRM_MODE_CURSOR_MOVE, 20); igt_fixture { + drmModeFreeResources(data.resources); } } commit c74e07121085bb9d1957e8e8795a2464e43bd592 Author: Chris Wilson <ch...@chris-wilson.co.uk> Date: Tue May 24 16:24:15 2016 +0100 igt/kms_cursor_legacy: Show basic stats of iterations per child Signed-off-by: Chris Wilson <ch...@chris-wilson.co.uk> diff --git a/tests/kms_cursor_legacy.c b/tests/kms_cursor_legacy.c index aff3ff5..de63dac 100644 --- a/tests/kms_cursor_legacy.c +++ b/tests/kms_cursor_legacy.c @@ -26,6 +26,7 @@ #include <sched.h> #include "igt.h" +#include "igt_stats.h" IGT_TEST_DESCRIPTION("Stress legacy cursor ioctl"); @@ -48,8 +49,12 @@ static void stress(struct data *data, { drmModeRes *r; struct drm_mode_cursor arg; + uint64_t *results; int n; + results = mmap(NULL, 4096, PROT_WRITE, MAP_SHARED | MAP_ANON, -1, 0); + igt_assert(results != MAP_FAILED); + r = drmModeGetResources(data->fd); igt_assert(r); @@ -82,12 +87,32 @@ static void stress(struct data *data, count++; } - igt_info("[%d] count=%lu\n", child, count); + igt_debug("[%d] count=%lu\n", child, count); + results[child] = count; } igt_waitchildren(); + if (num_children > 1) { + igt_stats_t stats; + + igt_stats_init_with_size(&stats, num_children); + results[num_children] = 0; + for (int child = 0; child < num_children; child++) { + igt_stats_push(&stats, results[child]); + results[num_children] += results[child]; + } + igt_info("Total updates %llu (median of %d processes is %.2f)\n", + (long long)results[num_children], + num_children, + igt_stats_get_median(&stats)); + igt_stats_fini(&stats); + } else { + igt_info("Total updates %llu\n", (long long)results[0]); + } + gem_close(data->fd, arg.handle); drmModeFreeResources(r); + munmap(results, 4096); } igt_main commit dab6b6b62dce6baf041ea5387af197626737c8a2 Author: Chris Wilson <ch...@chris-wilson.co.uk> Date: Tue May 24 16:14:32 2016 +0100 igt/kms_cursor_legacy: Add uncontended cursor updates Looking at the uncontended cases reveals a major contention cliff. Signed-off-by: Chris Wilson <ch...@chris-wilson.co.uk> diff --git a/tests/kms_cursor_legacy.c b/tests/kms_cursor_legacy.c index 84c74e3..aff3ff5 100644 --- a/tests/kms_cursor_legacy.c +++ b/tests/kms_cursor_legacy.c @@ -43,7 +43,8 @@ hars_petruska_f54_1_random (void) #undef rol } -static void stress(struct data *data, unsigned mode, int timeout) +static void stress(struct data *data, + int num_children, unsigned mode, int timeout) { drmModeRes *r; struct drm_mode_cursor arg; @@ -63,7 +64,7 @@ static void stress(struct data *data, unsigned mode, int timeout) drmIoctl(data->fd, DRM_IOCTL_MODE_CURSOR, &arg); arg.flags = mode; - igt_fork(child, sysconf(_SC_NPROCESSORS_ONLN)) { + igt_fork(child, num_children) { struct sched_param rt = {.sched_priority = 99 }; cpu_set_t allowed; unsigned long count = 0; @@ -91,6 +92,7 @@ static void stress(struct data *data, unsigned mode, int timeout) igt_main { + const int ncpus = sysconf(_SC_NPROCESSORS_ONLN); struct data data = { .fd = -1 }; igt_skip_on_simulation(); @@ -100,10 +102,15 @@ igt_main kmstest_set_vt_graphics_mode(); } - igt_subtest("stress-bo") - stress(&data, DRM_MODE_CURSOR_BO, 20); - igt_subtest("stress-move") - stress(&data, DRM_MODE_CURSOR_MOVE, 20); + igt_subtest("single-bo") + stress(&data, 1, DRM_MODE_CURSOR_BO, 20); + igt_subtest("single-move") + stress(&data, 1, DRM_MODE_CURSOR_MOVE, 20); + + igt_subtest("forked-bo") + stress(&data, ncpus, DRM_MODE_CURSOR_BO, 20); + igt_subtest("forked-move") + stress(&data, ncpus, DRM_MODE_CURSOR_MOVE, 20); igt_fixture { } commit 2da624e28ce7485a1c67e7650355b5273d88d690 Author: Derek Morton <derek.j.mor...@intel.com> Date: Tue May 24 15:32:35 2016 +0100 tests/Android.mk: Update cairo dependant test list drm_read gem_exec_blt prime_mmap_kms Have cairo dependency through igt_kms.c so add to skip_tests_list to fix android build errors. Signed-off-by: Derek Morton <derek.j.mor...@intel.com> Reviewed-by: Tim Gore <tim.g...@intel.com> Signed-off-by: Marius Vlad <marius.c.v...@intel.com> diff --git a/tests/Android.mk b/tests/Android.mk index 8457125..3186a2a 100644 --- a/tests/Android.mk +++ b/tests/Android.mk @@ -56,7 +56,10 @@ else # the following tests depend on cairo, so skip them skip_tests_list += \ gem_render_copy \ - pm_lpsp + pm_lpsp \ + drm_read \ + gem_exec_blt \ + prime_mmap_kms # All kms tests depend on cairo tmp_list := $(foreach test_name, $(TESTS_progs),\ commit 9c67adfe88786cb0a1f4fcc4ff11cdaeeaa617cb Author: Feceoru, Gabriel <gabriel.fece...@intel.com> Date: Tue May 17 15:05:47 2016 +0300 tests: Moved gem_concurrent_blit back to the normal set Repairing the damage I caused not reading properly Daniel's comment in: https://patchwork.freedesktop.org/patch/81600/ Leaving gem_concurrent_all only in the EXTRA set Cc: Daniel Vetter <daniel.vet...@intel.com> Cc: Marius Vlad <marius.c.v...@intel.com> Acked-By: Daniel Vetter <daniel.vet...@intel.com> Signed-off-by: Gabriel Feceoru <gabriel.fece...@intel.com> Signed-off-by: Marius Vlad <marius.c.v...@intel.com> diff --git a/tests/Makefile.sources b/tests/Makefile.sources index 96740f0..c81eeeb 100644 --- a/tests/Makefile.sources +++ b/tests/Makefile.sources @@ -20,6 +20,7 @@ TESTS_progs_M = \ gem_busy \ gem_caching \ gem_close_race \ + gem_concurrent_blit \ gem_create \ gem_cs_tlb \ gem_ctx_bad_exec \ @@ -121,7 +122,6 @@ TESTS_progs_M = \ $(NULL) TESTS_progs_XM = \ - gem_concurrent_blit \ gem_concurrent_all \ $(NULL) commit e4e18ddc59155ba30b2df30cc9dfd18767b03cec Author: Robert Foss <robert.f...@collabora.com> Date: Fri May 20 18:59:30 2016 -0400 tests/gem_render_tiled_blits: Switched to new aliases of intel specific functions. Switched from drm_XXX aliases drm_intel_XXX aliases for symbols where that switch is possible. Signed-off-by: Robert Foss <robert.f...@collabora.com> Reviewed-by: Emil Velikov <emil.veli...@collabora.com> Signed-off-by: Daniel Vetter <daniel.vet...@ffwll.ch> diff --git a/tests/gem_render_tiled_blits.c b/tests/gem_render_tiled_blits.c index fb2f39d..9f0e588 100644 --- a/tests/gem_render_tiled_blits.c +++ b/tests/gem_render_tiled_blits.c @@ -72,7 +72,7 @@ check_bo(struct intel_batchbuffer *batch, struct igt_buf *buf, uint32_t val) render_copy(batch, NULL, buf, 0, 0, WIDTH, HEIGHT, &tmp, 0, 0); if (snoop) { - do_or_die(dri_bo_map(linear, 0)); + do_or_die(drm_intel_bo_map(linear, 0)); ptr = linear->virtual; } else { do_or_die(drm_intel_bo_get_subdata(linear, 0, sizeof(data), data)); @@ -86,7 +86,7 @@ check_bo(struct intel_batchbuffer *batch, struct igt_buf *buf, uint32_t val) val++; } if (ptr != data) - dri_bo_unmap(linear); + drm_intel_bo_unmap(linear); } static void run_test (int fd, int count) commit 29f080d5fb942badc8f02d459bc9174a23e9ee7c Author: Robert Foss <robert.f...@collabora.com> Date: Fri May 20 18:59:29 2016 -0400 tests/gem_ppgtt: Switched to new aliases of intel specific functions. Switched from drm_XXX aliases drm_intel_XXX aliases for symbols where that switch is possible. Signed-off-by: Robert Foss <robert.f...@collabora.com> Reviewed-by: Emil Velikov <emil.veli...@collabora.com> Signed-off-by: Daniel Vetter <daniel.vet...@ffwll.ch> diff --git a/tests/gem_ppgtt.c b/tests/gem_ppgtt.c index 1a620ad..eb15ca5 100644 --- a/tests/gem_ppgtt.c +++ b/tests/gem_ppgtt.c @@ -74,11 +74,11 @@ static void scratch_buf_init(struct igt_buf *buf, static void scratch_buf_fini(struct igt_buf *buf) { - dri_bo_unreference(buf->bo); + drm_intel_bo_unreference(buf->bo); memset(buf, 0, sizeof(*buf)); } -static void fork_rcs_copy(int target, dri_bo **dst, int count, unsigned flags) +static void fork_rcs_copy(int target, drm_intel_bo **dst, int count, unsigned flags) #define CREATE_CONTEXT 0x1 { igt_render_copyfunc_t render_copy; @@ -143,7 +143,7 @@ static void fork_rcs_copy(int target, dri_bo **dst, int count, unsigned flags) } } -static void fork_bcs_copy(int target, dri_bo **dst, int count) +static void fork_bcs_copy(int target, drm_intel_bo **dst, int count) { int devid; @@ -167,7 +167,7 @@ static void fork_bcs_copy(int target, dri_bo **dst, int count) igt_assert(batch); for (int i = 0; i <= target; i++) { - dri_bo *src[2]; + drm_intel_bo *src[2]; src[0] = create_bo(dst[child]->bufmgr, ~0); @@ -177,13 +177,13 @@ static void fork_bcs_copy(int target, dri_bo **dst, int count) intel_copy_bo(batch, src[0], src[1], SIZE); intel_copy_bo(batch, dst[child], src[0], SIZE); - dri_bo_unreference(src[1]); - dri_bo_unreference(src[0]); + drm_intel_bo_unreference(src[1]); + drm_intel_bo_unreference(src[0]); } }