4066 Commits

Author SHA1 Message Date
Chris Wilson
d4a05bc009 igt/gem_concurrent_blit: Switch to a shared mmap for userptr
If we use a MAP_SHARED mmaping for the our backing storage for userptr,
then it will be inherited across the fork with the same address. ideal
for continuity testing of children.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2016-01-23 09:08:39 +00:00
Chris Wilson
69ecedea73 igt/gem_concurrent_blit: Allocate a private batch cache for the child
We have to avoid the COW alias for the intel_bufmgr and intel_batch
cache as the child may close the object (in its local cache) leaving an
alias in the parent cache pointing to a stale object.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2016-01-23 08:18:23 +00:00
Chris Wilson
3eae640b81 igt/gem_concurrent_blit: Disable userptr+child tests
The issue here is that the pointer inherited upon the child is
copied-on-write, i.e. the pointer is private to each process, but the
handle is shared. This means that writes and reads in the child are
going to a different set of pages than the GPU's object - the test is
simply broken. To overcome this we would need to mmap the shared buffer
into the child.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2016-01-22 20:01:55 +00:00
Chris Wilson
4645630d3e igt/gem_concurrent_blit: Check inheritance of buffers
The current forked modes recreate their handles in the children and just
look at any complications arising from contention. This mode looks at
inheriting the fd+handles from the parent into the child and seeing if
we can use them within the child.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2016-01-22 19:40:30 +00:00
Chris Wilson
512f846f37 igt/gem_ringfill: Mark the write object as EXEC_OBJECT_WRITE
After setting the flag for NORELOC (to avoid having to pay the cost of
validating the relocations on every pass), we need to make sure that
we set EXEC_OBJECT_WRITE so that we do track the outstanding writes.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2016-01-22 19:28:34 +00:00
Chris Wilson
291ff6bcf1 igt/gem_ringfill: Disable MI_STORE_DATA_IMM on BSD/gen6
It's broken, avoid at all costs.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2016-01-22 19:11:46 +00:00
Chris Wilson
0091e6787c igt/gem_userptr_blits: Exercise applying relocations to a userptr bo
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2016-01-22 18:28:01 +00:00
Chris Wilson
5b675f7b2f lib: Refactor common detection of missed interrupts
As we have the same function in a few places to read the
debugfs/i915_ring_missed_irq file, move it to the core.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2016-01-22 17:45:06 +00:00
Chris Wilson
e0ee36141e igt/gem_softpin: Fix MI_STORE_DATA_IMM for gen3
We need both a secure batch and to flag it to use the virtual GTT
address.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2016-01-22 17:30:28 +00:00
Chris Wilson
fbb0f636bd igt: Fix use MI_STORE_DATA_IMM on gen3
For the older gen, MI_STORE_DATA_IMM is a privileged command so we need
to set the "secure" batch flag, and we also need to instruct the command
to use the GTT virtual address.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2016-01-22 17:26:33 +00:00
Chris Wilson
4a3a826342 lib: Print memory requirements as MiB
Since we need a lot of memory, trim off the less significant digits for
easier human consumption.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2016-01-22 16:49:24 +00:00
Chris Wilson
e180bec7bc igt/gem_ringfill: Reduce ringfill to just filling the rings
The objective of this test is to check how the driver handles a full
ring. To that end we need only submit enough work to fill the ring by
submitting work faster than the GPU can execute it. If we are more
careful in our batch construction, we can feed them much faster and
achieve the same results much quicker.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2016-01-22 16:07:23 +00:00
Chris Wilson
c4bcffcd10 igt/gem_exec_alignment: Tweaks count for large alignments
We can fit a few more objects in at high alignment, so do so.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2016-01-22 16:07:23 +00:00
Chris Wilson
bd9842eade igt/gem_cs_tlb: Use softpin to remove GTT layout assumptions
With softpin we can explicitly manage the layout of the objects to be
executed, deliberately forcing the reuse of active pages in an attempt
to spot misbehaviour in the CS TLBs. Being explicit allows us to
eliminate a lot of the CPU overhead between execbuf, hopefully
increasing the likelihood of a conflict.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2016-01-22 00:29:54 +00:00
Chris Wilson
0143d4f337 igt/gem_concurrent_blit: Add userptr backing storage tests
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2016-01-21 17:48:01 +00:00
Chris Wilson
a4493a54f3 igt/gem_softpin: Fix MI_STORE_DWORD_IMM for gen2-3
Before gen4, MI_STORE_DWORD was just 3 dwords long (cmd, offset, value).

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2016-01-21 17:48:01 +00:00
Chris Wilson
19642c604b lib: Expand igt_hang_ring() to select target context and various options
Some potential callers want to inject a hang into a particular context,
some want to trigger an actual ban and others may or may not want to
capture the associated error state. Expand the hang injection interface
to suit all.

v2: Disable the new kernel API, but push to provide a missing piece of
infrastucture to unbreak compilation.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2016-01-20 13:15:38 +00:00
Chris Wilson
92caf138f2 tests: Drop the superfluous igt_require_hang_ring()
As the hang injection now itself checks for validity before use, the
tests don't need to do so themselves. Except in certain situations! If
the test forks, it should do requirement checks before the fork (so that
we don't anger the igt gods) and if the test plays around i915.reset
then it needs to do an early igt_require_hang_ring() that is not
affected by the changes to i915.reset.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2016-01-20 13:13:57 +00:00
Chris Wilson
a2eb63720b lib: Always double check igt_require_hang_ring() on use
If we move the igt_require() into the hang injector, this makes simple
test cases even more convenient. More complex test cases can always do
their own precursory check before settting up the test.

However, this does embed the assumption that the first context we are
called from is safe (i.e no i915.enable_hangcheck/i915.reset
interferrence).

v2: A couple of environment variables to skip hang testing or to force
hang injection even if the GPU cannot be reset.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2016-01-20 13:13:57 +00:00
Chris Wilson
47b6137842 igt/gem_partial_pwrite_pread: Fix range computation
The range we chose to overwrite in the target had an off-by-one error
that could cause it to compute a size that went past the end of the
buffer (and so trigger EINVAL). Fortuituously with our seed this did not
occur. Whilst changing the range calculation, update the error logging
to include the range information.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2016-01-20 07:53:22 +00:00
Chris Wilson
6bada3e2d4 igt/gem_softpin: Remove false dependencies on esoteric features
For softpinning, we do not require either userptr or extended ppgtt, so
remove those requirements and make the tests work universally. (Certain
ABI tests require large GTT, or per-process GTT.)

In the process, make the tests more extensive - validate overlapping
handling more careful, explicitly test no-relocation support, validate
more ABI handling. And for fun, cause a kernel GPF.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2016-01-20 07:53:22 +00:00
Chris Wilson
ad9b78f443 igt/gem_exec_alignment: Convert to subtests
Allow both parts (single, many) to be run independently.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2016-01-20 07:53:22 +00:00
Chris Wilson
28c33c6f90 igt/gem_exec_alignment: Fix off-by-one in evalation of find_last_bit()
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2016-01-19 21:13:24 +00:00
Chris Wilson
6cf9d911ab igt/gem_exec_alignment: Remember to require 48b objects!
In order to actually use the high space we need to set the can-use-48bit
flag.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2016-01-19 21:04:33 +00:00
Chris Wilson
167fb9e7b2 igt/gem_exec_alignment: Test multiple objects with alignment as well
Compute the largest alignment for the most number of objects we can create,
then trying an execbuf with them.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2016-01-19 20:48:14 +00:00
Chris Wilson
e7bdc5c916 igt/gem_exec_alignment: Test all possible pot alignments
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2016-01-19 14:03:15 +00:00
Chris Wilson
de45ceb667 igt/gem_ring_sync_loop: Be explicit!
The test just aims to execute batches on alternating rings with a write
target such that every batch must be executed after the previous
completes. This stresses the inter-ring synchronisation, which is
interrupt driven if the gpu does not support semaphores, and so is a
good stress tests for detecting "missed interrupt syndrome". Make that
detection explicit.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2016-01-19 14:03:15 +00:00
Chris Wilson
a8f0963af5 igt/gem_storedw_loop: Add a few more iterations
Whilst still keeping the runtime down, extend the pipeline slightly.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2016-01-19 14:03:15 +00:00
Chris Wilson
e2b9dfd0aa igt/gem_storedw_loop: Remove libdrm crutches
Make the behaviour of the test more explicit wrt to the handle management,
mmap and domain handling.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2016-01-19 14:03:15 +00:00
Chris Wilson
38790b77d5 igt/gem_cs_prefetch: Replace explicit sync with implicit sync
We can trade off the explicit sync (presumably to avoid some resource
starvation issue?) with the implicit sync of having to perform a
relocation. Using an implicit sync helps stress core kernel code,
besides being much faster!

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2016-01-19 14:03:15 +00:00
Chris Wilson
a6090c7191 igt/gem_mmap_wc: Test cpu mmap vs wc mmap coherency
Similar to the cpu mmap vs gtt mmap coherency test.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2016-01-19 14:03:15 +00:00
Chris Wilson
571b876544 gem_concurrent_all: Add a "quick" tiny pass
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2016-01-19 14:03:15 +00:00
Chris Wilson
1c61c0f750 gem_concurrent_blit: Add a pread/pwrite variant to only set part of the buffer
The idea is to check partial cacheline reads/writes.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2016-01-19 14:03:15 +00:00
Chris Wilson
42291f2510 gem_concurrent_blit: Don't call igt_require() outside of a subtest/fixture
gem_concurrent_blit tries to ensure that it doesn't try and run a test
that would grind the system to a halt, i.e. unexpectedly cause swap
thrashing. It currently calls intel_require_memory(), but outside of
the subtest (as the tests use fork, it cannot do requirement testing
within the test children) - but intel_require_memory() calls
igt_require() and triggers and abort. Wrapping that initial require
within an igt_fixture() stops the abort(), but also prevents any further
testing.

This patch restructures the requirement checking to ordinary conditions,
which though allowing the test to run, also prevents listing of subtests
on machines which cannot handle them.
2016-01-19 14:03:15 +00:00
Chris Wilson
51e965f299 tests: Add basic gem_sync test
A very basic test of functionality, execute a nop and wait for it to
complete. It should be very effective at stimulating the "missed
interrupt syndrome" on all devices.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2016-01-17 17:07:50 +00:00
Chris Wilson
136d6c7961 igt/gem_streaming_writes: Set the initial CPU write domain
Remove one assumption from the test and amek the domain management
explict - when we write through the CPU to construction the batch, mark
it as having been written.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2016-01-16 17:54:16 +00:00
Chris Wilson
59adb00129 tests: Add gem_busy
Exercise the busy-ioctl and verify it reports the right active engines
using the execbuffer notation.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2016-01-15 20:54:45 +00:00
Derek Morton
825482a25c tools/Android.mk: Add zlib support
IGT does not build for Android due to a zlib dependency being added
to intel_error_decode.c in a recent patch.
This patch fixes the error by updating the Android makefile to add
the path to the zlib library and using any LDFLAGS specified in
Makefile.sources.

Signed-off-by: Derek Morton <derek.j.morton@intel.com>
Signed-off-by: Damien Lespiau <damien.lespiau@intel.com>
2016-01-15 15:56:59 +00:00
Mika Kahola
fe7a42bff6 tools/intel_bios_reader: Fix typo on dump info
Fix typo on intel_bios_reader.c

Signed-off-by: Mika Kahola <mika.kahola@intel.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
2016-01-15 15:22:55 +02:00
Jani Nikula
480479d7dc intel_bios_reader: dump MIPI sequence block v3
Similar to what's done in kernel. It's a bit artificial that the parsing
and dumping are two separate steps in the userspace tool, but it's
easier to follow and debug the code when both the kernel and userspace
are similar.

v2: don't segfault so much on dumping null pointers

Signed-off-by: Jani Nikula <jani.nikula@intel.com>
2016-01-14 17:56:07 +02:00
Jani Nikula
70dc8c85f1 intel_bios_reader: port the sequence block parsing from kernel
Reuse the same code as kernel. Also parses v3, although does not
actually dump that stuff yet.

Signed-off-by: Jani Nikula <jani.nikula@intel.com>
2016-01-14 17:40:42 +02:00
Jani Nikula
7d1a37282b intel_bios_reader: port find_panel_sequence_block from kernel
No need to reinvent wheels, reuse the code from kernel.

Signed-off-by: Jani Nikula <jani.nikula@intel.com>
2016-01-14 17:36:33 +02:00
Jani Nikula
b26393489e intel_bios_reader: make the VBT pointers more const
In const we trust.

Signed-off-by: Jani Nikula <jani.nikula@intel.com>
2016-01-14 17:35:08 +02:00
Jani Nikula
d9588c891d intel_bios_reader: fix size handling for 32-bit block size
The MIPI DSI sequence block v3+ has a separate block size field.

Signed-off-by: Jani Nikula <jani.nikula@intel.com>
2016-01-14 17:33:34 +02:00
Jani Nikula
2e2fffa7a5 intel_bios_reader: pass bdb pointer around instead of having as global
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
2016-01-14 17:32:21 +02:00
Ville Syrjälä
065d73619f tests/kms_chv_cursor_fail: Skip when the pipe doesn't exist
Looks like I fumbled things when I made kms_chv_cursor_fail iterate
over all pipes. It fails to check that the pipe actually exists, and
so fails on < 3 pipe platforms. Add the necessary checks to skip
on non-existing pipes.

Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
2016-01-11 20:25:45 +02:00
Chris Wilson
cd658a7c6b core/sighelper: Interrupt everyone in the process group
Some stress tests create both the signal helper and a lot of competing
processes. In these tests, the parent is just waiting upon the children,
and the intention is not to keep waking up the waiting parent, but to
keep interrupting the children (as we hope to trigger races in our
kernel code). kill(-pid) sends the signal to all members of the process
group, not just the target pid.

We also switch from using SIGUSR1 to SIGCONT to paper over a race
condition when forking children that saw the default signal action being
run (and thus killing the child).

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Acked-by: Daniel Vetter <daniel.vetter@ffwll.ch>
2016-01-11 09:36:46 +00:00
Rodrigo Vivi
05ac611358 kms_psr_sink_crc: Simplify debugfs reading.
Let's start using igt_debugfs_read helper so we
can change the debugfs interface at anytime.

Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
2016-01-08 16:00:13 -08:00
Ville Syrjälä
f1bb20eb7c tests/kms_flip: Increase TEST_TS_CONT max seq difference to 150
During suspend tests we can exceed the current 100 frame difference
in sequence numbers. Bump the limit to 150 frames.

Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
2016-01-08 19:59:10 +02:00
Ville Syrjälä
39aecb05d5 tests/kms_pipe_crc_basic: Use igt_assert_eq() to see the failing frame counts
Use igt_assert_eq() to compare the frame numbers during the frame
sequence tests so that we'll see exactly what the bad frame counts
are when the test fails.

Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
2016-01-08 19:59:10 +02:00