<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Apr 5, 2016 at 10:12 AM, Roland Scheidegger <span dir="ltr"><<a href="mailto:sroland@vmware.com" target="_blank">sroland@vmware.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="HOEnZb"><div class="h5">Am 05.04.2016 um 03:04 schrieb Jason Ekstrand:<br>
> It's possible, when doing an x-tiled copy, to end up with a case where the<br>
> bytes parameter is equal to 16 but the pointer is not actually aligned.<br>
> This causes asserts in debug mode and segfaults in release builds due to<br>
> doing an aligned operation on an unaligned pointer.<br>
><br>
> Bugzilla: <a href="https://bugs.freedesktop.org/show_bug.cgi?id=93962" rel="noreferrer" target="_blank">https://bugs.freedesktop.org/show_bug.cgi?id=93962</a><br>
> ---<br>
>  src/mesa/drivers/dri/i965/intel_tiled_memcpy.c | 48 +++++++++++++-------------<br>
>  1 file changed, 24 insertions(+), 24 deletions(-)<br>
><br>
> diff --git a/src/mesa/drivers/dri/i965/intel_tiled_memcpy.c b/src/mesa/drivers/dri/i965/intel_tiled_memcpy.c<br>
> index 19079d0..823d8b0 100644<br>
> --- a/src/mesa/drivers/dri/i965/intel_tiled_memcpy.c<br>
> +++ b/src/mesa/drivers/dri/i965/intel_tiled_memcpy.c<br>
> @@ -85,19 +85,19 @@ rgba8_copy_aligned_dst(void *dst, const void *src, size_t bytes)<br>
>     uint8_t const *s = src;<br>
><br>
>  #ifdef __SSSE3__<br>
> -   if (bytes == 16) {<br>
> -      assert(!(((uintptr_t)dst) & 0xf));<br>
> -      rgba8_copy_16_aligned_dst(d+ 0, s+ 0);<br>
> -      return dst;<br>
> -   }<br>
> +   if ((((uintptr_t)dst) & 0xf) == 0) {<br>
> +      if (bytes == 16) {<br>
> +         rgba8_copy_16_aligned_dst(d+ 0, s+ 0);<br>
> +         return dst;<br>
> +      }<br>
><br>
> -   if (bytes == 64) {<br>
> -      assert(!(((uintptr_t)dst) & 0xf));<br>
> -      rgba8_copy_16_aligned_dst(d+ 0, s+ 0);<br>
> -      rgba8_copy_16_aligned_dst(d+16, s+16);<br>
> -      rgba8_copy_16_aligned_dst(d+32, s+32);<br>
> -      rgba8_copy_16_aligned_dst(d+48, s+48);<br>
> -      return dst;<br>
> +      if (bytes == 64) {<br>
> +         rgba8_copy_16_aligned_dst(d+ 0, s+ 0);<br>
> +         rgba8_copy_16_aligned_dst(d+16, s+16);<br>
> +         rgba8_copy_16_aligned_dst(d+32, s+32);<br>
> +         rgba8_copy_16_aligned_dst(d+48, s+48);<br>
> +         return dst;<br>
> +      }<br>
>     }<br>
>  #endif<br>
><br>
> @@ -123,19 +123,19 @@ rgba8_copy_aligned_src(void *dst, const void *src, size_t bytes)<br>
>     uint8_t const *s = src;<br>
><br>
>  #ifdef __SSSE3__<br>
> -   if (bytes == 16) {<br>
> -      assert(!(((uintptr_t)src) & 0xf));<br>
> -      rgba8_copy_16_aligned_src(d+ 0, s+ 0);<br>
> -      return dst;<br>
> -   }<br>
> +   if ((((uintptr_t)src) & 0xf) == 0) {<br>
> +      if (bytes == 16) {<br>
> +         rgba8_copy_16_aligned_src(d+ 0, s+ 0);<br>
> +         return dst;<br>
> +      }<br>
><br>
> -   if (bytes == 64) {<br>
> -      assert(!(((uintptr_t)src) & 0xf));<br>
> -      rgba8_copy_16_aligned_src(d+ 0, s+ 0);<br>
> -      rgba8_copy_16_aligned_src(d+16, s+16);<br>
> -      rgba8_copy_16_aligned_src(d+32, s+32);<br>
> -      rgba8_copy_16_aligned_src(d+48, s+48);<br>
> -      return dst;<br>
> +      if (bytes == 64) {<br>
> +         rgba8_copy_16_aligned_src(d+ 0, s+ 0);<br>
> +         rgba8_copy_16_aligned_src(d+16, s+16);<br>
> +         rgba8_copy_16_aligned_src(d+32, s+32);<br>
> +         rgba8_copy_16_aligned_src(d+48, s+48);<br>
> +         return dst;<br>
> +      }<br>
>     }<br>
>  #endif<br>
><br>
><br>
<br>
</div></div>Looks alright to me.</blockquote><div><br></div><div>Does that count as a revie? :-)<br></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"> Do you plan on reapplying the code which was<br>
reverted due to bug 93962 mentioned there?<br>
(Though honestly that code was part 2 of a 4-part series and I was only<br>
really interested in parts 3 and 4 which noone ever reviewed... I think<br>
they'd still have value today but maybe that's just me...)<span class="HOEnZb"><font color="#888888"><br></font></span></blockquote><div><br></div><div>Yes, that was my plan.  The real bug still existed if you built with -mssse3.  Now that we've gotten it sorted out, the sse2 code should be fine as long as we make the corresponding change there..  It'd be nice to get that merged since I think you'd have to work pretty hard to find a machine with a GPU that works with the i965 driver and doesn't support SSE2.<br></div><div>--Jason<br></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="HOEnZb"><font color="#888888">
Roland<br>
<br>
</font></span></blockquote></div><br></div></div>