fix a bug of message size alignment in persistent messages
authorYanhua Sun <sun51@illinois.edu>
Fri, 1 Feb 2013 02:30:44 +0000 (21:30 -0500)
committerYanhua Sun <sun51@illinois.edu>
Fri, 1 Feb 2013 02:30:44 +0000 (21:30 -0500)
src/arch/gemini_gni/machine-persistent.c
src/arch/util/persist-comm.c

index a98e1f47c8d06ae3756be3b07220b4c37b5d5cc5..194547cdb494dd93401daa58d41db8c6b2bd5ef7 100644 (file)
@@ -25,14 +25,18 @@ void LrtsSendPersistentMsg(PersistentHandle h, int destNode, int size, void *msg
     uint8_t tag = LMSG_PERSISTENT_INIT_TAG;
     SMSG_QUEUE *queue = &smsg_queue;
 
+    if (size > slot->sizeMax) {
+        CmiPrintf("size: %d sizeMax: %d mype=%d destPe=%d\n", size, slot->sizeMax, CmiMyPe(), destNode);
+        CmiAbort("Abort: Invalid size\n");
+    }
+
     destIndex = slot->addrIndex;
-    
     CmiAssert(CmiNodeOf(slot->destPE) == destNode);
     if (slot->destBuf[destIndex].destAddress) {
         slot->addrIndex = (destIndex+1)%PERSIST_BUFFERS_NUM;
 #if  DELTA_COMPRESS
         if(slot->compressFlag)
-            size = CompressPersistentMsg(h, size, msg);
+            size = ALIGN64(CompressPersistentMsg(h, size, msg));
 #endif
         LrtsPrepareEnvelope(msg, size);
         CONTROL_MSG *control_msg_tmp =  construct_control_msg(size, msg, -1);
@@ -90,7 +94,7 @@ void LrtsSendPersistentMsg(PersistentHandle h, int destNode, int size, void *m)
         slot->addrIndex = (destIndex+1)%PERSIST_BUFFERS_NUM;
 #if  DELTA_COMPRESS
         if(slot->compressFlag)
-            size = CompressPersistentMsg(h, size, m);
+            size = ALIGN64(CompressPersistentMsg(h, size, m));
 #endif
         MallocPostDesc(pd);
         if(size <= LRTS_GNI_RDMA_THRESHOLD) {
@@ -346,11 +350,9 @@ void setupRecvSlot(PersistentReceivesTable *slot, int maxBytes)
 {
   int i;
   for (i=0; i<PERSIST_BUFFERS_NUM; i++) {
-      CmiPrintf("[%d] request memory %d:%d\n", CmiMyPe(), maxBytes, i);
       char *buf = PerAlloc(maxBytes+sizeof(int)*2);
       _MEMCHECK(buf);
       memset(buf, 0, maxBytes+sizeof(int)*2);
-      CmiPrintf("[%d] request memory %d:%d done done \n", CmiMyPe(), maxBytes, i);
       /* used large page and from mempool, memory always registered */
     slot->destBuf[i].mem_hndl = GetMemHndl(buf);
     slot->destBuf[i].destAddress = buf;
index 08fe0933c7e678a7ad12f24e15f618224a863e45..7762c48b15560446f5d5ddb5414c66d550343306 100644 (file)
@@ -8,6 +8,7 @@
 */
 /*@{*/
 
+#define ALIGN16(x)       (size_t)((~15)&((x)+15))
 #include "converse.h"
 #if CMK_PERSISTENT_COMM
 //#define EXTERNAL_COMPRESS 1
@@ -168,7 +169,7 @@ PersistentHandle CmiCreateCompressPersistent(int destPE, int maxBytes, int compr
   slot = (PersistentSendsTable *)h;
 
   slot->destPE = destPE;
-  slot->sizeMax = maxBytes;
+  slot->sizeMax = ALIGN16(maxBytes);
   slot->addrIndex = 0;
   PersistentRequestMsg *msg = (PersistentRequestMsg *)CmiAlloc(sizeof(PersistentRequestMsg));
   msg->maxBytes = maxBytes;
@@ -199,7 +200,7 @@ PersistentHandle CmiCreateCompressPersistentSize(int destPE, int maxBytes, int c
   slot = (PersistentSendsTable *)h;
 
   slot->destPE = destPE;
-  slot->sizeMax = maxBytes;
+  slot->sizeMax = ALIGN16(maxBytes);
   slot->addrIndex = 0;
   PersistentRequestMsg *msg = (PersistentRequestMsg *)CmiAlloc(sizeof(PersistentRequestMsg));
   msg->maxBytes = maxBytes;
@@ -229,7 +230,7 @@ PersistentHandle CmiCreatePersistent(int destPE, int maxBytes)
   slot = (PersistentSendsTable *)h;
 
   slot->destPE = destPE;
-  slot->sizeMax = maxBytes;
+  slot->sizeMax = ALIGN16(maxBytes);
   slot->addrIndex = 0;
   PersistentRequestMsg *msg = (PersistentRequestMsg *)CmiAlloc(sizeof(PersistentRequestMsg));
   msg->maxBytes = maxBytes;