int32_t MRouter::sendSetStateAll(MemRequest *mreq, MsgAction ma, TimeDelta_t lat) /* send setState to others, return how many {{{1 */ { if(up_node.empty()) return 0; // top node? bool doStats = mreq->getStatsFlag(); AddrType addr = mreq->getAddr(); if (addr == 0xa000000005601213) { I(0); } I(mreq->isSetState()); int32_t conta = 0; for(size_t i=0;i<up_node.size();i++) { MemRequest *breq = MemRequest::createSetState(self_mobj, mreq->getCreator(), ma, addr, doStats); breq->addPendingSetStateAck(mreq); breq->startSetState(up_node[i], lat); conta++; } return conta; }
int32_t MRouter::sendSetStateOthers(MemRequest *mreq, MsgAction ma, TimeDelta_t lat) /* send setState to others, return how many {{{1 */ { if (up_node.size() <= 1) return 0; // if single node, for sure it does not get one bool doStats = mreq->getStatsFlag(); AddrType addr = mreq->getAddr(); MemObj *skip_mobj = 0; UPMapType::const_iterator it = up_map.find(mreq->getHomeNode()); I(it != up_map.end()); skip_mobj = it->second; int32_t conta = 0; I(mreq->isReq() || mreq->isReqAck()); for(size_t i=0;i<up_node.size();i++) { if (up_node[i] == skip_mobj) continue; if (addr == 0xa000000005601213) { I(0); } MemRequest *breq = MemRequest::createSetState(self_mobj, mreq->getCreator(), ma, addr, doStats); breq->addPendingSetStateAck(mreq); breq->startSetState(up_node[i], lat); conta++; } return conta; }
int32_t MRouter::sendSetStateOthersPos(uint32_t pos, MemRequest *mreq, MsgAction ma, TimeDelta_t lat) /* send setState to specific pos, return how many {{{1 */ { if (up_node.size() <= 1) return 0; // if single node, for sure it does not get one bool doStats = mreq->getStatsFlag(); AddrType addr = mreq->getAddr(); if (addr == 0xa000000005601213) { I(0); } MemRequest *breq = MemRequest::createSetState(self_mobj, mreq->getCreator(), ma, addr, doStats); breq->addPendingSetStateAck(mreq); breq->startSetState(up_node[pos], lat); return 1; }