Merge branch 'charm' of charmgit:charm into charm
authorAaron Becker <akbecker@gmail.com>
Fri, 10 Sep 2010 15:35:23 +0000 (10:35 -0500)
committerAaron Becker <akbecker@gmail.com>
Fri, 10 Sep 2010 15:35:23 +0000 (10:35 -0500)
src/ck-core/debug-charm.C
src/conv-core/memory-charmdebug.c

index 3c101e8dbfdc4984cd186ba870f8577674013fe9..fa3afbc45fa4dc7f257609d44fb64ed8c4815e9c 100644 (file)
@@ -576,10 +576,14 @@ void CpdDeliverMessage(char * msg) {
   CpdDeliverMessageInt(msgNum);
 }
 
-void *CpdGetNextMessageConditional(CsdSchedulerState_t*) {
+void *CpdGetNextMessageConditional(CsdSchedulerState_t *s) {
   int len;
+  void *msg;
+  if ((msg=CdsFifo_Dequeue(s->localQ)) != NULL) return msg;
+  CqsDequeue((Queue_struct*)s->schedQ,(void **)&msg);
+  if (msg!=NULL) return msg;
   read(conditionalPipe[0], &len, 4);
-  void *msg = CmiAlloc(len);
+  msg = CmiAlloc(len);
   read(conditionalPipe[0], msg, len);
   return msg;
 }
index e834d3fdef5348a39e37caa09f4f432d762c6922..ee3685620c36bf3cec110dccd2563de6ea62fa94 100644 (file)
@@ -857,6 +857,7 @@ MemStat * CreateMemStat() {
 
 
 /*********************** Cross-chare corruption detection *******************/
+static int reportMEM = 0;
 
 /* This first method uses two fields (userCRC and slotCRC) of the Slot structure
  * to store the CRC32 checksum of the user data and the slot itself. It compares
@@ -868,26 +869,31 @@ static int CpdCRC32 = 0;
 
 static int checkSlotCRC(void *userPtr) {
   Slot *sl = UserToSlot(userPtr);
-  unsigned int crc = crc32_initial((unsigned char*)sl, sizeof(Slot)-2*sizeof(unsigned int));
-  crc = crc32_update((unsigned char*)sl->from, sl->stackLen*sizeof(void*), crc);
-  return sl->slotCRC == crc;
+  if (sl!=NULL) {
+    unsigned int crc = crc32_initial((unsigned char*)sl, sizeof(Slot)-2*sizeof(unsigned int));
+    crc = crc32_update((unsigned char*)sl->from, sl->stackLen*sizeof(void*), crc);
+    return sl->slotCRC == crc;
+  } else return 0;
 }
 
 static int checkUserCRC(void *userPtr) {
   Slot *sl = UserToSlot(userPtr);
-  return sl->userCRC == crc32_initial((unsigned char*)userPtr, sl->userSize);
+  if (sl!=NULL) return sl->userCRC == crc32_initial((unsigned char*)userPtr, sl->userSize);
+  else return 0;
 }
 
 static void resetUserCRC(void *userPtr) {
   Slot *sl = UserToSlot(userPtr);
-  sl->userCRC = crc32_initial((unsigned char*)userPtr, sl->userSize);
+  if (sl!=NULL) sl->userCRC = crc32_initial((unsigned char*)userPtr, sl->userSize);
 }
 
 static void resetSlotCRC(void *userPtr) {
   Slot *sl = UserToSlot(userPtr);
-  unsigned int crc = crc32_initial((unsigned char*)sl, sizeof(Slot)-2*sizeof(unsigned int));
-  crc = crc32_update((unsigned char*)sl->from, sl->stackLen*sizeof(void*), crc);
-  sl->slotCRC = crc;
+  if (sl!=NULL) {
+    unsigned int crc = crc32_initial((unsigned char*)sl, sizeof(Slot)-2*sizeof(unsigned int));
+    crc = crc32_update((unsigned char*)sl->from, sl->stackLen*sizeof(void*), crc);
+    sl->slotCRC = crc;
+  }
 }
 
 static void ResetAllCRC() {
@@ -899,7 +905,7 @@ static void ResetAllCRC() {
   SLOT_ITERATE_END
 }
 
-static void CheckAllCRC(int report) {
+static void CheckAllCRC() {
   Slot *cur;
   unsigned int crc1, crc2;
 
@@ -908,9 +914,9 @@ static void CheckAllCRC(int report) {
     crc1 = crc32_update((unsigned char*)cur->from, cur->stackLen*sizeof(void*), crc1);
     crc2 = crc32_initial((unsigned char*)SlotToUser(cur), cur->userSize);
     /* Here we can check if a modification has occured */
-    if (report && cur->slotCRC != crc1) CmiPrintf("CRC: Object %d modified slot for %p\n",memory_chare_id,SlotToUser(cur));
+    if (reportMEM && cur->slotCRC != crc1) CmiPrintf("CRC: Object %d modified slot for %p\n",memory_chare_id,SlotToUser(cur));
     cur->slotCRC = crc1;
-    if (report && cur->userCRC != crc2 && memory_chare_id != cur->chareID)
+    if (reportMEM && cur->userCRC != crc2 && memory_chare_id != cur->chareID)
       CmiPrintf("CRC: Object %d modified memory of object %d for %p\n",memory_chare_id,cur->chareID,SlotToUser(cur));
     cur->userCRC = crc2;
   SLOT_ITERATE_END
@@ -922,7 +928,6 @@ static void CheckAllCRC(int report) {
  */
 
 static int CpdMemBackup = 0;
-static int reportMEM = 0;
 
 static void backupMemory() {
   Slot *cur;
@@ -932,7 +937,7 @@ static void backupMemory() {
   int totalMemory = SLOTSPACE;
   {
     SLOT_ITERATE_START(cur)
-      totalMemory += SLOTSPACE + cur->userSize + cur->stackLen*sizeof(void*);
+      totalMemory += sizeof(Slot) + cur->userSize + cur->stackLen*sizeof(void*);
     SLOT_ITERATE_END
   }
   if (reportMEM) CmiPrintf("CPD: total memory in use (%d): %d\n",CmiMyPe(),totalMemory);
@@ -1037,7 +1042,7 @@ static void CpdMMAPhandler(int sig, siginfo_t *si, void *unused){
     unProtectedPages = newUnProtectedPages;
   }
   unProtectedPages[unProtectedPagesSize++] = pageToUnprotect;
-  CpdNotify(CPD_CROSSCORRUPTION, si->si_addr, memory_chare_id);
+  if (reportMEM) CpdNotify(CPD_CROSSCORRUPTION, si->si_addr, memory_chare_id);
   //CmiPrintf("Got SIGSEGV at address: 0x%lx\n", (long) si->si_addr);
   //CmiPrintStackTrace(0);
 }
@@ -1090,9 +1095,9 @@ void CpdResetMemory() {
 /** Called after the entry method to check if the chare that just received the
  * message has corrupted the memory of some other chare, or some system memory.
  */
-void CpdCheckMemory(int report) {
+void CpdCheckMemory() {
   if (CpdMprotect) unProtectMemory();
-  if (CpdCRC32) CheckAllCRC(report);
+  if (CpdCRC32) CheckAllCRC();
   if (CpdMemBackup) checkBackup();
   Slot *cur;
   SLOT_ITERATE_START(cur)