changes
authorbdemsky <bdemsky>
Tue, 13 Oct 2009 01:14:13 +0000 (01:14 +0000)
committerbdemsky <bdemsky>
Tue, 13 Oct 2009 01:14:13 +0000 (01:14 +0000)
Robust/src/Runtime/DSTM/interface/trans.c
Robust/src/Runtime/STM/commit.c
Robust/src/Runtime/STM/delaycomp.h
Robust/src/Runtime/STM/sandbox.c
Robust/src/Runtime/STM/stm.c
Robust/src/Runtime/STM/tm.h
Robust/src/Runtime/thread.c

index 81cd2081cbd95bbafb5a6bb20e2250255f0bc799..4ba7c47ce7734150ecbdaeee197fe9d1d7db0bb2 100644 (file)
@@ -287,7 +287,7 @@ inline int findmax(int *array, int arraylength) {
   return max;
 }
 
-//#define INLINEPREFETCH
+#define INLINEPREFETCH
 #define PREFTHRESHOLD 4
 
 /* This function is a prefetch call generated by the compiler that
index b4500520d46ca4a886ba0822760e2e288d9d74d4..b05d63c6275203ed40983e166b3815ba887d96af 100644 (file)
@@ -1,4 +1,7 @@
 #include<tm.h>
+#ifdef DELAYCOMP
+#include<delaycomp.h>
+#endif
 
 /* ================================================================
  * transCommit
index 48af99333324a78b7123a6ad336857f4c55d14d0..1671999652d0f412020f30bc9e562557b8969e73 100644 (file)
 struct pointerlist {
   int count;
   void * prev;
-  void * array[MAXPOINTERS];
+  void * array[MAXPOINTERS+1024];
 };
 
 struct primitivelist {
   int count;
-  int array[MAXVALUES];
+  int array[MAXVALUES+1024];
 };
 
 struct branchlist {
   int count;
-  char array[MAXBRANCHES];
+  char array[MAXBRANCHES+4096];
 };
 
 extern __thread struct pointerlist ptrstack;
index 3c07025e281247b31276e55be28199658f4e5183..052c0f16e945380013e1b4f3d161940a7db2728b 100644 (file)
@@ -5,25 +5,58 @@ __thread int transaction_check_counter;
 __thread jmp_buf aborttrans;
 __thread int abortenabled;
 __thread int * counter_reset_pointer;
+#ifdef DELAYCOMP
+#include "delaycomp.h"
+#endif
 
 void checkObjects() {
   if (abortenabled&&checktrans()) {
-    printf("Abort\n");
+    printf("Loop Abort\n");
     transaction_check_counter=(*counter_reset_pointer=HIGH_CHECK_FREQUENCY);
-    longjmp(aborttrans, 1);
+#ifdef TRANSSTATS
+    numTransAbort++;
+#endif
+    freenewobjs();
+    objstrReset();
+    t_chashreset();
+#ifdef READSET
+    rd_t_chashreset();
+#endif
+#ifdef DELAYCOMP
+    dc_t_chashreset();
+    ptrstack.count=0;
+    primstack.count=0;
+    branchstack.count=0;
+#endif
+    _longjmp(aborttrans, 1);
   }
   transaction_check_counter=*counter_reset_pointer;
 }
 
 /* Do sandboxing */
 void errorhandler(int sig, struct sigcontext ctx) {
-  printf("Error\n");
+  //  printf("Error\n");
   if (abortenabled&&checktrans()) {
     sigset_t toclear;
     sigemptyset(&toclear);
     sigaddset(&toclear, sig);
     sigprocmask(SIG_UNBLOCK, &toclear,NULL); 
-    longjmp(aborttrans, 1);
+#ifdef TRANSSTATS
+    numTransAbort++;
+#endif
+    freenewobjs();
+    objstrReset();
+    t_chashreset();
+#ifdef READSET
+    rd_t_chashreset();
+#endif
+#ifdef DELAYCOMP
+    dc_t_chashreset();
+    ptrstack.count=0;
+    primstack.count=0;
+    branchstack.count=0;
+#endif
+    _longjmp(aborttrans, 1);
   }
   threadhandler(sig, ctx);
 }
index 0b35efc71f98d3a73e1f19bf0a55c3cd2c0caa0e..4699540f1871e28cbd2f8234f8002695603a0cc7 100644 (file)
@@ -129,6 +129,22 @@ void randomdelay(int softaborted) {
  * -copies the object into the transaction cache
  * =============================================================
  */
+
+//void *TR(void *x, void * y, void *z) {
+//  void * inputvalue;                         
+//  if ((inputvalue=y)==NULL) x=NULL;          
+//  else {
+//    chashlistnode_t * cnodetmp=&c_table[(((unsigned INTPTR)inputvalue)&c_mask)>>4]; 
+//    do { 
+//      if (cnodetmp->key==inputvalue) {x=cnodetmp->val; break;} 
+//      cnodetmp=cnodetmp->next; 
+//      if (cnodetmp==NULL) {if (((struct ___Object___*)inputvalue)->___objstatus___&NEW) {x=inputvalue; break;} else
+//                          {x=transRead(inputvalue,z); asm volatile ("" : "=m" (c_table),"\=m" (c_mask)); break;}}
+//    } while(1);
+//  }
+//  return x;
+//}
+
 //__attribute__ ((pure)) 
 void *transRead(void * oid, void *gl) {
   objheader_t *tmp, *objheader;
index 864de75e28b768da6208c10004a03907b8d1ac27..9f3bdb9fe1b9dc543f35f042e8120e22ab6a79e1 100644 (file)
@@ -94,6 +94,7 @@ typedef struct objheader {
 #define NEED_LOCK_THRESHOLD 0.020000
 #define OSUSED(x) (((unsigned INTPTR)(x)->top)-((unsigned INTPTR) (x+1)))
 #define OSFREE(x) ((x)->size-OSUSED(x))
+
 #define TRANSREAD(x,y,z) { \
     void * inputvalue; \
     if ((inputvalue=y)==NULL) x=NULL;\
index e76b0d9d2b2da6a88d1cf068e08c9537127de2b6..5244d3064bab5f18dac22a54c0b986eab14fc515 100644 (file)
@@ -1,5 +1,6 @@
 #include "runtime.h"
 #include <sys/types.h>
+#include <sys/mman.h>
 #include <unistd.h>
 #include <errno.h>
 #include <stdlib.h>
@@ -148,7 +149,7 @@ void threadhandler(int sig, struct sigcontext ctx) {
   threadexit();
 }
 
-struct primitivelist *pl;
+#define downpage(x) ((void *)(((INTPTR)x)&~((INTPTR)4095)))
 
 void initializethreads() {
   struct sigaction sig;
@@ -173,6 +174,7 @@ void initializethreads() {
   //deprecated use of sighandler, but apparently still works
 #ifdef SANDBOX
   sig.sa_handler=(void *)errorhandler;
+  abortenabled=0;
 #else
   sig.sa_handler=(void *)threadhandler;
 #endif
@@ -196,7 +198,16 @@ void initializethreads() {
   dc_t_chashCreate(CHASH_SIZE, CLOADFACTOR);
   ptrstack.count=0;
   primstack.count=0;
-  pl=&primstack;
+  branchstack.count=0;
+  int a=mprotect((downpage(&ptrstack.array[MAXPOINTERS])), 4096, PROT_NONE);
+  if (a==-1)
+    perror("ptrstack");
+  a=mprotect(downpage(&primstack.array[MAXVALUES]), 4096, PROT_NONE);
+  if (a==-1)
+    perror("primstack");
+  a=mprotect(downpage(&branchstack.array[MAXBRANCHES]), 4096, PROT_NONE);
+  if (a==-1)
+    perror("branchstack");
 #endif
 #ifdef STMSTATS
   trec=calloc(1, sizeof(threadrec_t));
@@ -207,7 +218,9 @@ void initializethreads() {
   { 
     int i;
     for(i=0; i<TOTALNUMCLASSANDARRAY; i++) {
-      typesCausingAbort[i] = 0;
+      typesCausingAbort[i].numaccess = 0;
+      typesCausingAbort[i].numabort = 0;
+      typesCausingAbort[i].numtrans = 0;
     }
   }
 #endif
@@ -232,6 +245,18 @@ void initializethreads() {
 
 #if defined(THREADS)||defined(STM)
 void initthread(struct ___Thread___ * ___this___) {
+#ifdef SANDBOX
+  struct sigaction sig;
+  abortenabled=0;
+  sig.sa_handler=(void *)errorhandler;
+  sig.sa_flags=SA_RESTART;
+  sigemptyset(&sig.sa_mask);
+
+  /* Catch bus errors, segmentation faults, and floating point exceptions*/
+  sigaction(SIGBUS,&sig,0);
+  sigaction(SIGSEGV,&sig,0);
+  sigaction(SIGFPE,&sig,0);
+#endif
 #ifdef PRECISE_GC
   INTPTR p[]={1, (INTPTR) NULL, (INTPTR) ___this___};
   //Add our litem to list of threads
@@ -266,6 +291,16 @@ void initthread(struct ___Thread___ * ___this___) {
   dc_t_chashCreate(CHASH_SIZE, CLOADFACTOR);
   ptrstack.count=0;
   primstack.count=0;
+  branchstack.count=0;
+  int a=mprotect(downpage(&ptrstack.array[MAXPOINTERS]), 4096, PROT_NONE);
+  if (a==-1)
+    perror("ptrstack");
+  a=mprotect(downpage(&primstack.array[MAXVALUES]), 4096, PROT_NONE);
+  if (a==-1)
+    perror("primstack");
+  a=mprotect(downpage(&branchstack.array[MAXBRANCHES]), 4096, PROT_NONE);
+  if (a==-1)
+    perror("branchstack");
 #endif
  ___Thread____NNR____staticStart____L___Thread___((struct ___Thread____NNR____staticStart____L___Thread____params *)p);
  objstrDelete(t_cache);