Merge the smp and threaded RTS ways
[ghc-hetmet.git] / ghc / includes / STM.h
index 0db5185..4c2b109 100644 (file)
@@ -33,7 +33,7 @@
 #ifndef STM_H
 #define STM_H
 
-#ifdef SMP
+#ifdef THREADED_RTS
 //#define STM_CG_LOCK
 #define STM_FG_LOCKS
 #else
@@ -46,13 +46,10 @@ extern "C" {
 
 /*----------------------------------------------------------------------
 
-   Start of day
-   ------------
-
+   GC interaction
+   --------------
 */
 
-extern void initSTM(void);
-
 extern void stmPreGCHook(void);
 
 /*----------------------------------------------------------------------
@@ -64,8 +61,8 @@ extern void stmPreGCHook(void);
 
 /* Create and enter a new transaction context */
 
-extern StgTRecHeader *stmStartTransaction(StgRegTable *reg, StgTRecHeader *outer);
-extern StgTRecHeader *stmStartNestedTransaction(StgRegTable *reg, StgTRecHeader *outer
+extern StgTRecHeader *stmStartTransaction(Capability *cap, StgTRecHeader *outer);
+extern StgTRecHeader *stmStartNestedTransaction(Capability *cap, StgTRecHeader *outer
 );
 
 /*
@@ -76,7 +73,7 @@ extern StgTRecHeader *stmStartNestedTransaction(StgRegTable *reg, StgTRecHeader
  * transaction contexts doomed to abort.
  */
 
-extern void stmAbortTransaction(StgTRecHeader *trec);
+extern void stmAbortTransaction(Capability *cap, StgTRecHeader *trec);
 
 /*
  * Ensure that a subsequent commit / validation will fail.  We use this 
@@ -87,7 +84,7 @@ extern void stmAbortTransaction(StgTRecHeader *trec);
  * in case other threads' updates make it valid in the mean time.
  */
 
-extern void stmCondemnTransaction(StgTRecHeader *trec);
+extern void stmCondemnTransaction(Capability *cap, StgTRecHeader *trec);
 
 /*
  * Return the trec within which the specified trec was created (not
@@ -158,20 +155,22 @@ extern StgBool stmValidateNestOfTransactions(StgTRecHeader *trec);
  * been committed to.
  */
 
-extern StgBool stmCommitTransaction(StgRegTable *reg, StgTRecHeader *trec);
-extern StgBool stmCommitNestedTransaction(StgRegTable *reg, StgTRecHeader *trec);
+extern StgBool stmCommitTransaction(Capability *cap, StgTRecHeader *trec);
+extern StgBool stmCommitNestedTransaction(Capability *cap, StgTRecHeader *trec);
 
 /*
  * Test whether the current transaction context is valid and, if so,
  * start the thread waiting for updates to any of the tvars it has
  * ready from and mark it as blocked.  It is an error to call stmWait
- * if the thread is already waiting.
+ * if the thread is already waiting.  
  */
 
-extern StgBool stmWait(StgRegTable *reg,
+extern StgBool stmWait(Capability *cap,
                        StgTSO *tso, 
                        StgTRecHeader *trec);
 
+extern void stmWaitUnlock(Capability *cap, StgTRecHeader *trec);
+
 /*
  * Test whether the current transaction context is valid and, if so,
  * leave the thread waiting and mark it as blocked again.  If the
@@ -180,7 +179,7 @@ extern StgBool stmWait(StgRegTable *reg,
  * thread is not waiting.
  */
 
-extern StgBool stmReWait(StgTSO *tso);
+extern StgBool stmReWait(Capability *cap, StgTSO *tso);
 
 /*----------------------------------------------------------------------
 
@@ -188,7 +187,7 @@ extern StgBool stmReWait(StgTSO *tso);
    --------------------------
 */
 
-extern StgTVar *stmNewTVar(StgRegTable *reg,
+extern StgTVar *stmNewTVar(Capability *cap,
                            StgClosure *new_value);
 
 /*----------------------------------------------------------------------
@@ -202,7 +201,7 @@ extern StgTVar *stmNewTVar(StgRegTable *reg,
  * thread's current transaction.
  */
 
-extern StgClosure *stmReadTVar(StgRegTable *reg,
+extern StgClosure *stmReadTVar(Capability *cap,
                                StgTRecHeader *trec, 
                               StgTVar *tvar);
 
@@ -210,7 +209,7 @@ extern StgClosure *stmReadTVar(StgRegTable *reg,
  * thread's current transaction.
  */
 
-extern void stmWriteTVar(StgRegTable *reg,
+extern void stmWriteTVar(Capability *cap,
                          StgTRecHeader *trec,
                         StgTVar *tvar, 
                         StgClosure *new_value);