Gabe Black has uploaded this change for review. (
https://gem5-review.googlesource.com/c/public/gem5/+/12036
Change subject: systemc: Handle event notifications scheduled before
sc_start.
......................................................................
systemc: Handle event notifications scheduled before sc_start.
After sc_start is called, gem5 has run far enough to have an event
queue to schedule the notification events on. Before then, it's still
legal to request a timed notification. The scheduler should keep track
of those requests, and once an event queue is available it should
add them to it.
Change-Id: Ie7445b1f2e616f4bd36044a09dbef9e1d12d7350
---
M src/systemc/core/scheduler.cc
M src/systemc/core/scheduler.hh
2 files changed, 16 insertions(+), 2 deletions(-)
diff --git a/src/systemc/core/scheduler.cc b/src/systemc/core/scheduler.cc
index 6bb67d1..5174627 100644
--- a/src/systemc/core/scheduler.cc
+++ b/src/systemc/core/scheduler.cc
@@ -60,6 +60,10 @@
p->ready();
}
+ for (auto ets: eventsToSchedule)
+ eq->schedule(ets.first, ets.second);
+ eventsToSchedule.clear();
+
if (_started)
eq->schedule(&maxTickEvent, maxTick);
diff --git a/src/systemc/core/scheduler.hh b/src/systemc/core/scheduler.hh
index 3ac7f41..73d660e 100644
--- a/src/systemc/core/scheduler.hh
+++ b/src/systemc/core/scheduler.hh
@@ -187,7 +187,11 @@
schedule(::Event *event, Tick tick)
{
pendingTicks[tick]++;
- eq->schedule(event, tick);
+
+ if (initReady)
+ eq->schedule(event, tick);
+ else
+ eventsToSchedule[event] = tick;
}
// For descheduling delayed/timed notifications/timeouts.
@@ -197,7 +201,11 @@
auto it = pendingTicks.find(event->when());
if (--it->second == 0)
pendingTicks.erase(it);
- eq->deschedule(event);
+
+ if (initReady)
+ eq->deschedule(event);
+ else
+ eventsToSchedule.erase(event);
}
// Tell the scheduler than an event fired for bookkeeping purposes.
@@ -302,6 +310,8 @@
ProcessList readyList;
ChannelList updateList;
+
+ std::map<::Event *, Tick> eventsToSchedule;
};
extern Scheduler scheduler;
--
To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/12036
To unsubscribe, or for help writing mail filters, visit
https://gem5-review.googlesource.com/settings
Gerrit-Project: public/gem5
Gerrit-Branch: master
Gerrit-Change-Id: Ie7445b1f2e616f4bd36044a09dbef9e1d12d7350
Gerrit-Change-Number: 12036
Gerrit-PatchSet: 1
Gerrit-Owner: Gabe Black <gabebl...@google.com>
Gerrit-MessageType: newchange
_______________________________________________
gem5-dev mailing list
gem5-dev@gem5.org
http://m5sim.org/mailman/listinfo/gem5-dev