systemc: Don't run the ready event inline when unpausing.
Now that delta events are handled explicitly by the scheduler, there's no reason to run the readyEvent inline when returning from a pause. The delta events will necessarily be run after the evaluate and update phases. Change-Id: Iad6d431a87742354e3a46a0fb44c309aa785ea60 Reviewed-on: https://gem5-review.googlesource.com/12214 Reviewed-by: Gabe Black <gabeblack@google.com> Maintainer: Gabe Black <gabeblack@google.com>
This commit is contained in:
@@ -196,10 +196,8 @@ Scheduler::runReady()
|
||||
e->run();
|
||||
deltas.clear();
|
||||
|
||||
if (runOnce) {
|
||||
eq->reschedule(&maxTickEvent, eq->getCurTick());
|
||||
runOnce = false;
|
||||
}
|
||||
if (runOnce)
|
||||
schedulePause();
|
||||
}
|
||||
|
||||
void
|
||||
@@ -220,14 +218,6 @@ Scheduler::pause()
|
||||
kernel->status(::sc_core::SC_PAUSED);
|
||||
runOnce = false;
|
||||
scMain->run();
|
||||
|
||||
// If the ready event is supposed to run now, run it inline so that it
|
||||
// preempts any delta notifications which were scheduled while we were
|
||||
// paused.
|
||||
if (readyEvent.scheduled()) {
|
||||
eq->deschedule(&readyEvent);
|
||||
runReady();
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
@@ -298,13 +288,16 @@ Scheduler::scheduleStop(bool finish_delta)
|
||||
|
||||
if (!finish_delta) {
|
||||
// If we're not supposed to finish the delta cycle, flush the list
|
||||
// of ready processes and scheduled updates.
|
||||
// of ready processes, scheduled updates, and delta notifications.
|
||||
Process *p;
|
||||
while ((p = readyList.getNext()))
|
||||
p->popListNode();
|
||||
Channel *c;
|
||||
while ((c = updateList.getNext()))
|
||||
c->popListNode();
|
||||
for (auto &e: deltas)
|
||||
e->deschedule();
|
||||
deltas.clear();
|
||||
}
|
||||
eq->schedule(&stopEvent, eq->getCurTick());
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user