[openblas] 01/02: New patches that fix threading issue on mips64el.
Sébastien Villemot
sebastien at debian.org
Sat May 6 13:40:15 UTC 2017
This is an automated email from the git hooks/post-receive script.
sebastien pushed a commit to branch master
in repository openblas.
commit a9cb2a5bdcd205b58a20544a5f847000dc653f5c
Author: Sébastien Villemot <sebastien at debian.org>
Date: Sat May 6 15:20:34 2017 +0200
New patches that fix threading issue on mips64el.
+ d/p/mips-implement-mb-and-wmb.patch
+ d/p/mips-remove-incorrect-blas_lock-implementation.patch
Closes: 861486
Thanks: James Cowgill
Gbp-Dch: Full
---
debian/patches/mips-implement-mb-and-wmb.patch | 39 +++++++++++++++
...remove-incorrect-blas_lock-implementation.patch | 58 ++++++++++++++++++++++
debian/patches/series | 2 +
3 files changed, 99 insertions(+)
diff --git a/debian/patches/mips-implement-mb-and-wmb.patch b/debian/patches/mips-implement-mb-and-wmb.patch
new file mode 100644
index 0000000..eb3ce73
--- /dev/null
+++ b/debian/patches/mips-implement-mb-and-wmb.patch
@@ -0,0 +1,39 @@
+Description: mips: implement MB and WMB
+ The MIPS architecture has weak memory ordering and therefore requires
+ sutible memory barriers when doing lock free programming with multiple
+ threads (just like ARM does). This commit implements those barriers for
+ MIPS and MIPS64 using GCC bultins which is probably easiest way.
+Author: James Cowgill <james410 at cowgill.org.uk>
+Origin: https://github.com/jcowgill/OpenBLAS/commit/67836c2ab48a5d6a8cd227358fa67e2a260eba34
+Forwarded: https://github.com/xianyi/OpenBLAS/pull/1178
+Bug-Debian: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=861486
+Reviewed-By: Sébastien Villemot <sebastien at debian.org>
+Last-Update: 2017-05-06
+---
+This patch header follows DEP-3: http://dep.debian.net/deps/dep3/
+--- a/common_mips.h
++++ b/common_mips.h
+@@ -33,8 +33,8 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ #ifndef COMMON_MIPS
+ #define COMMON_MIPS
+
+-#define MB
+-#define WMB
++#define MB __sync_synchronize()
++#define WMB __sync_synchronize()
+
+ #define INLINE inline
+
+--- a/common_mips64.h
++++ b/common_mips64.h
+@@ -71,8 +71,8 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ #ifndef COMMON_MIPS64
+ #define COMMON_MIPS64
+
+-#define MB
+-#define WMB
++#define MB __sync_synchronize()
++#define WMB __sync_synchronize()
+
+ #define INLINE inline
+
diff --git a/debian/patches/mips-remove-incorrect-blas_lock-implementation.patch b/debian/patches/mips-remove-incorrect-blas_lock-implementation.patch
new file mode 100644
index 0000000..dc61d80
--- /dev/null
+++ b/debian/patches/mips-remove-incorrect-blas_lock-implementation.patch
@@ -0,0 +1,58 @@
+Description: mips: remove incorrect blas_lock implementations
+ MIPS 32-bit currently has an empty blas_lock implementation which is
+ worse than nothing at all. MIPS 64-bit does has a blas_lock
+ implementation but is broken. Remove them and fallback to the generic
+ version in common.h which should do the right thing on MIPS.
+Author: James Cowgill <james410 at cowgill.org.uk>
+Origin: https://github.com/jcowgill/OpenBLAS/commit/de7875ca5df77306c5f7216959d3c15d82a0a259
+Forwarded: https://github.com/xianyi/OpenBLAS/pull/1178
+Bug-Debian: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=861486
+Reviewed-By: Sébastien Villemot <sebastien at debian.org>
+Last-Update: 2017-05-06
+---
+This patch header follows DEP-3: http://dep.debian.net/deps/dep3/
+--- a/common_mips.h
++++ b/common_mips.h
+@@ -42,11 +42,6 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+
+ #ifndef ASSEMBLER
+
+-static void INLINE blas_lock(volatile unsigned long *address){
+-
+-}
+-#define BLAS_LOCK_DEFINED
+-
+ static inline unsigned int rpcc(void){
+ unsigned long ret;
+
+--- a/common_mips64.h
++++ b/common_mips64.h
+@@ -78,28 +78,6 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+
+ #ifndef ASSEMBLER
+
+-static void INLINE blas_lock(volatile unsigned long *address){
+-
+- long int ret, val = 1;
+-
+- do {
+- while (*address) {YIELDING;};
+-
+- __asm__ __volatile__(
+- "1: ll %0, %3\n"
+- " ori %2, %0, 1\n"
+- " sc %2, %1\n"
+- " beqz %2, 1b\n"
+- " andi %2, %0, 1\n"
+- " sync\n"
+- : "=&r" (val), "=m" (address), "=&r" (ret)
+- : "m" (address)
+- : "memory");
+-
+- } while (ret);
+-}
+-#define BLAS_LOCK_DEFINED
+-
+ static inline unsigned int rpcc(void){
+ unsigned long ret;
+
diff --git a/debian/patches/series b/debian/patches/series
index c0b5dd9..10169ef 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -5,3 +5,5 @@ no-embedded-lapack.patch
shared-blas-lapack.patch
matgen-symbols-not-included.patch
order-files.patch
+mips-implement-mb-and-wmb.patch
+mips-remove-incorrect-blas_lock-implementation.patch
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/debian-science/packages/openblas.git
More information about the debian-science-commits
mailing list