diff options
author | Chris Wilson <chris@chris-wilson.co.uk> | 2017-08-16 10:52:06 +0200 |
---|---|---|
committer | Chris Wilson <chris@chris-wilson.co.uk> | 2017-08-18 12:57:36 +0200 |
commit | c7c6e46f913bb3a6ff19e64940ebb54652033677 (patch) | |
tree | 6da86f21d43db7debd99d0444551604dd4ad678e /drivers/gpu/drm/i915/i915_gem_evict.c | |
parent | drm/i915: Check context status before looking up our obj/vma (diff) | |
download | linux-c7c6e46f913bb3a6ff19e64940ebb54652033677.tar.xz linux-c7c6e46f913bb3a6ff19e64940ebb54652033677.zip |
drm/i915: Convert execbuf to use struct-of-array packing for critical fields
When userspace is doing most of the work, avoiding relocs (using
NO_RELOC) and opting out of implicit synchronisation (using ASYNC), we
still spend a lot of time processing the arrays in execbuf, even though
we now should have nothing to do most of the time. One issue that
becomes readily apparent in profiling anv is that iterating over the
large execobj[] is unfriendly to the loop prefetchers of the CPU and it
much prefers iterating over a pair of arrays rather than one big array.
v2: Clear vma[] on construction to handle errors during vma lookup
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20170816085210.4199-3-chris@chris-wilson.co.uk
Diffstat (limited to 'drivers/gpu/drm/i915/i915_gem_evict.c')
-rw-r--r-- | drivers/gpu/drm/i915/i915_gem_evict.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/drivers/gpu/drm/i915/i915_gem_evict.c b/drivers/gpu/drm/i915/i915_gem_evict.c index a193f1b36c67..4df039ef2ce3 100644 --- a/drivers/gpu/drm/i915/i915_gem_evict.c +++ b/drivers/gpu/drm/i915/i915_gem_evict.c @@ -318,8 +318,8 @@ int i915_gem_evict_for_node(struct i915_address_space *vm, /* Overlap of objects in the same batch? */ if (i915_vma_is_pinned(vma)) { ret = -ENOSPC; - if (vma->exec_entry && - vma->exec_entry->flags & EXEC_OBJECT_PINNED) + if (vma->exec_flags && + *vma->exec_flags & EXEC_OBJECT_PINNED) ret = -EINVAL; break; } |