Do not setObjPtr for nodegroup messages 10/4910/13
authorNitin Bhat <nbhat4@illinois.edu>
Fri, 18 Jan 2019 21:58:44 +0000 (15:58 -0600)
committerNitin Bhat <nbhat4@illinois.edu>
Wed, 10 Apr 2019 18:21:24 +0000 (13:21 -0500)
Previously, on receiving nodegroup messages, 'setObjPtr' was called
to set the local object pointer in the received message. This was later
used to invoke the entry method on the local object (by calling
'getObjPtr'). Calling 'setObjPtr' sets the ptr field in the union
variable called 'type', overwriting the CkGroupID field of the union.

For supporting the Zerocopy Post API for nodegroups, this CkGroupID field
was necessary to be retained correctly in the envelope. For this reason,
this patch does not call 'setObjPtr' and instead directly passes the local obj
ptr to 'invokeEntry' method without having the need to set/get the local
obj pointer in the envelope. Additionally, nodegroup messages do not
have their type set to 'ForChareMsg' anymore and the function
'_processForChareMsg' is removed from the code as it is no longer used.

Change-Id: Id2eb75e9f08719d8c9e2f42261abf711e25694c4

src/ck-core/ck.C

index 0cd5c93a66b6ba5ded87c714f1846c637512577f..79999ae5c00ade9f09ea2de2214612dd07d2cc4b 100644 (file)
@@ -1005,13 +1005,6 @@ static inline void _processForPlainChareMsg(CkCoreState *ck,envelope *env)
   _STATS_RECORD_PROCESS_MSG_1();
 }
 
-static inline void _processForChareMsg(CkCoreState *ck,envelope *env)
-{
-  int epIdx = env->getEpIdx();
-  void *obj = env->getObjPtr();
-  _invokeEntry(epIdx,env,obj);
-}
-
 static inline void _processFillVidMsg(CkCoreState *ck,envelope *env)
 {
   ck->process(); // ck->process() updates mProcessed count used in QD
@@ -1110,18 +1103,11 @@ static inline void _processForBocMsg(CkCoreState *ck,envelope *env)
   }
 }
 
-static inline void _deliverForNodeBocMsg(CkCoreState *ck,envelope *env,void *obj)
-{
-  env->setMsgtype(ForChareMsg);
-  env->setObjPtr(obj);
-  _processForChareMsg(ck,env);
-  _STATS_RECORD_PROCESS_NODE_BRANCH_1();
-}
-
 static inline void _deliverForNodeBocMsg(CkCoreState *ck,int epIdx, envelope *env,void *obj)
 {
   env->setEpIdx(epIdx);
-  _deliverForNodeBocMsg(ck,env, obj);
+  _invokeEntry(epIdx,env,obj);
+  _STATS_RECORD_PROCESS_NODE_BRANCH_1();
 }
 
 static inline void _processForNodeBocMsg(CkCoreState *ck,envelope *env)
@@ -1146,9 +1132,7 @@ static inline void _processForNodeBocMsg(CkCoreState *ck,envelope *env)
   }
   CmiImmediateUnlock(CksvAccess(_nodeGroupTableImmLock));
   ck->process(); // ck->process() updates mProcessed count used in QD
-  env->setMsgtype(ForChareMsg);
-  env->setObjPtr(obj);
-  _processForChareMsg(ck,env);
+  _invokeEntry(env->getEpIdx(),env,obj);
   _STATS_RECORD_PROCESS_NODE_BRANCH_1();
 }