Initialize zcMsgType for all message allocations 49/4949/8
authorNitin Bhat <nbhat4@illinois.edu>
Fri, 8 Feb 2019 19:48:05 +0000 (13:48 -0600)
committerEvan Ramos <evan@hpccharm.com>
Wed, 10 Apr 2019 17:28:38 +0000 (12:28 -0500)
zcMsgType is a converse header field used for identifying
zero copy messages (P2P_SEND, BCAST_SEND etc) from regular
charm messages (NO_ZC). For that reason, it is required to
initialize all allocated messages to NO_ZC to ensure that
they are not treated like zero copy messages.

Change-Id: I110769b2185c650c14c53a456bd4b687d4787783

src/conv-core/convcore.C
src/conv-core/cputopology.C

index b5bc8ecfd859cca8f8c71f71816e1d89a94f9654..3189b495228922d4c99e1719a9e6733b6d131dc7 100644 (file)
@@ -2507,6 +2507,9 @@ void CmiReductionHandleDynamicRequest(char *msg) {
 void CmiGetDynamicReductionRemote(int handlerIdx, int pe, int dataSize, void *data) {
   int size = CmiMsgHeaderSizeBytes+2*sizeof(int)+dataSize;
   char *msg = (char*)CmiAlloc(size);
+#if CMK_ONESIDED_IMPL
+  CMI_ZC_MSGTYPE(msg) = CMK_REG_NO_ZC_MSG;
+#endif
   int *values = (int*)(msg+CmiMsgHeaderSizeBytes);
   values[0] = pe;
   values[1] = dataSize;
@@ -2546,6 +2549,9 @@ void CmiSendReduce(CmiReduction *red) {
       msg_size = pup_size(p) + CmiReservedHeaderSize;
       pup_destroy(p);
       msg = CmiAlloc(msg_size);
+#if CMK_ONESIDED_IMPL
+      CMI_ZC_MSGTYPE(msg) = CMK_REG_NO_ZC_MSG;
+#endif
       p = pup_new_toMem((void*)(((char*)msg)+CmiReservedHeaderSize));
       (red->ops.pupFn)(p, mergedData);
       pup_destroy(p);
index e4a82607ff5014004239895a548d0827e98c78fb..29b25dd43546655d4c913d51efa8aa542a2a9295 100644 (file)
@@ -266,6 +266,7 @@ static void cpuTopoHandler(void *m)
     int i;
     hostTable = CmmNew();
     topomsg = (nodeTopoMsg *)CmiAlloc(sizeof(nodeTopoMsg)+CmiNumPes()*sizeof(int));
+    CMI_ZC_MSGTYPE(topomsg) = CMK_REG_NO_ZC_MSG;
     CmiSetHandler((char *)topomsg, CpvAccess(cpuTopoRecvHandlerIdx));
     topomsg->nodes = (int *)((char*)topomsg + sizeof(nodeTopoMsg));
     for (i=0; i<CmiNumPes(); i++) topomsg->nodes[i] = -1;
@@ -342,6 +343,7 @@ static void * combineMessage(int *size, void *data, void **remote, int count)
   for (i=0; i<count; i++) nprocs += ((hostnameMsg *)remote[i])->n;
   *size = sizeof(hostnameMsg)+sizeof(_procInfo)*nprocs;
   hostnameMsg *msg = (hostnameMsg *)CmiAlloc(*size);
+  CMI_ZC_MSGTYPE(msg) = CMK_REG_NO_ZC_MSG;
   msg->procs = (_procInfo*)((char*)msg + sizeof(hostnameMsg));
   msg->n = nprocs;
   CmiSetHandler((char *)msg, CpvAccess(cpuTopoHandlerIdx));
@@ -370,6 +372,7 @@ static void *emptyReduction(int *size, void *data, void **remote, int count)
   }
   *size = sizeof(topoDoneMsg);
   topoDoneMsg *msg = (topoDoneMsg *)CmiAlloc(sizeof(topoDoneMsg));
+  CMI_ZC_MSGTYPE(msg) = CMK_REG_NO_ZC_MSG;
   CmiSetHandler((char *)msg, CpvAccess(topoDoneHandlerIdx));
   return msg;
 }
@@ -601,6 +604,7 @@ extern "C" void LrtsInitCpuTopo(char **argv)
 
     /* prepare a msg to send */
   msg = (hostnameMsg *)CmiAlloc(sizeof(hostnameMsg)+sizeof(_procInfo));
+  CMI_ZC_MSGTYPE(msg) = CMK_REG_NO_ZC_MSG;
   msg->n = 1;
   msg->procs = (_procInfo*)((char*)msg + sizeof(hostnameMsg));
   CmiSetHandler((char *)msg, CpvAccess(cpuTopoHandlerIdx));
@@ -621,6 +625,7 @@ extern "C" void LrtsInitCpuTopo(char **argv)
 
   if (CmiNumNodes() > 1) {
     topoDoneMsg *msg2 = (topoDoneMsg *)CmiAlloc(sizeof(topoDoneMsg));
+    CMI_ZC_MSGTYPE(msg2) = CMK_REG_NO_ZC_MSG;
     CmiSetHandler((char *)msg2, CpvAccess(topoDoneHandlerIdx));
     CmiReduce(msg2, sizeof(topoDoneMsg), emptyReduction);
     if ((CmiMyPe() == 0) || (CmiNumSpanTreeChildren(CmiMyPe()) > 0)) {