Ejemplo n.º 1
0
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);
    }
  }
}
Ejemplo n.º 2
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);
    }
  }
}
Ejemplo n.º 3
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);
}