Re: [Mesa-dev] [PATCH v2] util/u_atomic: provide 64bit atomics where they're missing

2017-04-03 Thread Matt Turner
On Mon, Apr 3, 2017 at 1:37 PM, Mark Janes  wrote:
>
> This commit appears to intermittently provoke gpu hangs on 32-bit Intel
> systems when running
>
> piglit.shaders.glsl-max-varyings >max_varying_components
>
> Since the behavior is intermittent, I may have identified the wrong
> patch.  Please let me know if this patch seems unlikely to affect the
> test.

I think it's not this patch, but I haven't figured out which it is yet.

Applying this patch doesn't change i965_dri.so (md5sum is the same).
___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev


Re: [Mesa-dev] [PATCH v2] util/u_atomic: provide 64bit atomics where they're missing

2017-04-03 Thread Mark Janes
This commit appears to intermittently provoke gpu hangs on 32-bit Intel
systems when running

piglit.shaders.glsl-max-varyings >max_varying_components

Since the behavior is intermittent, I may have identified the wrong
patch.  Please let me know if this patch seems unlikely to affect the
test.

Matt Turner  writes:

> On Thu, Mar 30, 2017 at 3:47 PM, Matt Turner  wrote:
>> On Thu, Mar 30, 2017 at 3:26 PM, Grazvydas Ignotas 
> wrote:
>>> There are still some distributions trying to support unfortunate people
>>> with old or exotic CPUs that don't have 64bit atomic operations. When
>>> compiling for such a machine, gcc conveniently inserts a library call to
>>> a helper, but it's implementation is missing and we get a linker error.
>>> This allows us to provide our own implementation, which is marked weak
>>> to prefer a better implementation, should one exist.
>>>
>>> v2: changed copyright, some style adjustments
>>>
>>> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=93089
>>> Signed-off-by: Grazvydas Ignotas 
>>> Reviewed-by: Matt Turner 
>>
>> Thanks, I'll commit this.
>>
>>> ---
>>>  no commit access, but request sent:
>>>  https://bugs.freedesktop.org/show_bug.cgi?id=100467
>>
>> Thanks. I commented on the bug and said I approve :)
>
> I modified the patch slightly to print the results of the test with
> AC_MSG_CHECKING/AC_MSG_RESULT and pushed it as commit a6a38a038bd62e.
>
> I'll do some build tests on various architectures. I think I like the idea
> of this going to the stable 17.0 branch.
> ___
> mesa-dev mailing list
> mesa-dev@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev
___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev


Re: [Mesa-dev] [PATCH v2] util/u_atomic: provide 64bit atomics where they're missing

2017-04-03 Thread Matt Turner
On Thu, Mar 30, 2017 at 3:47 PM, Matt Turner  wrote:
> On Thu, Mar 30, 2017 at 3:26 PM, Grazvydas Ignotas 
wrote:
>> There are still some distributions trying to support unfortunate people
>> with old or exotic CPUs that don't have 64bit atomic operations. When
>> compiling for such a machine, gcc conveniently inserts a library call to
>> a helper, but it's implementation is missing and we get a linker error.
>> This allows us to provide our own implementation, which is marked weak
>> to prefer a better implementation, should one exist.
>>
>> v2: changed copyright, some style adjustments
>>
>> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=93089
>> Signed-off-by: Grazvydas Ignotas 
>> Reviewed-by: Matt Turner 
>
> Thanks, I'll commit this.
>
>> ---
>>  no commit access, but request sent:
>>  https://bugs.freedesktop.org/show_bug.cgi?id=100467
>
> Thanks. I commented on the bug and said I approve :)

I modified the patch slightly to print the results of the test with
AC_MSG_CHECKING/AC_MSG_RESULT and pushed it as commit a6a38a038bd62e.

I'll do some build tests on various architectures. I think I like the idea
of this going to the stable 17.0 branch.
___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev


Re: [Mesa-dev] [PATCH v2] util/u_atomic: provide 64bit atomics where they're missing

2017-03-30 Thread Matt Turner
On Thu, Mar 30, 2017 at 3:26 PM, Grazvydas Ignotas  wrote:
> There are still some distributions trying to support unfortunate people
> with old or exotic CPUs that don't have 64bit atomic operations. When
> compiling for such a machine, gcc conveniently inserts a library call to
> a helper, but it's implementation is missing and we get a linker error.
> This allows us to provide our own implementation, which is marked weak
> to prefer a better implementation, should one exist.
>
> v2: changed copyright, some style adjustments
>
> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=93089
> Signed-off-by: Grazvydas Ignotas 
> Reviewed-by: Matt Turner 

Thanks, I'll commit this.

> ---
>  no commit access, but request sent:
>  https://bugs.freedesktop.org/show_bug.cgi?id=100467

Thanks. I commented on the bug and said I approve :)
___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] [PATCH v2] util/u_atomic: provide 64bit atomics where they're missing

2017-03-30 Thread Grazvydas Ignotas
There are still some distributions trying to support unfortunate people
with old or exotic CPUs that don't have 64bit atomic operations. When
compiling for such a machine, gcc conveniently inserts a library call to
a helper, but it's implementation is missing and we get a linker error.
This allows us to provide our own implementation, which is marked weak
to prefer a better implementation, should one exist.

v2: changed copyright, some style adjustments

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=93089
Signed-off-by: Grazvydas Ignotas 
Reviewed-by: Matt Turner 
---
 no commit access, but request sent:
 https://bugs.freedesktop.org/show_bug.cgi?id=100467

 configure.ac  | 12 
 src/util/Makefile.sources |  1 +
 src/util/u_atomic.c   | 75 +++
 3 files changed, 88 insertions(+)
 create mode 100644 src/util/u_atomic.c

diff --git a/configure.ac b/configure.ac
index 70885fb..74b870e 100644
--- a/configure.ac
+++ b/configure.ac
@@ -413,10 +413,22 @@ int main() {
 if test "x$GCC_ATOMIC_BUILTINS_SUPPORTED" = x1; then
 DEFINES="$DEFINES -DUSE_GCC_ATOMIC_BUILTINS"
 fi
 AM_CONDITIONAL([GCC_ATOMIC_BUILTINS_SUPPORTED], [test 
x$GCC_ATOMIC_BUILTINS_SUPPORTED = x1])
 
+dnl Check if host supports 64bit atomics
+dnl note that lack of support usually results in link (not compile) error
+AC_LINK_IFELSE([AC_LANG_SOURCE([[
+#include 
+uint64_t v;
+int main() {
+return __sync_add_and_fetch(&v, (uint64_t)1);
+}]])], GCC_64BIT_ATOMICS_SUPPORTED=1)
+if test "x$GCC_64BIT_ATOMICS_SUPPORTED" != x1; then
+DEFINES="$DEFINES -DMISSING_64BIT_ATOMICS"
+fi
+
 dnl Check for Endianness
 AC_C_BIGENDIAN(
little_endian=no,
little_endian=yes,
little_endian=no,
diff --git a/src/util/Makefile.sources b/src/util/Makefile.sources
index 8ee45d5..e905734 100644
--- a/src/util/Makefile.sources
+++ b/src/util/Makefile.sources
@@ -41,10 +41,11 @@ MESA_UTIL_FILES := \
string_to_uint_map.h \
strndup.h \
strtod.c \
strtod.h \
texcompress_rgtc_tmp.h \
+   u_atomic.c \
u_atomic.h \
u_endian.h \
u_queue.c \
u_queue.h \
u_string.h \
diff --git a/src/util/u_atomic.c b/src/util/u_atomic.c
new file mode 100644
index 000..44b75fb
--- /dev/null
+++ b/src/util/u_atomic.c
@@ -0,0 +1,75 @@
+/*
+ * Copyright © 2017 Gražvydas Ignotas
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+ * IN THE SOFTWARE.
+ */
+
+#if defined(MISSING_64BIT_ATOMICS) && defined(HAVE_PTHREAD)
+
+#include 
+#include 
+
+#if defined(HAVE_FUNC_ATTRIBUTE_WEAK) && !defined(__CYGWIN__)
+#define WEAK __attribute__((weak))
+#else
+#define WEAK
+#endif
+
+static pthread_mutex_t sync_mutex = PTHREAD_MUTEX_INITIALIZER;
+
+WEAK uint64_t
+__sync_add_and_fetch_8(uint64_t *ptr, uint64_t val)
+{
+   uint64_t r;
+
+   pthread_mutex_lock(&sync_mutex);
+   *ptr += val;
+   r = *ptr;
+   pthread_mutex_unlock(&sync_mutex);
+
+   return r;
+}
+
+WEAK uint64_t
+__sync_sub_and_fetch_8(uint64_t *ptr, uint64_t val)
+{
+   uint64_t r;
+
+   pthread_mutex_lock(&sync_mutex);
+   *ptr -= val;
+   r = *ptr;
+   pthread_mutex_unlock(&sync_mutex);
+
+   return r;
+}
+
+WEAK uint64_t
+__atomic_fetch_add_8(uint64_t *ptr, uint64_t val, int memorder)
+{
+   return __sync_add_and_fetch(ptr, val);
+}
+
+WEAK uint64_t
+__atomic_fetch_sub_8(uint64_t *ptr, uint64_t val, int memorder)
+{
+   return __sync_sub_and_fetch(ptr, val);
+}
+
+#endif
-- 
2.7.4

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev