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.
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.
ThreadContext *tc = threadContexts[i];
if (tc->status() == ThreadContext::Active && _status != Running) {
_status = Running;
- schedule(tickEvent, nextCycle());
+ reschedule(tickEvent, nextCycle(), true);
}
}
if (!tickEvent.scheduled())