mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-16 00:16:48 +07:00
drm/i915: Prefer memset64() when filling the iomap
As the ringbuffer may exist inside stolen memory, our access to it may be via the GTT iomap. This implies we may only have WC access for which the conventional memset() substitution of rep stos performs very badly, so switch to the rep mov[dq] variants when available. Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> Cc: Mika Kuoppala <mika.kuoppala@intel.com> Cc: Matthew Auld <matthew.auld@intel.com> Reviewed-by: Matthew Auld <matthew.auld@intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/20180319123528.28249-1-chris@chris-wilson.co.uk
This commit is contained in:
parent
feb06c151f
commit
46b863325c
@ -1693,17 +1693,18 @@ u32 *intel_ring_begin(struct i915_request *rq, unsigned int num_dwords)
|
||||
need_wrap &= ~1;
|
||||
GEM_BUG_ON(need_wrap > ring->space);
|
||||
GEM_BUG_ON(ring->emit + need_wrap > ring->size);
|
||||
GEM_BUG_ON(!IS_ALIGNED(need_wrap, sizeof(u64)));
|
||||
|
||||
/* Fill the tail with MI_NOOP */
|
||||
memset(ring->vaddr + ring->emit, 0, need_wrap);
|
||||
ring->emit = 0;
|
||||
memset64(ring->vaddr + ring->emit, 0, need_wrap / sizeof(u64));
|
||||
ring->space -= need_wrap;
|
||||
ring->emit = 0;
|
||||
}
|
||||
|
||||
GEM_BUG_ON(ring->emit > ring->size - bytes);
|
||||
GEM_BUG_ON(ring->space < bytes);
|
||||
cs = ring->vaddr + ring->emit;
|
||||
GEM_DEBUG_EXEC(memset(cs, POISON_INUSE, bytes));
|
||||
GEM_DEBUG_EXEC(memset32(cs, POISON_INUSE, bytes / sizeof(*cs)));
|
||||
ring->emit += bytes;
|
||||
ring->space -= bytes;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user