[DHG_packages] 01/01: ghc: backport patches to use gcc SMP primtives on powerpc and add missing MO_WriteBarrier

Clint Adams clint at moszumanska.debian.org
Thu Oct 6 05:59:26 UTC 2016


This is an automated email from the git hooks/post-receive script.

clint pushed a commit to branch master
in repository DHG_packages.

commit 6c85e8fa057c35e85231ab95d955b954160e6520
Author: Clint Adams <clint at debian.org>
Date:   Wed Oct 5 15:30:41 2016 -0400

    ghc: backport patches to use gcc SMP primtives on powerpc and add missing MO_WriteBarrier
---
 p/ghc/debian/changelog                           |  10 ++-
 p/ghc/debian/patches/add-missing-MO_WriteBarrier |  40 +++++++++
 p/ghc/debian/patches/ppc-smp-primitives          | 100 +++++++++++++++++++++++
 p/ghc/debian/patches/series                      |   2 +
 4 files changed, 150 insertions(+), 2 deletions(-)

diff --git a/p/ghc/debian/changelog b/p/ghc/debian/changelog
index 77467de..9688d9b 100644
--- a/p/ghc/debian/changelog
+++ b/p/ghc/debian/changelog
@@ -1,10 +1,16 @@
-ghc (7.10.3-10) UNRELEASED; urgency=medium
+ghc (7.10.3-10) unstable; urgency=medium
 
   [ Balint Reczey ]
   * Disable PIE to fix build when PIE is the default in gcc
     (change taken/revised from Ubuntu, Closes: #712228)
 
- -- Gianfranco Costamagna <locutusofborg at debian.org>  Tue, 27 Sep 2016 17:00:13 +0200
+  [ Clint Adams ]
+  * Backport upstream 563a4857abcee4a6e43c68323274309c58f42aa0 to use gcc's
+    SMP primitives instead of GHC's broken ones.
+  * Backport upstream 7053019e7b04842dd7364039381d8c4c069489a2 to add a
+    missing MO_WriteBarrier to emitPrimOp.
+
+ -- Clint Adams <clint at debian.org>  Wed, 05 Oct 2016 15:27:23 -0400
 
 ghc (7.10.3-9) unstable; urgency=medium
 
diff --git a/p/ghc/debian/patches/add-missing-MO_WriteBarrier b/p/ghc/debian/patches/add-missing-MO_WriteBarrier
new file mode 100644
index 0000000..83f22a7
--- /dev/null
+++ b/p/ghc/debian/patches/add-missing-MO_WriteBarrier
@@ -0,0 +1,40 @@
+From: Ben Gamari <bgamari.foss at gmail.com>
+Date: Tue, 30 Aug 2016 21:08:05 +0000 (-0400)
+Subject: StgCmmPrim: Add missing MO_WriteBarrier
+X-Git-Url: https://git.haskell.org/ghc.git/commitdiff_plain/7053019e7b04842dd7364039381d8c4c069489a2
+
+StgCmmPrim: Add missing MO_WriteBarrier
+
+Test Plan: Good question
+
+Reviewers: austin, trommler, simonmar, rrnewton
+
+Reviewed By: simonmar
+
+Subscribers: RyanGlScott, thomie
+
+Differential Revision: https://phabricator.haskell.org/D2495
+
+GHC Trac Issues: #12469
+
+(cherry picked from commit d40d6df74a9fca382a84709ac9bc862897fbec18)
+---
+
+diff --git a/compiler/codeGen/StgCmmPrim.hs b/compiler/codeGen/StgCmmPrim.hs
+index 5d3b94f..3cb9f83 100644
+--- a/compiler/codeGen/StgCmmPrim.hs
++++ b/compiler/codeGen/StgCmmPrim.hs
+@@ -310,8 +310,11 @@ emitPrimOp _ [res] GetCurrentCCSOp [_dummy_arg]
+ emitPrimOp dflags [res] ReadMutVarOp [mutv]
+    = emitAssign (CmmLocal res) (cmmLoadIndexW dflags mutv (fixedHdrSizeW dflags) (gcWord dflags))
+ 
+-emitPrimOp dflags [] WriteMutVarOp [mutv,var]
+-   = do emitStore (cmmOffsetW dflags mutv (fixedHdrSizeW dflags)) var
++emitPrimOp dflags res@[] WriteMutVarOp [mutv,var]
++   = do -- Without this write barrier, other CPUs may see this pointer before
++        -- the writes for the closure it points to have occurred.
++        emitPrimCall res MO_WriteBarrier []
++        emitStore (cmmOffsetW dflags mutv (fixedHdrSizeW dflags)) var
+         emitCCall
+                 [{-no results-}]
+                 (CmmLit (CmmLabel mkDirty_MUT_VAR_Label))
diff --git a/p/ghc/debian/patches/ppc-smp-primitives b/p/ghc/debian/patches/ppc-smp-primitives
new file mode 100644
index 0000000..11b4108
--- /dev/null
+++ b/p/ghc/debian/patches/ppc-smp-primitives
@@ -0,0 +1,100 @@
+From: Peter Trommler <ptrommler at acm.org>
+Date: Mon, 16 May 2016 13:19:09 +0000 (+0200)
+Subject: PPC: Implement SMP primitives using gcc built-ins
+X-Git-Tag: ghc-8.0.1-release~11
+X-Git-Url: https://git.haskell.org/ghc.git/commitdiff_plain/f4e6b32831bd718a040b382865ac7aea1254bf4e
+
+PPC: Implement SMP primitives using gcc built-ins
+
+The SMP primitives were missing appropriate memory barriers
+(sync, isync instructions) on all PowerPCs.
+
+Use the built-ins _sync_* provided by gcc and clang. This
+reduces code size significantly.
+
+Remove broken mark for concprog001 on powerpc64. The referenced
+ticket number (11259) was wrong.
+
+Test Plan: validate on powerpc and ARM
+
+Reviewers: erikd, austin, simonmar, bgamari, hvr
+
+Reviewed By: bgamari, hvr
+
+Subscribers: thomie
+
+Differential Revision: https://phabricator.haskell.org/D2225
+
+GHC Trac Issues: #12070
+
+(cherry picked from commit 563a4857abcee4a6e43c68323274309c58f42aa0)
+---
+
+--- a/includes/stg/SMP.h
++++ b/includes/stg/SMP.h
+@@ -119,14 +119,8 @@
+           :"+r" (result), "+m" (*p)
+           : /* no input-only operands */
+         );
+-#elif powerpc_HOST_ARCH
+-    __asm__ __volatile__ (
+-        "1:     lwarx     %0, 0, %2\n"
+-        "       stwcx.    %1, 0, %2\n"
+-        "       bne-      1b"
+-        :"=&r" (result)
+-        :"r" (w), "r" (p)
+-    );
++#elif powerpc_HOST_ARCH || powerpc64_HOST_ARCH || powerpc64le_HOST_ARCH
++    result = __sync_lock_test_and_set(p, w);
+ #elif sparc_HOST_ARCH
+     result = w;
+     __asm__ __volatile__ (
+@@ -194,20 +188,8 @@
+           :"=a"(o), "+m" (*(volatile unsigned int *)p)
+           :"0" (o), "r" (n));
+     return o;
+-#elif powerpc_HOST_ARCH
+-    StgWord result;
+-    __asm__ __volatile__ (
+-        "1:     lwarx     %0, 0, %3\n"
+-        "       cmpw      %0, %1\n"
+-        "       bne       2f\n"
+-        "       stwcx.    %2, 0, %3\n"
+-        "       bne-      1b\n"
+-        "2:"
+-        :"=&r" (result)
+-        :"r" (o), "r" (n), "r" (p)
+-        :"cc", "memory"
+-    );
+-    return result;
++#elif powerpc_HOST_ARCH || powerpc64_HOST_ARCH || powerpc64le_HOST_ARCH
++    return __sync_val_compare_and_swap(p, o, n);
+ #elif sparc_HOST_ARCH
+     __asm__ __volatile__ (
+         "cas [%1], %2, %0"
+@@ -268,6 +250,7 @@
+ 
+ // RRN: Generalized to arbitrary increments to enable fetch-and-add in
+ // Haskell code (fetchAddIntArray#).
++// PT: add-and-fetch, returns new value
+ EXTERN_INLINE StgWord
+ atomic_inc(StgVolatilePtr p, StgWord incr)
+ {
+@@ -279,6 +262,8 @@
+             "+r" (r), "+m" (*p):
+     );
+     return r + incr;
++#elif powerpc_HOST_ARCH || powerpc64_HOST_ARCH || powerpc64le_HOST_ARCH
++    return __sync_add_and_fetch(p, incr);
+ #else
+     StgWord old, new_;
+     do {
+@@ -300,6 +285,8 @@
+             "+r" (r), "+m" (*p):
+     );
+     return r-1;
++#elif powerpc_HOST_ARCH || powerpc64_HOST_ARCH || powerpc64le_HOST_ARCH
++    return __sync_sub_and_fetch(p, (StgWord) 1);
+ #else
+     StgWord old, new_;
+     do {
diff --git a/p/ghc/debian/patches/series b/p/ghc/debian/patches/series
index 0c2f607..64a287b 100644
--- a/p/ghc/debian/patches/series
+++ b/p/ghc/debian/patches/series
@@ -8,3 +8,5 @@ cabal-show-detail-direct.patch
 sh4-platform-detection-support.patch
 sparc64-initial-platform-support.patch
 do-not-use-SHELL
+ppc-smp-primitives
+add-missing-MO_WriteBarrier

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-haskell/DHG_packages.git



More information about the Pkg-haskell-commits mailing list