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

Reply via email to