systemc: Override notifyWork for timeout/event_and_list sensitivities.

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>
This commit is contained in:
Gabe Black
2018-08-22 14:28:37 -07:00
parent c42dfdeda8
commit 71eeee9824
2 changed files with 14 additions and 0 deletions

View 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
{

View File

@@ -138,6 +138,8 @@ class SensitivityTimeoutAndEventAndList :
Sensitivity(p), SensitivityTimeout(p, t),
SensitivityEventAndList(p, eal)
{}
void notifyWork(Event *e) override;
};
class SensitivityTimeoutAndEventOrList :