O3CPU: O3's tick event gets squashed when it is switched out. When repeatedly

switching between O3 and another CPU, O3's tick event might still be scheduled
in the event queue (as squashed).  Therefore, check for a squashed tick event
as well as a non-scheduled event when taking over from another CPU and deal
with it accordingly.
This commit is contained in:
Timothy M. Jones 2010-07-22 18:47:43 +01:00
parent 8c76715979
commit 9a3533ec84

View file

@ -1143,7 +1143,7 @@ FullO3CPU<Impl>::takeOverFrom(BaseCPU *oldCPU)
iew.takeOverFrom();
commit.takeOverFrom();
assert(!tickEvent.scheduled());
assert(!tickEvent.scheduled() || tickEvent.squashed());
// @todo: Figure out how to properly select the tid to put onto
// the active threads list.
@ -1168,7 +1168,7 @@ FullO3CPU<Impl>::takeOverFrom(BaseCPU *oldCPU)
ThreadContext *tc = threadContexts[i];
if (tc->status() == ThreadContext::Active && _status != Running) {
_status = Running;
schedule(tickEvent, nextCycle());
reschedule(tickEvent, nextCycle(), true);
}
}
if (!tickEvent.scheduled())