systemc: Override notifyWork for timeout/event_and_list sensitivities.
authorGabe Black <gabeblack@google.com>
Wed, 22 Aug 2018 21:28:37 +0000 (14:28 -0700)
committerGabe Black <gabeblack@google.com>
Tue, 25 Sep 2018 23:55:10 +0000 (23:55 +0000)
The notifyWork function for SensitivityEventAndList assumes it's
being triggered by an event which is part of its list, but when
SensitivityTimeoutAndEventAndList triggers it might be from an event
or from a timeout. This change overrides notifyWork for that class and
makes it delegate to notifyWork for the subclasses depending on whether
there's an event pointer.

Change-Id: I598af2b78d71ee9934edea10ca7ac5c88149e3f3
Reviewed-on: https://gem5-review.googlesource.com/12247
Reviewed-by: Gabe Black <gabeblack@google.com>
Maintainer: Gabe Black <gabeblack@google.com>

src/systemc/core/process.cc
src/systemc/core/process.hh

index 3e629c3ecda2fdf85f50dffb634a452d96f97b6f..5d5c5216f206e1189f4a989a4ec4a0a6adb75e16 100644 (file)
@@ -104,6 +104,18 @@ SensitivityEventOrList::~SensitivityEventOrList()
         Event::getFromScEvent(e)->delSensitivity(this);
 }
 
+void
+SensitivityTimeoutAndEventAndList::notifyWork(Event *e)
+{
+    if (e) {
+        // An event went off which must be part of the sc_event_and_list.
+        SensitivityEventAndList::notifyWork(e);
+    } else {
+        // There's no inciting event, so this must be a timeout.
+        SensitivityTimeout::notifyWork(e);
+    }
+}
+
 
 class UnwindExceptionReset : public ::sc_core::sc_unwind_exception
 {
index 267a7ed3d9fd7fab40eda273fd923bf0bc2b5cf1..fe75aa7de82e9bc5b48c9e504489c42b6ce32e84 100644 (file)
@@ -138,6 +138,8 @@ class SensitivityTimeoutAndEventAndList :
         Sensitivity(p), SensitivityTimeout(p, t),
         SensitivityEventAndList(p, eal)
     {}
+
+    void notifyWork(Event *e) override;
 };
 
 class SensitivityTimeoutAndEventOrList :