void MemRequest::setStateAckDone(TimeDelta_t lat) { MemRequest *orig = setStateAckOrig; if(orig==0) return; if (orig->mt == mt_setState) orig->needsDisp |= needsDisp; setStateAckOrig = 0; I(orig->pendingSetStateAck>0); orig->pendingSetStateAck--; if (orig->pendingSetStateAck<=0) { if(orig->mt == mt_req) { orig->redoReqCB.schedule(lat); }else if (orig->mt == mt_reqAck) { orig->redoReqAckCB.schedule(lat); }else if (orig->mt == mt_setState) { //I(orig->setStateAckOrig==0); //orig->ack(); orig->convert2SetStateAck(orig->ma, orig->needsDisp); I(orig->currMemObj == orig->creatorObj); //orig->startSetStateAck(); // NOTE: no PortManager because this message is already accounted orig->redoSetStateAckAbs(globalClock); //orig->setStateAckDone(); No recursive/dep chains for the moment }else{ I(0); } } }
void MemRequest::setStateAckDone(TimeDelta_t lat) { MemRequest *orig = setStateAckOrig; if(orig==0) return; setStateAckOrig = 0; I(orig->pendingSetStateAck>0); orig->pendingSetStateAck--; if (orig->pendingSetStateAck<=0) { if(orig->mt == mt_req) { orig->redoReqCB.schedule(lat); }else if (orig->mt == mt_reqAck) { orig->redoReqAckCB.schedule(lat); }else if (orig->mt == mt_setState) { //I(orig->setStateAckOrig==0); //orig->ack(); orig->convert2SetStateAck(orig->ma); I(orig->currMemObj == orig->creatorObj); orig->startSetStateAck(); //orig->setStateAckDone(); No recursive/dep chains for the moment }else{ I(0); } } }
void meminterface_start_snoop_req(uint64_t addr, bool inv, uint16_t coreid, void *_mreq) { MemRequest *mreq = (MemRequest *)_mreq; //MSG("@%lld snoop %s 0x%lx %d %s",globalClock, mreq->getCurrMem()->getName(), addr, mreq->getAction(), inv?"inv":"wb"); mreq->convert2SetStateAck(); mreq->getCurrMem()->doSetStateAck(mreq); }