sim: Remove autoserialize support for exit events
authorAndreas Sandberg <andreas.sandberg@arm.com>
Tue, 1 Sep 2015 12:41:45 +0000 (13:41 +0100)
committerAndreas Sandberg <andreas.sandberg@arm.com>
Tue, 1 Sep 2015 12:41:45 +0000 (13:41 +0100)
This changeset removes the support for the autoserialize parameter in
GlobalSimLoopExitEvent (including exitSimLoop()) and
LocalSimLoopExitEvent.

Auto-serialization of the LocalSimLoopExitEvent was never used, so
this is not expected to affect anything. However, it was sometimes
used for GlobalSimLoopExitEvent. Unfortunately, serialization of
global events has never been supported, so checkpoints with such
events will currently cause simulation panics.

The serialize parameter to exitSimLoop() has been left in-place to
maintain API compatibility (removing it would affect m5ops). Instead
of just dropping it, we now print a warning if the parameter is set
and the exit event is scheduled in the future (i.e., not at the
current tick).

src/sim/sim_events.cc
src/sim/sim_events.hh

index 94bd06191dd4eff1a871ff375423e472a0fe854d..cfd08f7acc77c3e2032e5bb0540ac44f8325ad13 100644 (file)
@@ -55,9 +55,8 @@ using namespace std;
 
 GlobalSimLoopExitEvent::GlobalSimLoopExitEvent(Tick when,
                                                const std::string &_cause,
-                                               int c, Tick r, bool serialize)
-    : GlobalEvent(when, Sim_Exit_Pri,
-                  IsExitEvent | (serialize ? AutoSerialize : 0)),
+                                               int c, Tick r)
+    : GlobalEvent(when, Sim_Exit_Pri, IsExitEvent),
       cause(_cause), code(c), repeat(r)
 {
 }
@@ -83,19 +82,16 @@ void
 exitSimLoop(const std::string &message, int exit_code, Tick when, Tick repeat,
             bool serialize)
 {
-    new GlobalSimLoopExitEvent(when + simQuantum, message, exit_code, repeat,
-                               serialize);
-}
+    warn_if(serialize && (when != curTick() || repeat),
+            "exitSimLoop called with a delay and auto serialization. This is "
+            "currently unsupported.");
 
-LocalSimLoopExitEvent::LocalSimLoopExitEvent()
-    : Event(Sim_Exit_Pri, IsExitEvent | AutoSerialize),
-      cause(""), code(0), repeat(0)
-{
+    new GlobalSimLoopExitEvent(when + simQuantum, message, exit_code, repeat);
 }
 
 LocalSimLoopExitEvent::LocalSimLoopExitEvent(const std::string &_cause, int c,
-                                   Tick r, bool serialize)
-    : Event(Sim_Exit_Pri, IsExitEvent | (serialize ? AutoSerialize : 0)),
+                                   Tick r)
+    : Event(Sim_Exit_Pri, IsExitEvent),
       cause(_cause), code(c), repeat(r)
 {
 }
@@ -119,7 +115,6 @@ LocalSimLoopExitEvent::description() const
 void
 LocalSimLoopExitEvent::serialize(CheckpointOut &cp) const
 {
-    paramOut(cp, "type", string("SimLoopExitEvent"));
     Event::serialize(cp);
 
     SERIALIZE_SCALAR(cause);
@@ -137,15 +132,6 @@ LocalSimLoopExitEvent::unserialize(CheckpointIn &cp)
     UNSERIALIZE_SCALAR(repeat);
 }
 
-Serializable *
-LocalSimLoopExitEvent::createForUnserialize(CheckpointIn &cp,
-                                            const string &section)
-{
-    return new LocalSimLoopExitEvent();
-}
-
-REGISTER_SERIALIZEABLE("LocalSimLoopExitEvent", LocalSimLoopExitEvent)
-
 //
 // constructor: automatically schedules at specified time
 //
index 7c239301023d2f0cb153058fdc8e84f7c0d65af0..8a384019a0f98a2517f4a5d5bd5ad7df10e1841f 100644 (file)
@@ -63,7 +63,7 @@ class GlobalSimLoopExitEvent : public GlobalEvent
     // non-scheduling version for createForUnserialize()
     GlobalSimLoopExitEvent();
     GlobalSimLoopExitEvent(Tick when, const std::string &_cause, int c,
-                           Tick repeat = 0, bool serialize = false);
+                           Tick repeat = 0);
 
     const std::string getCause() const { return cause; }
     const int getCode() const { return code; }
@@ -83,8 +83,7 @@ class LocalSimLoopExitEvent : public Event
 
   public:
     LocalSimLoopExitEvent();
-    LocalSimLoopExitEvent(const std::string &_cause, int c, Tick repeat = 0,
-                          bool serialize = false);
+    LocalSimLoopExitEvent(const std::string &_cause, int c, Tick repeat = 0);
 
     const std::string getCause() const { return cause; }
     const int getCode() const { return code; }