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
|
void
|
||||||
AtomicSimpleCPU::resume()
|
AtomicSimpleCPU::resume()
|
||||||
{
|
{
|
||||||
assert(system->getMemoryMode() == System::Atomic);
|
|
||||||
changeState(SimObject::Running);
|
changeState(SimObject::Running);
|
||||||
if (thread->status() == ThreadContext::Active) {
|
if (thread->status() == ThreadContext::Active) {
|
||||||
|
assert(system->getMemoryMode() == System::Atomic);
|
||||||
if (!tickEvent.scheduled())
|
if (!tickEvent.scheduled())
|
||||||
tickEvent.schedule(curTick);
|
tickEvent.schedule(curTick);
|
||||||
}
|
}
|
||||||
|
|
|
@ -146,6 +146,8 @@ void
|
||||||
TimingSimpleCPU::resume()
|
TimingSimpleCPU::resume()
|
||||||
{
|
{
|
||||||
if (_status != SwitchedOut && _status != Idle) {
|
if (_status != SwitchedOut && _status != Idle) {
|
||||||
|
assert(system->getMemoryMode() == System::Timing);
|
||||||
|
|
||||||
// Delete the old event if it existed.
|
// Delete the old event if it existed.
|
||||||
if (fetchEvent) {
|
if (fetchEvent) {
|
||||||
if (fetchEvent->scheduled())
|
if (fetchEvent->scheduled())
|
||||||
|
@ -159,7 +161,6 @@ TimingSimpleCPU::resume()
|
||||||
fetchEvent->schedule(curTick);
|
fetchEvent->schedule(curTick);
|
||||||
}
|
}
|
||||||
|
|
||||||
assert(system->getMemoryMode() == System::Timing);
|
|
||||||
changeState(SimObject::Running);
|
changeState(SimObject::Running);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -190,6 +191,10 @@ TimingSimpleCPU::takeOverFrom(BaseCPU *oldCPU)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (_status != Running) {
|
||||||
|
_status = Idle;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -533,15 +538,6 @@ TimingSimpleCPU::completeDataAccess(Packet *pkt)
|
||||||
assert(_status == DcacheWaitResponse);
|
assert(_status == DcacheWaitResponse);
|
||||||
_status = Running;
|
_status = Running;
|
||||||
|
|
||||||
if (getState() == SimObject::Draining) {
|
|
||||||
completeDrain();
|
|
||||||
|
|
||||||
delete pkt->req;
|
|
||||||
delete pkt;
|
|
||||||
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
Fault fault = curStaticInst->completeAcc(pkt, this, traceData);
|
Fault fault = curStaticInst->completeAcc(pkt, this, traceData);
|
||||||
|
|
||||||
if (pkt->isRead() && pkt->req->isLocked()) {
|
if (pkt->isRead() && pkt->req->isLocked()) {
|
||||||
|
@ -551,6 +547,13 @@ TimingSimpleCPU::completeDataAccess(Packet *pkt)
|
||||||
delete pkt->req;
|
delete pkt->req;
|
||||||
delete pkt;
|
delete pkt;
|
||||||
|
|
||||||
|
if (getState() == SimObject::Draining) {
|
||||||
|
advancePC(fault);
|
||||||
|
completeDrain();
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
postExecute();
|
postExecute();
|
||||||
advanceInst(fault);
|
advanceInst(fault);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue