some drain changes in timing (kevin's) and some memory mode assertion changes so that when you come out of resume, you only assert if you're really wrong.
src/cpu/simple/atomic.cc: memory mode assertion change so that it only goes off if it's supposed to. src/cpu/simple/timing.cc: some drain changes (kevin's) and some changes to memoryMode assertions so that they don't go off when they're not supposed to. --HG-- extra : convert_revision : 007d8610f097e08f01367b905ada49f93cf37ca3
This commit is contained in:
parent
727dea78c4
commit
024b33a1ef
2 changed files with 14 additions and 11 deletions
|
@ -182,9 +182,9 @@ AtomicSimpleCPU::unserialize(Checkpoint *cp, const string §ion)
|
|||
void
|
||||
AtomicSimpleCPU::resume()
|
||||
{
|
||||
assert(system->getMemoryMode() == System::Atomic);
|
||||
changeState(SimObject::Running);
|
||||
if (thread->status() == ThreadContext::Active) {
|
||||
assert(system->getMemoryMode() == System::Atomic);
|
||||
if (!tickEvent.scheduled())
|
||||
tickEvent.schedule(curTick);
|
||||
}
|
||||
|
|
|
@ -146,6 +146,8 @@ void
|
|||
TimingSimpleCPU::resume()
|
||||
{
|
||||
if (_status != SwitchedOut && _status != Idle) {
|
||||
assert(system->getMemoryMode() == System::Timing);
|
||||
|
||||
// Delete the old event if it existed.
|
||||
if (fetchEvent) {
|
||||
if (fetchEvent->scheduled())
|
||||
|
@ -159,7 +161,6 @@ TimingSimpleCPU::resume()
|
|||
fetchEvent->schedule(curTick);
|
||||
}
|
||||
|
||||
assert(system->getMemoryMode() == System::Timing);
|
||||
changeState(SimObject::Running);
|
||||
}
|
||||
|
||||
|
@ -190,6 +191,10 @@ TimingSimpleCPU::takeOverFrom(BaseCPU *oldCPU)
|
|||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (_status != Running) {
|
||||
_status = Idle;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
@ -533,15 +538,6 @@ TimingSimpleCPU::completeDataAccess(Packet *pkt)
|
|||
assert(_status == DcacheWaitResponse);
|
||||
_status = Running;
|
||||
|
||||
if (getState() == SimObject::Draining) {
|
||||
completeDrain();
|
||||
|
||||
delete pkt->req;
|
||||
delete pkt;
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
Fault fault = curStaticInst->completeAcc(pkt, this, traceData);
|
||||
|
||||
if (pkt->isRead() && pkt->req->isLocked()) {
|
||||
|
@ -551,6 +547,13 @@ TimingSimpleCPU::completeDataAccess(Packet *pkt)
|
|||
delete pkt->req;
|
||||
delete pkt;
|
||||
|
||||
if (getState() == SimObject::Draining) {
|
||||
advancePC(fault);
|
||||
completeDrain();
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
postExecute();
|
||||
advanceInst(fault);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue