From: Juho S. <js...@us...> - 2006-06-06 01:48:13
|
Update of /cvsroot/sbcl/sbcl/src/compiler/generic In directory sc8-pr-cvs8.sourceforge.net:/tmp/cvs-serv7777/src/compiler/generic Modified Files: early-objdef.lisp genesis.lisp late-type-vops.lisp objdef.lisp vm-fndb.lisp Log Message: 0.9.13.22: Implement SB-THREAD mutexes and waitqueues using only pthread functionality on platforms that don't support Linux futexes. New platforms that can be compiled with SB-THREAD: * Solaris/x86 (seems to be as stable as SBCL threads on Linux) * OS X/x86 (some known stability problems, but doesn't fail on the thread regression tests every time) * FreeBSD/x86 (reportedly "flat-out broken", tends to cause kernel panics) While I (Juho) am doing the final merge from lutex-branch to HEAD, much of the work was done by Cyrus Harmon, based on an initial implementation by Nathan Froyd. The Solaris work was funded by Tellme Networks, Inc. Index: early-objdef.lisp =================================================================== RCS file: /cvsroot/sbcl/sbcl/src/compiler/generic/early-objdef.lisp,v retrieving revision 1.28 retrieving revision 1.29 diff -u -d -r1.28 -r1.29 --- early-objdef.lisp 26 Aug 2005 20:30:04 -0000 1.28 +++ early-objdef.lisp 3 Jun 2006 20:26:52 -0000 1.29 @@ -146,7 +146,10 @@ fdefn ; 01010110 no-tls-value-marker ; 01011010 - unused01 ; 01011110 + #!-sb-lutex + unused01 + #!+sb-lutex + lutex ; 01011110 unused02 ; 01100010 unused03 ; 01100110 unused04 ; 01101010 Index: genesis.lisp =================================================================== RCS file: /cvsroot/sbcl/sbcl/src/compiler/generic/genesis.lisp,v retrieving revision 1.119 retrieving revision 1.120 diff -u -d -r1.119 -r1.120 --- genesis.lisp 13 May 2006 16:25:45 -0000 1.119 +++ genesis.lisp 3 Jun 2006 20:26:52 -0000 1.120 @@ -2925,6 +2925,8 @@ (defconstant new-directory-core-entry-type-code 3861) (defconstant initial-fun-core-entry-type-code 3863) (defconstant page-table-core-entry-type-code 3880) +#!+sb-lutex +(defconstant lutex-table-core-entry-type-code 3887) (defconstant end-core-entry-type-code 3840) (declaim (ftype (function (sb!vm:word) sb!vm:word) write-word)) Index: late-type-vops.lisp =================================================================== RCS file: /cvsroot/sbcl/sbcl/src/compiler/generic/late-type-vops.lisp,v retrieving revision 1.9 retrieving revision 1.10 diff -u -d -r1.9 -r1.10 --- late-type-vops.lisp 14 Jul 2005 18:35:35 -0000 1.9 +++ late-type-vops.lisp 3 Jun 2006 20:26:52 -0000 1.10 @@ -106,6 +106,10 @@ (!define-type-vops fdefn-p nil nil nil (fdefn-widetag)) +#!+(and sb-thread sb-lutex) +(!define-type-vops lutexp nil nil nil + (lutex-widetag)) + (!define-type-vops funcallable-instance-p nil nil nil (funcallable-instance-header-widetag)) Index: objdef.lisp =================================================================== RCS file: /cvsroot/sbcl/sbcl/src/compiler/generic/objdef.lisp,v retrieving revision 1.43 retrieving revision 1.44 diff -u -d -r1.43 -r1.44 --- objdef.lisp 5 Jan 2006 11:18:00 -0000 1.43 +++ objdef.lisp 3 Jun 2006 20:26:52 -0000 1.44 @@ -395,6 +395,20 @@ (real :c-type "double" :length #!-x86-64 2 #!+x86-64 1) (imag :c-type "double" :length #!-x86-64 2 #!+x86-64 1)) +#!+(and sb-thread sb-lutex) +(define-primitive-object (lutex + :lowtag other-pointer-lowtag + :widetag lutex-widetag + :alloc-trans %make-lutex) + (gen :c-type "long" :length 1) + (live :c-type "long" :length 1) + (next :c-type "struct lutex *" :length 1) + (prev :c-type "struct lutex *" :length 1) + (mutex :c-type "pthread_mutex_t *" + :length 1) + (condition-variable :c-type "pthread_cond_t *" + :length 1)) + ;;; this isn't actually a lisp object at all, it's a c structure that lives ;;; in c-land. However, we need sight of so many parts of it from Lisp that ;;; it makes sense to define it here anyway, so that the GENESIS machinery Index: vm-fndb.lisp =================================================================== RCS file: /cvsroot/sbcl/sbcl/src/compiler/generic/vm-fndb.lisp,v retrieving revision 1.32 retrieving revision 1.33 diff -u -d -r1.32 -r1.33 --- vm-fndb.lisp 6 Sep 2005 14:29:01 -0000 1.32 +++ vm-fndb.lisp 3 Jun 2006 20:26:52 -0000 1.33 @@ -216,6 +216,13 @@ (defknown make-value-cell (t) t (flushable movable)) +;;;; threading + +#!+(and sb-thread sb-lutex) +(progn + (defknown sb!vm::%make-lutex () sb!vm::lutex ()) + (defknown sb!vm::lutexp (t) boolean (foldable flushable))) + (defknown (dynamic-space-free-pointer binding-stack-pointer-sap control-stack-pointer-sap) () system-area-pointer |