1075 Commits

Author SHA1 Message Date
Chris Wilson
d545610861 lib/igt_aux: Divert ioctls for signal injection
To simplify and speed up running interruptible tests, use a custom
ioctl() function that control the signaling and detect when we need no
more iterations to trigger an interruption.

We use a realtime timer to inject the signal after a certain delay,
increasing the delay on every loop to try and exercise different code
paths within the function. The first delay is very short such that we
hopefully enter the kernel with a pending signal.

Clients should use

struct igt_sigiter iter = {};
while (igt_sigiter_repeat(&iter, enable_interrupts=true))
	do_test()

to automatically repeat the test until we can inject no more signals
into the ioctls. This is condensed into a macro

igt_interruptible(enable_interrupts=true)
	do_test();

for convenience.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2016-03-19 15:20:43 +00:00
Chris Wilson
c1fed522ae lib: Replace drmIoctl() with a layer of indirection
Insted of calling drmIoctl() directly, call igt_ioctl() instead. In the
normal scenario this is function pointer that calls drmIoctl() (so no
penalty), but allows us to divert ioctls into our own routines for
nefarious purposes. One such purpose will be to control interrupt
generation into the ioctl, to be able to detect when we successfully
interrupt the ioctl and when we no longer need more interrupts.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2016-03-19 13:15:08 +00:00
Daniel Vetter
4e4f5b4fdc lib/tests: More igt_subtest_group checks
... for some cases discussed with Chris on irc. We seem to get them all
right.

Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
2016-03-19 12:15:47 +01:00
Daniel Vetter
483d1c0a23 lib: Fix some doc warnings
Cc: Marius Vlad <marius.c.vlad@intel.com>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
2016-03-19 12:12:47 +01:00
Daniel Vetter
72d04b8453 lib: Add igt_subtest_group
Useful for creating common setup code in igt_fixture which is only
needed by a subset of tests. And since I'm a good citizen it comes
with a library testcase/example included.

v2: Make testcase nastier to ensure a subtest group SKIPS when it's
parent is skipping already. I accidentally got this right, but let's
make sure.

Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
2016-03-19 10:37:40 +01:00
Rodrigo Vivi
dbc74dd990 intel: Adding missing Broxton PCI IDs.
These IDs were already part of the kernel since:

kernel commit 985dd4360fdf2533fe48a33a4a2094f2e4718dc0
Author: Imre Deak <imre.deak@intel.com>
Date:   Thu Jan 28 16:04:12 2016 +0200

     drm/i915/bxt: update list of PCIIDs

Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
Reviewed-by: Arun Siluvery <arun.siluvery@linux.intel.com>
2016-03-18 09:30:08 -07:00
Chris Wilson
95090bb50b lib/ioctl_wrappers: Explain a couple of igt_require(ret == 0)
Use more verbose igt_require(), here assocaited with SET_CACHING, such
that the requirements are explained in the debug/failure log.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2016-03-18 14:46:23 +00:00
Chris Wilson
a8a685f877 lib/intel_os: Squelch dmesg spam when purging VM caches
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2016-03-18 11:44:06 +00:00
Chris Wilson
4eba8e22fa igt/gem_concurrent_all: struct buffers for all
Now that we started packaging all parameters in one handy struct, pass
them everywhere. This allows us to pass along requirements so that we
can perform the checks inside each indvidual subtest and so not anger
the igt gods.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2016-03-18 10:47:34 +00:00
Chris Wilson
dcb39b5270 igt/gem_softpin: Repeat tests with signal interruptions
For the long running tests probing error conditions, throwing in the
signal interruptions is a good idea.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2016-03-18 09:20:06 +00:00
Chris Wilson
34098b71fa lib/igt_gt: Handle SIGINT whilst writing to i915_error_state
Becareful in case we try and eat the error state whilst interrupts are
being sent and repeat the write() until we finish uninterrupted.

References: https://bugs.freedesktop.org/show_bug.cgi?id=94573
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2016-03-17 09:55:00 +00:00
Mayuresh Gharpure
0e2e880e04 lib/igt_kms: Add COMMIT_ATOMIC to igt_display_commit2()
Co-Author : Marius Vlad <marius.c.vlad@intel.com>
Co-Author : Pratik Vishwakarma <pratik.vishwakarma@intel.com>

So far we have had only two commit styles, COMMIT_LEGACY
and COMMIT_UNIVERSAL. This patch adds another commit style
COMMIT_ATOMIC which makes use of drmModeAtomicCommit()

v2: (Marius)
	i)Set CRTC_ID to zero while disabling plane
	ii)Modified the log message in igt_atomic_prepare_plane_commit
	https://patchwork.freedesktop.org/patch/71945/

v3: (Marius)Set FB_ID to zero while disabling plane
	https://patchwork.freedesktop.org/patch/72179/

v4: (Maarten) Corrected the typo in commit message
	https://patchwork.freedesktop.org/patch/72598/

v5: Added check for DRM_CLIENT_CAP_ATOMIC in igt_display_init
    (Marius)
	i)Removed unused props from igt_display_init
	ii)Removed unused ret. Changed function to void
	iii)Declare the variable before checking if we have
	DRM_CLIENT_CAP_ATOMIC.
	https://patchwork.freedesktop.org/patch/73505/

v6: (Jani) Corrected typo in commit message

v7: Added is_atomic check for DRM_CLIENT_CAP_ATOMIC in
	igt_display_init and igt_atomic_commit

v8: (Matthew Auld) Replaced for loops by for_each_connected_output and
	for_each_plane_on_pipe
    (Lionel) Populate properties only if the value has changed
    	Remove the resetting of values in disable case
	Note : I've used Maarten's diff patch

v9: (Lionel) Added resetting of rotation property

v10: (Marius) Modified the macro declaration to avoid shadow declaration
	warning, also removed one unused variable

Signed-off-by: Mayuresh Gharpure <mayuresh.s.gharpure@intel.com>
Signed-off-by: Pratik Vishwakarma <pratik.vishwakarma@intel.com>
Signed-off-by: Mayuresh Gharpure <mayuresh.s.gharpure@intel.com>
Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
2016-03-15 12:32:05 +01:00
Chris Wilson
5459374120 lib: Remove dead gem_get_num_rings()
No users so time to die.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2016-03-14 14:17:12 +00:00
Chris Wilson
3d9bcd0804 lib: Remove unused gem_has_enable_ring()
No one uses this nor should they as it just gem_get_param() in disguise
and they are better feature queries for whether individual execution
engines are functional.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2016-03-14 14:17:12 +00:00
Chris Wilson
6cd15fb930 benchmarks: Add gem_syslatency
Instead of measuring the wakeup latency of a GEM client, we turn the
tables here and ask what is the wakeup latency of a normal process
competing with GEM. In particular, a realtime process that expects
deterministic latency.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2016-03-09 23:40:21 +00:00
Daniel Vetter
598deeda52 lib: remove saved_sig_mask
Oversight from the exit handler cleanup, spotted by Chris Wilson.

Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
2016-03-09 15:09:56 +01:00
Daniel Vetter
93824f0cd0 lib: Unit test for exit handler
Checks that
- exit handlers are run only once, even when registered multiple
  times.
- run in reverse order
- actually run for all ways a test could exit.

This is prep work to extend exit handlers to also work in a subtest
aware way.

Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
2016-03-08 17:12:04 +01:00
Daniel Vetter
78f2ea3bc8 lib/igt_core: remove igt_disable/enable_exit_handlers
No longer needed, and also not really a safe idea.

Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
2016-03-08 17:12:04 +01:00
Daniel Vetter
771dbb06b5 lib/igt_kms: Don't disable exit handlers around set_vt_mode
This was originally added to work around a race, but then that's
broken now. And set_vt_mode generally never results in a test binary
crash, so overkill.

I want to get rid of this interface since I spotted some abuse.

Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
2016-03-08 17:12:04 +01:00
Chris Wilson
74761382b3 benchmarks/gem_latency: Replace igt_stats with igt_mean
Use a simpler statically allocated struct for computing the mean as
otherwise we many run out of memeory!

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2016-03-08 14:58:59 +00:00
Chris Wilson
697c3f5550 lib: Magic for_each_engine() macro to iterate over available engines
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2016-03-08 09:57:33 +00:00
Chris Wilson
60eafc5489 igt/gem_exec_suspend: Do pre/post suspend double checks
Check that the system operates normally before and after the suspend (as
well as across the suspend). The goal is to isolate the breakage to the
subtest.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2016-03-08 09:57:33 +00:00
Chris Wilson
9ba9af2ea4 lib: Skip execution in gem_has_ring()
By looking for a particular error we can avoid actually executing
anything when testing whether the kernel supports an individual ring.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2016-03-08 09:57:33 +00:00
Chris Wilson
0501dcfd0f lib: Flush all possible rings
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2016-03-08 09:57:33 +00:00
Chris Wilson
310f99ceb8 lib: Flush BSD2 as well when available
When flushing work and idling the GPU, we need to flush all engines,
including the forgotten BSD2.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2016-03-08 09:57:33 +00:00
Paulo Zanoni
d8bf28f0cb tests: fix CRTC assignment for a few tests
All the tests I wrote always assumed that every connector supported
CRTC 0. This is not the case for BSW and possibly others, so fix the
tests before the CI reports more failures.

Signed-off-by: Paulo Zanoni <paulo.r.zanoni@intel.com>
2016-03-03 16:57:48 -03:00
Paulo Zanoni
c6279ec4bb lib/igt_kms: add kmstest_get_crtc_idx
Move it from pm_rpm.c to lib/igt_kms and remove the hardcoded version
from kms_frontbuffer_tracking. I'm also planning to add other callers.

Signed-off-by: Paulo Zanoni <paulo.r.zanoni@intel.com>
2016-03-03 16:56:01 -03:00
Ville Syrjälä
037bc69fde lib/igt_fb: Fix gen2 and 915 Y tile sizes
gen2 tile dimensions are 128x32 for both X and Y tiling
915 tile dimensions are 512x8 for both X and Y tiling

Fix igt_get_fb_tile_size() to return the correct Y tile dimensions
for these platforms. X tile was fine already.

Cc: Paulo Zanoni <paulo.r.zanoni@intel.com>
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
2016-03-03 15:53:08 +02:00
Ville Syrjälä
0c02873220 lib/igt_kms: Fix igt_fb_set_size() debug message
The debug message in igt_fb_set_size() was copy pasted
from igt_fb_set_position() and not adjusted to say the
right thing. Fix it up.

Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
2016-03-03 15:53:08 +02:00
Chris Wilson
7499b913b3 lib/igt_gt: Replace asm clflush/mfence with __builtin_ia32 variants
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2016-03-03 12:11:01 +00:00
Chris Wilson
cb4589af09 lib: Tidy testing for rtcwake
When performing a dummy-run of rtcwake, hide the output as it doesn't
print anything useful (just when it will wake up).

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2016-03-03 10:19:01 +00:00
Chris Wilson
18d0b1efb8 lib/igt_fb: Fix domain tracking for GTT cairo surfaces
If we create a cairo surface using a GTT mmaping, then we need to use
the GTT access domain. cairo surfaces created with a blit temporary (for
unfenced surfaces) still use the CPU domain.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2016-03-02 14:14:11 +00:00
Chris Wilson
5533f22c35 lib: Show the command that fails when suspending
Include the system("") in the debug output for the assertion failure.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2016-03-02 13:58:35 +00:00
Daniele Ceraolo Spurio
03c7f84eb1 lib: move i915_wedged_set to ig_gt.c
Upcoming tests will call it to recover from bad states caused by
hangcheck bugs.the function was renamed to igt_force_gpu_reset to have a
naming closer to other hang-related functions in the same file.

The value written to the debugfs has also been changed to -1; this makes
no differences with the current implementation but copes with upcoming
TDR changes (still under discussion) that should allow the resetting of
a mask of rings.

Signed-off-by: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>
Signed-off-by: Mika Kuoppala <mika.kuoppala@intel.com>
2016-03-01 16:57:00 +02:00
Chris Wilson
aed69b56d4 lib: Add read/write direction support for dmabuf synchronisation
Allow read-only synchronisation on dmabuf mmaps, useful to allow
concurrent read-read testing between the CPU and GPU.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2016-03-01 13:25:07 +00:00
Chris Wilson
925e5e1cae lib: Check required number of surfaces against VFS file limits
If we want to create more file handles than VFS supports (itself often a
memory limited value), report that we can not create that many objects
via intel_require_memory().

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2016-02-29 15:40:21 +00:00
Chris Wilson
754876378d igt/gem_sync: Enforce a timeout of 20s
The sync test is supposed to complete in 10s. But some bugs cause it to
run very, very slowly. As a defence against those, terminate the test if
we wait for more than 20s.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2016-02-26 22:19:41 +00:00
Chris Wilson
f27d295fe3 lib: Move gem_wait() to ioctl-wrappers
We intend to use gem_wait() in more tests than gem_wait.c, so move the
simple ioctl wrapper into the core.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2016-02-23 18:03:46 +00:00
David Weinehall
15deba4575 lib/igt_pm: Lib for power management
Move power management related code to a separate library.
Initially this is done only for workarounds that apply to external
components.  Modify the users of such workarounds accordingly.
This currently involves HD audio and SATA link power management.
For SATA link PM there's also code to save the previous settings,
to allow for resetting the values after we've finished testing.

Signed-off-by: David Weinehall <david.weinehall@intel.com>
Reviewed-by: Marius Vlad <marius.c.vlad@intel.com>
Signed-off-by: Marius Vlad <marius.c.vlad@intel.com>
2016-02-19 12:10:21 +02:00
Chris Wilson
16038908de lib: Restore gem_available_aperture_size()
Missed an error whilst rebasing and trying to modify the previous patch
to keep this function intact... Instead, I now have to add this patch to
restore gem_available_aperture_size() and its one usage.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2016-02-18 10:36:45 +00:00
Chris Wilson
391b32c382 igt: Report the global GTT size
For many tests, the relevant aperture is not the ppGTT but the internal
global GTT managed by the kernel. Use this limit appropriately.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2016-02-18 10:30:56 +00:00
Derek Morton
ef724ab2bb lib/igt_core.c: Expand --run-subtest functionality.
Added extended wildcard support when specifying --run-subtest.

Wildcard format is as specified in rfc3977 and the uwildmat() implementation
is taken from libinn.
See https://tools.ietf.org/html/rfc3977#section-4 for a description of
allowed wildcard expressions.

v2: Use comma as list separator (Ville Syrjala)
support both ^ and ! as not operators (Dave Gordon)

v3: Updated to use uwildmat() (Dave Gordon)

Signed-off-by: Derek Morton <derek.j.morton@intel.com>
[danvet: Fixup whitespace. Add #include <stdint.h>. Run lint.]
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
2016-02-17 18:21:12 +01:00
Tiago Vignatti
35debab2d9 lib: Add prime_sync_start and prime_sync_end helpers
This patch adds dma-buf mmap synchronization ioctls that can be used by tests
for cache coherency management e.g. when CPU and GPU domains are being accessed
through dma-buf at the same time.

v7: add sync invalid flags test.

Signed-off-by: Tiago Vignatti <tiago.vignatti@intel.com>
Reviewed-by: Stéphane Marchesin <marcheu@chromium.org>
Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
2016-02-11 18:16:12 +01:00
Tiago Vignatti
4edfa09ae4 prime_mmap: Add basic tests to write in a bo using CPU
This patch adds test_correct_cpu_write, which maps the texture buffer through a
prime fd and then writes directly to it using the CPU. It stresses the driver
to guarantee cache synchronization among the different domains.

This test also adds test_forked_cpu_write, which creates the GEM bo in one
process and pass the prime handle of the it to another process, which in turn
uses the handle only to map and write. Roughly speaking this test simulates
Chrome OS  architecture, where the Web content ("unpriviledged process") maps
and CPU-draws a buffer, which was previously allocated in the GPU process
("priviledged process").

This requires kernel modifications (Daniel Thompson's "drm: prime: Honour
O_RDWR during prime-handle-to-fd") and therefore prime_handle_to_fd_for_mmap is
added to fail in case these lack. Also, upcoming tests (e.g. next patch) are
going to use it as well, so make it public and available in the lib.

v2: adds prime_handle_to_fd_with_mmap for skipping test in older kernels and
test for invalid flags.

Signed-off-by: Tiago Vignatti <tiago.vignatti@intel.com>
Reviewed-by: Stéphane Marchesin <marcheu@chromium.org>
Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
2016-02-11 18:15:59 +01:00
Tiago Vignatti
e1f663b543 lib: Add gem_userptr and __gem_userptr helpers
This patch moves userptr definitions and helpers implementation that were
locally in gem_userptr_benchmark and gem_userptr_blits to the library, so other
tests can make use of them as well. There's no functional changes.

v2: added __ function to differentiate when errors want to be handled back in
the caller; bring gem_userptr_sync back to gem_userptr_blits; added gtkdoc.
v8: remove local_i915_gem_userptr from gem_concurrent_all.c to use the global
helpers instead.

Signed-off-by: Tiago Vignatti <tiago.vignatti@intel.com>
Reviewed-by: Stéphane Marchesin <marcheu@chromium.org>
Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
2016-02-11 18:15:44 +01:00
Tomeu Vizoso
2629f3aeef lib: Fix build when vc4 headers are present
Automake seems to not like variable assignments indented with tabs.

Signed-off-by: Tomeu Vizoso <tomeu.vizoso@collabora.com>
Fixes: 9e5478dc4345 ("lib: Only compile igt_vc4 is we have it")
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
2016-02-09 16:25:35 +01:00
Daniel Vetter
9e5478dc43 lib: Only compile igt_vc4 is we have it
Unbreaks compilation fail.

Also appease gcc in gem_exec_basic because.

Cc: Eric Anholt <eric@anholt.net>
Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
2016-02-09 09:46:03 +01:00
Eric Anholt
59f98997ab igt: Add a helper function for creating VC4 BOs.
v2: Use do_ioctl().

Signed-off-by: Eric Anholt <eric@anholt.net>
Reviewed-by: Daniel Stone <daniels@collabora.com>
2016-02-08 16:34:13 -08:00
Eric Anholt
b8badc2436 igt: Add a helper function for mapping VC4 BOs.
v2: Use do_ioctl().

Signed-off-by: Eric Anholt <eric@anholt.net>
Reviewed-by: Daniel Stone <daniels@collabora.com>
2016-02-08 16:34:13 -08:00
Eric Anholt
4880e13d04 igt: Add a helper function for getting a VC4 BO that's been drawn to.
v2: Use do_ioctl().

Signed-off-by: Eric Anholt <eric@anholt.net>
Reviewed-by: Daniel Stone <daniels@collabora.com>
2016-02-08 16:34:13 -08:00