4139 Commits

Author SHA1 Message Date
Chris Wilson
7e0853c9c7 igt/gem_exec_nop: Use common array of rings
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2016-01-27 14:47:19 +00:00
Chris Wilson
b09ef449af igt/gem_storedw_loop: Use common array of rings
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2016-01-27 14:47:19 +00:00
Chris Wilson
01acd70762 igt: Add gem_exec_basic
Extremely basic check that we can dispatch an execbuf on every ring.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Acked-by: Daniel Vetter <daniel.vetter@ffwll.ch>
2016-01-27 14:47:00 +00:00
Chris Wilson
04f5215f00 Extract array of execution engines
A few tests wish to execute on every engine, so centralise the array of
known engines.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2016-01-27 14:45:19 +00:00
Chris Wilson
b7f150b606 lib: Query the kernel for support of a particular exec id
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2016-01-27 14:45:19 +00:00
Chris Wilson
e3b68bb666 lib: Share common __gem_execbuf()
An oft-repeated function to check EXECBUFFER2 for a particular fail
condition.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2016-01-27 14:45:18 +00:00
Gabriel Feceoru
711398e82a igt/gem_ringfill: Allow listing subtests in gem_ringfill
Moved gem_quiescent_gpu() call to the run path.

Signed-off-by: Gabriel Feceoru <gabriel.feceoru@intel.com>
Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
2016-01-27 13:32:48 +01:00
Maarten Lankhorst
336235c0a8 gem_ringfill: fix typo in test name
Missing a r!

Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
2016-01-27 13:31:16 +01:00
Chris Wilson
5f6ebb2cb7 igt/gem_concurrent_blit: Tighter scoping of buffers variable
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2016-01-27 11:44:39 +00:00
Chris Wilson
a64f31b31e igt/gem_concurrent_blit: Close userptr handle after importing into bufmgr
The bufmgr import creates a new handle from a name for the userptr - we
can discard our original handle immediately.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2016-01-27 11:44:39 +00:00
Chris Wilson
6f75990af0 igt/gem_concurrent_blit: Tidy blt-fill using gem wrappers
Replace the open-coded ioctls with the thin gem wrappers.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2016-01-27 11:44:39 +00:00
Derek Morton
3598fff994 tests/Android.mk: Make intel_residency CAIRO dependant
intel_residency has a cairo dependency through igt_fb.c. Remove it
if ANDROID_HAS_CAIRO is not defined.

Signed-off-by: Derek Morton <derek.j.morton@intel.com>
Signed-off-by: Paulo Zanoni <paulo.r.zanoni@intel.com>
2016-01-26 15:45:44 -02:00
Jesse Barnes
e28acefc5c lib/igt_kms, tests/testdisplay: allow probing of new connector modes
Fixup some fallout from the connector probing changes so testdisplay -m
will pick up newly hotplugged displays correctly.

Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org.
2016-01-26 09:32:43 -08:00
Chris Wilson
e2c9a023f2 igt/gem_exec_alignment: Reduce GTT usage if !full-ppgtt
If we have to share the GTT with others, we cannot rely on being able to
fill it and have to factor in some slack for others.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2016-01-26 09:19:00 +00:00
Chris Wilson
49b1337881 igt/gem_exec_alignment: Actually check aligned locations after many
As well as ensuring the kernel doesn't simply crash when asked to do
lots of objects, check it actually aligns them.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2016-01-26 09:18:59 +00:00
Eric Anholt
ea3331d120 igt: Disable igt_clflush_range() implementation on ARM builds
Daniel has suggested that I put vc4 testing into igt, since it's got
the piglit integration and KMS coverage already.  This gets the ccore
building so that I can start writing tests.

Signed-off-by: Eric Anholt <eric@anholt.net>
Reviewed-by: Daniel Stone <daniels@collabora.com>
2016-01-25 19:53:36 +00:00
Daniel Stone
bccc0ec6a3 build: Disable x86-specific utilities on non-x86
Some bits can't be built on non-x86 architectures, mostly because they
require x86-specific assembly primitives. Disable these by default on
non-x86 architectures.

Signed-off-by: Daniel Stone <daniels@collabora.com>
Reviewed-by: Eric Anholt <eric@anholt.net>
2016-01-25 19:53:36 +00:00
Michał Winiarski
e6ca4bd7cd lib/ioctl_wrappers: Add gem_has_softpin
We can move it from softpin test into lib, and since softpin support is
highly unlikely to go away in-between getparam ioctl calls, let's just
do a single call and store the value.

v2: rebase

Signed-off-by: Michał Winiarski <michal.winiarski@intel.com>
Reviewed-by: Chris Wilson <chris@chris-wilson.co.uk>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
2016-01-25 19:44:34 +01:00
Michał Winiarski
52b5d5016e lib/ioctl_wrappers: Add gem_gtt_type exposing raw HAS_ALIASING_PPGTT param
No functional changes.
While I'm here, let's also rename gem_uses_aliasing_ppgtt (since it's
being used to indicate if we are using ANY kind of ppgtt) and introduce
gem_uses_full_ppgtt to drop some unnecessary code from tests that were
previously calling getparam directly instead of using ioctl wrapper.

v2: drop gem_uses_full_48b_ppgtt since it's no longer used anywhere,
    s/48b/64b (Chris)
v3: rebase

Cc: Chris Wilson <chris@chris-wilson.co.uk>
Signed-off-by: Michał Winiarski <michal.winiarski@intel.com>
Reviewed-by: Chris Wilson <chris@chris-wilson.co.uk>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
2016-01-25 19:44:31 +01:00
Chris Wilson
0e2071411a Promote eviction memory sizes and buffer counts to uint64_t
References: https://bugs.freedesktop.org/show_bug.cgi?id=93849
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2016-01-25 14:03:56 +00:00
Paulo Zanoni
beb936f188 tools: add intel_residency
After the recent discussions regarding the effects of the vblank
disabling policies on PC state residencies, I started running some
experiments to reevaluate some non-intuitive conclusions I had
reached. In order to help me do this, I decided to write this tool.

The idea is very simple: the tool puts the system on an screen-on idle
state, checks which PC state residency is the deepest we can reach,
measures its residency, then does some not-so-idle tests and measures
the residencies. You can use the tool to compare different Kernel
trees and you can also use the tool to compare enabled vs disabled
features.

It's obvious that these cases do not represent real-world use cases of
our driver, but they are already enough to highlight differences
between the many patches I wrote. I was even able to catch a bug in
one of my patches by spotting an unexpected regression in the
residencies.

I've been using this tool for FBC, but I expect it to also be useful
for PSR, DRRS and similar features. I've been measuring the effects of
different optimizations I wrote, and I've also been measuring the FBC
vs no-FBC cases.

It is also important to highlight that if your system is not properly
configured for efficient power savings the tool may not be able to
show differences between the results. On my Broadwell machine, for
example, if I don't run "powertop --auto-tune" before running the
tool, I get PC2 as the deepest state, and 90%+ residency for every
workload. After properly configuring the machine, I get PC7 as the
deepest state, which is the expected.

So far I only tested this tool on BDW and SKL, and it may hit some
unexpected assertions for older platforms.

I only implemented the cases that are immediately useful for me, but
we may also expand the tool in the future. We can add more important
workloads. We can add support for screen-off cases, so we can compare
the effects of runtime PM and other screen-off features. There's a lot
we can do, but none of this is on my current priority list.

And remember: /usr/bin/paste is your friend when comparing results.

v2:
  - Be more idle at setup_idle().
  - Improve printing for /usr/bin/paste usage.

Signed-off-by: Paulo Zanoni <paulo.r.zanoni@intel.com>
2016-01-25 11:58:05 -02:00
Chris Wilson
9bf4e19125 igt/gem_softpin: Keep last_handle around to vary hole generation
If we don't close the handle from the last pass, we don't free up the
previous pass's vma immediately, changing the hole allocation.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2016-01-24 15:35:31 +00:00
Chris Wilson
c5b0293ca3 igt/gem_softpin: Exercise snoop+uncached abutting
snooped objects are not allowed to abutt uncached objects on older gen
(!llc and global GTT) or else the GPU may hang if it prefetches across a
page boundary into a different memory type (i.e. CS reading from snoop).
The kernel should be checking the alignment rules as normal.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2016-01-23 18:35:20 +00:00
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