Quoting Chris Wilson (2019-12-07 19:01:07) > The movntqda requires 16-byte alignment for the source pointer. Avoid > falling back to clflush if the source pointer is misaligned by doing the > doing a small uncached memcpy to fixup the alignments. > > Signed-off-by: Chris Wilson <chris@xxxxxxxxxxxxxxxxxx> <SNIP> > @@ -1150,19 +1150,30 @@ static u32 *copy_batch(struct drm_i915_gem_object *dst_obj, > return ERR_PTR(ret); > } > > + ptr = dst; I'd add a newline here as this will propagate to the later branch if WC map fails. > src = ERR_PTR(-ENODEV); > - if (src_needs_clflush && > - i915_can_memcpy_from_wc(NULL, offset, 0)) { > + if (src_needs_clflush && i915_has_memcpy_from_wc()) { > src = i915_gem_object_pin_map(src_obj, I915_MAP_WC); > if (!IS_ERR(src)) { > - i915_memcpy_from_wc(dst, > - src + offset, > - ALIGN(length, 16)); > + src += offset; > + > + if (!IS_ALIGNED(offset, 16)) { > + len = min(ALIGN(offset, 16) - offset, length); > + > + memcpy(ptr, src, len); > + > + offset += len; > + length -= len; > + ptr += len; > + src += len; > + } > + GEM_BUG_ON(!IS_ALIGNED((unsigned long)src, 16)); > + > + i915_memcpy_from_wc(ptr, src, ALIGN(length, 16)); Could be a helper function. Reviewed-by: Joonas Lahtinen <joonas.lahtinen@xxxxxxxxxxxxxxx> Regards, Joonas _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/intel-gfx