A more complete attempt to fix the clock skew.

--HG--
extra : convert_revision : b2d505de51fc5fcae5177b2a13140729474e249e
This commit is contained in:
Gabe Black 2006-10-27 07:09:14 -04:00
parent d5974eff73
commit a46e19f738

View file

@ -188,8 +188,11 @@ AtomicSimpleCPU::resume()
changeState(SimObject::Running);
if (thread->status() == ThreadContext::Active) {
if (!tickEvent.scheduled())
tickEvent.schedule(curTick);
if (!tickEvent.scheduled()) {
Tick nextTick = curTick + cycles(1) - 1;
nextTick -= (nextTick % (cycles(1)));
tickEvent.schedule(nextTick);
}
}
}
}
@ -217,7 +220,9 @@ AtomicSimpleCPU::takeOverFrom(BaseCPU *oldCPU)
ThreadContext *tc = threadContexts[i];
if (tc->status() == ThreadContext::Active && _status != Running) {
_status = Running;
tickEvent.schedule(curTick);
Tick nextTick = curTick + cycles(1) - 1;
nextTick -= (nextTick % (cycles(1)));
tickEvent.schedule(nextTick);
break;
}
}
@ -237,7 +242,7 @@ AtomicSimpleCPU::activateContext(int thread_num, int delay)
//Make sure ticks are still on multiples of cycles
Tick nextTick = curTick + cycles(1) - 1;
nextTick -= (nextTick % (cycles(1)));
tickEvent.schedule(curTick + cycles(delay));
tickEvent.schedule(nextTick);
_status = Running;
}